CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
normalize.test395 linesDownload Raw Back to test
1# 2018-01-082#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11#12# Tests for the sqlite3_normalize() extension function.13#14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17set testprefix normalize18 19foreach {tnum sql norm} {20  10021  {SELECT * FROM t1 WHERE a IN (1) AND b=51.42}22  {select*from t1 where a in(?,?,?)and b=?;}23 24  11025  {SELECT a, b+15, c FROM t1 WHERE d NOT IN (SELECT x FROM t2);}26  {select a,b+?,c from t1 where d not in(select x from t2);}27 28  12029  { SELECT NULL, b FROM t1 -- comment text30     WHERE d IN (WITH t(a) AS (VALUES(5)) /* CTE */31                 SELECT a FROM t)32        OR e='hello';33  }34  {select?,b from t1 where d in(with t(a)as(values(?))select a from t)or e=?;}35 36  12137  {/*Initial comment*/38   -- another comment line39   SELECT NULL  /* comment */ , b FROM t1 -- comment text40     WHERE d IN (WITH t(a) AS (VALUES(5)) /* CTE */41                 SELECT a FROM t)42        OR e='hello';43  }44  {select?,b from t1 where d in(with t(a)as(values(?))select a from t)or e=?;}45 46  13047  {/* Query containing parameters */48   SELECT x,$::abc(15),y,@abc,z,?99,w FROM t1 /* Trailing comment */}49  {select x,?,y,?,z,?,w from t1;}50 51  14052  {/* Long list on the RHS of IN */53   SELECT 15 IN (1,2,3,(SELECT * FROM t1),'xyz',x'abcd',22*(x+5),null);}54  {select?in(?,?,?);}55 56  15057  {SELECT x'abc'; -- illegal token}58  {}59 60  16061  {SELECT a,NULL,b FROM t1 WHERE c IS NOT NULL or D is null or e=5}62  {select a,?,b from t1 where c is not null or d is null or e=?;}63 64  17065  {/* IN list exactly 5 bytes long */66   SELECT * FROM t1 WHERE x IN (1,2,3);}67  {select*from t1 where x in(?,?,?);}68  18069  {    }70  {}71} {72  do_test $tnum [list sqlite3_normalize $sql] $norm73}74 75ifcapable normalize {76do_test 200 {77  execsql {78    CREATE TABLE t1(a,b);79  }80} {}81do_test 201 {82  set STMT [sqlite3_prepare_v3 $DB \83      "SELECT a, b FROM t1 WHERE b = ? ORDER BY a;" -1 0 TAIL]84 85  sqlite3_bind_null $STMT 186} {}87do_test 202 {88  sqlite3_normalized_sql $STMT89} {SELECT a,b FROM t1 WHERE b=?ORDER BY a;}90do_test 203 {91  sqlite3_finalize $STMT92} {SQLITE_OK}93 94do_test 210 {95  set STMT [sqlite3_prepare_v3 $DB \96      "SELECT a, b FROM t1 WHERE b = ? ORDER BY a;" -1 2 TAIL]97 98  sqlite3_bind_null $STMT 199} {}100do_test 211 {101  sqlite3_normalized_sql $STMT102} {SELECT a,b FROM t1 WHERE b=?ORDER BY a;}103do_test 212 {104  sqlite3_finalize $STMT105} {SQLITE_OK}106 107do_test 220 {108  set STMT [sqlite3_prepare_v3 $DB \109      "SELECT a, b FROM t1 WHERE b = 'a' ORDER BY a;" -1 2 TAIL]110} {/^[0-9A-Fa-f]+$/}111do_test 221 {112  sqlite3_normalized_sql $STMT113} {SELECT a,b FROM t1 WHERE b=?ORDER BY a;}114do_test 222 {115  sqlite3_finalize $STMT116} {SQLITE_OK}117 118do_test 297 {119  execsql {120    DROP TABLE t1;121  }122} {}123do_test 298 {124  execsql {125    CREATE TABLE t1(a,b,c,d,e,"col f",w,x,y,z);126    CREATE TABLE t2(x,"col y");127  }128} {}129do_test 299 {130  sqlite3_create_function db131} {SQLITE_OK}132 133foreach {tnum sql flags norm} {134  300135  {SELECT * FROM t1 WHERE a IN (1) AND b=51.42}136  0x2137  {0 {SELECT*FROM t1 WHERE a IN(?,?,?)AND b=?;}}138 139  310140  {SELECT a, b+15, c FROM t1 WHERE d NOT IN (SELECT x FROM t2);}141  0x2142  {0 {SELECT a,b+?,c FROM t1 WHERE d NOT IN(SELECT x FROM t2);}}143 144  320145  { SELECT NULL, b FROM t1 -- comment text146     WHERE d IN (WITH t(a) AS (VALUES(5)) /* CTE */147                 SELECT a FROM t)148        OR e='hello';149  }150  0x2151  {0 {SELECT?,b FROM t1 WHERE d IN(WITH t(a)AS(VALUES(?))SELECT a FROM t)OR e=?;}}152 153  321154  {/*Initial comment*/155   -- another comment line156   SELECT NULL  /* comment */ , b FROM t1 -- comment text157     WHERE d IN (WITH t(a) AS (VALUES(5)) /* CTE */158                 SELECT a FROM t)159        OR e='hello';160  }161  0x2162  {0 {SELECT?,b FROM t1 WHERE d IN(WITH t(a)AS(VALUES(?))SELECT a FROM t)OR e=?;}}163 164  330165  {/* Query containing parameters */166   SELECT x,$::abc(15),y,@abc,z,?99,w FROM t1 /* Trailing comment */}167  0x2168  {0 {SELECT x,?,y,?,z,?,w FROM t1;}}169 170  340171  {/* Long list on the RHS of IN */172   SELECT 15 IN (1,2,3,(SELECT * FROM t1),'xyz',x'abcd',22*(x+5),null);}173  0x2174  {1 {(1) no such column: x}}175 176  350177  {SELECT x'abc'; -- illegal token}178  0x2179  {1 {(1) unrecognized token: "x'abc'"}}180 181  360182  {SELECT a,NULL,b FROM t1 WHERE c IS NOT NULL or D is null or e=5}183  0x2184  {0 {SELECT a,?,b FROM t1 WHERE c IS NOT NULL OR d IS NULL OR e=?;}}185 186  370187  {/* IN list exactly 5 bytes long */188   SELECT * FROM t1 WHERE x IN (1,2,3);}189  0x2190  {0 {SELECT*FROM t1 WHERE x IN(?,?,?);}}191 192  400193  {SELECT a FROM t1 WHERE x IN (1,2,3) AND sqlite_version();}194  0x2195  {0 {SELECT a FROM t1 WHERE x IN(?,?,?)AND sqlite_version();}}196 197  410198  {SELECT a FROM t1 WHERE x IN (1,2,3) AND hex8();}199  0x2200  {1 {(1) wrong number of arguments to function hex8()}}201 202  420203  {SELECT a FROM t1 WHERE x IN (1,2,3) AND hex8('abc');}204  0x2205  {0 {SELECT a FROM t1 WHERE x IN(?,?,?)AND hex8(?);}}206 207  430208  {SELECT "a" FROM t1 WHERE "x" IN ("1","2",'3');}209  0x2210  {0 {SELECT a FROM t1 WHERE x IN(?,?,?);}}211 212  440213  {SELECT 'a' FROM t1 WHERE 'x';}214  0x2215  {0 {SELECT?FROM t1 WHERE?;}}216 217  450218  {SELECT [a] FROM t1 WHERE [x];}219  0x2220  {0 {SELECT a FROM t1 WHERE x;}}221 222  460223  {SELECT * FROM t1 WHERE x IN (x);}224  0x2225  {0 {SELECT*FROM t1 WHERE x IN(x);}}226 227  470228  {SELECT * FROM t1 WHERE x IN (x,a);}229  0x2230  {0 {SELECT*FROM t1 WHERE x IN(x,a);}}231 232  480233  {SELECT * FROM t1 WHERE x IN ([x],"a");}234  0x2235  {0 {SELECT*FROM t1 WHERE x IN(x,a);}}236 237  500238  {SELECT * FROM t1 WHERE x IN ([x],"a",'b',sqlite_version());}239  0x2240  {0 {SELECT*FROM t1 WHERE x IN(x,a,?,sqlite_version());}}241 242  520243  {SELECT * FROM t1 WHERE x IN (SELECT x FROM t1);}244  0x2245  {0 {SELECT*FROM t1 WHERE x IN(SELECT x FROM t1);}}246 247  540248  {SELECT * FROM t1 WHERE x IN ((SELECT x FROM t1));}249  0x2250  {0 {SELECT*FROM t1 WHERE x IN((SELECT x FROM t1));}}251 252  550253  {SELECT a, a+1, a||'b', a+"b" FROM t1;}254  0x2255  {0 {SELECT a,a+?,a||?,a+b FROM t1;}}256 257  570258  {SELECT * FROM t1 WHERE x IN (1);}259  0x2260  {0 {SELECT*FROM t1 WHERE x IN(?,?,?);}}261 262  580263  {SELECT * FROM t1 WHERE x IN (1,2);}264  0x2265  {0 {SELECT*FROM t1 WHERE x IN(?,?,?);}}266 267  590268  {SELECT * FROM t1 WHERE x IN (1,2,3);}269  0x2270  {0 {SELECT*FROM t1 WHERE x IN(?,?,?);}}271 272  600273  {SELECT * FROM t1 WHERE x IN (1,2,3,4);}274  0x2275  {0 {SELECT*FROM t1 WHERE x IN(?,?,?);}}276 277  610278  {SELECT * FROM t1 WHERE x IN (SELECT x FROM t1);}279  0x2280  {0 {SELECT*FROM t1 WHERE x IN(SELECT x FROM t1);}}281 282  620283  {SELECT * FROM t1 WHERE x IN (SELECT x FROM t1 WHERE x IN (1,2,3));}284  0x2285  {0 {SELECT*FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(?,?,?));}}286 287  630288  {SELECT * FROM t1 WHERE x IN (SELECT x FROM t1 WHERE x IN (x));}289  0x2290  {0 {SELECT*FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(x));}}291 292  640293  {SELECT x FROM t1 WHERE x IN (SELECT x FROM t1 WHERE x IN (294   SELECT x FROM t1 WHERE x IN (SELECT x FROM t1 WHERE x IN (295   SELECT x FROM t1 WHERE x IN (x)))));}296  0x2297  {0 {SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(x)))));}}298 299  650300  {SELECT x FROM t1 WHERE x IN (SELECT x FROM t1 WHERE x IN (301   SELECT x FROM t1 WHERE x IN (SELECT x FROM t1 WHERE x IN (302   SELECT x FROM t1 WHERE x IN (1)))));}303  0x2304  {0 {SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(SELECT x FROM t1 WHERE x IN(?,?,?)))));}}305 306  660307  {SELECT x FROM t1 WHERE x IN (1) UNION ALL SELECT x FROM t1 WHERE x IN (1);}308  0x2309  {0 {SELECT x FROM t1 WHERE x IN(?,?,?)UNION ALL SELECT x FROM t1 WHERE x IN(?,?,?);}}310 311  670312  {SELECT "col f", [col f] FROM t1;}313  0x2314  {0 {SELECT"col f","col f"FROM t1;}}315 316  680317  {SELECT a, "col f" FROM t1 LEFT OUTER JOIN t2 ON [t1].[col f] == [t2].[col y];}318  0x2319  {0 {SELECT a,"col f"FROM t1 LEFT OUTER JOIN t2 ON t1."col f"==t2."col y";}}320 321  690322  {SELECT * FROM ( WITH x AS ( SELECT * FROM t1 WHERE x IN ( 1)) SELECT 10);}323  0x2324  {0 {SELECT*FROM(WITH x AS(SELECT*FROM t1 WHERE x IN(?,?,?))SELECT?);}}325 326  700327  {SELECT rowid, oid, _rowid_ FROM t1;}328  0x2329  {0 {SELECT rowid,oid,_rowid_ FROM t1;}}330 331  710332  {SELECT x FROM t1 WHERE x IS NULL;}333  0x2334  {0 {SELECT x FROM t1 WHERE x IS NULL;}}335 336  740337  {SELECT x FROM t1 WHERE x IS NOT NULL;}338  0x2339  {0 {SELECT x FROM t1 WHERE x IS NOT NULL;}}340 341  750342  {SELECT x FROM t1 WHERE x = NULL;}343  0x2344  {0 {SELECT x FROM t1 WHERE x=?;}}345 346  760347  {SELECT x FROM t1 WHERE x IN ([x] IS NOT NULL, NULL, 1, 'a', "b", x'00');}348  0x2349  {0 {SELECT x FROM t1 WHERE x IN(x IS NOT NULL,?,?,?,b,?);}}350 351  800352  {ATTACH "normalize800.db" AS somefile;}353  0x2354  {0 {ATTACH"normalize800.db"AS somefile;}}355 356  810357  {ATTACH DATABASE "normalize810.db" AS somefile;}358  0x2359  {0 {ATTACH DATABASE"normalize810.db"AS somefile;}}360 361  900362  {INSERT INTO t1 (x) VALUES("sl1"), (1), ("sl2"), ('i');}363  0x2364  {0 {INSERT INTO t1(x)VALUES(?),(?),(?),(?);}}365 366  910367  {UPDATE t1 SET x = "sl1" WHERE x IN (1, "sl2", 'i');}368  0x2369  {0 {UPDATE t1 SET x=?WHERE x IN(?,?,?);}}370 371  920372  {UPDATE t1 SET x = "y" WHERE x IN (1, "sl1", 'i');}373  0x2374  {0 {UPDATE t1 SET x=y WHERE x IN(?,?,?);}}375 376  930377  {DELETE FROM t1 WHERE x IN (1, "sl1", 'i');}378  0x2379  {0 {DELETE FROM t1 WHERE x IN(?,?,?);}}380} {381  do_test $tnum {382    set code [catch {383      set STMT [sqlite3_prepare_v3 $DB $sql -1 $flags TAIL]384      sqlite3_normalized_sql $STMT385    } res]386    if {[info exists STMT]} {387      sqlite3_finalize $STMT; unset STMT388    }389    list $code $res390  } $norm391}392}393 394finish_test395