diff -Nru sqlite3-3.35.0/debian/changelog sqlite3-3.35.0-1/debian/changelog --- sqlite3-3.35.0/debian/changelog 2021-04-03 14:57:46.000000000 +0000 +++ sqlite3-3.35.0-1/debian/changelog 2021-04-04 17:25:13.000000000 +0000 @@ -1,8 +1,8 @@ -sqlite3 (3.35.0-17395~202104022043~202104031457~ubuntu20.10.1) groovy; urgency=low +sqlite3 (3.35.0-1-17377~202104021520~202104041725~ubuntu20.10.1) groovy; urgency=low * Auto build. - -- Gajj GNDU Sat, 03 Apr 2021 14:57:46 +0000 + -- Gajj GNDU Sun, 04 Apr 2021 17:25:13 +0000 sqlite3 (3.35.0) UNRELEASED; urgency=medium diff -Nru sqlite3-3.35.0/debian/git-build-recipe.manifest sqlite3-3.35.0-1/debian/git-build-recipe.manifest --- sqlite3-3.35.0/debian/git-build-recipe.manifest 2021-04-03 14:57:46.000000000 +0000 +++ sqlite3-3.35.0-1/debian/git-build-recipe.manifest 2021-04-04 17:25:13.000000000 +0000 @@ -1,3 +1,3 @@ -# git-build-recipe format 0.4 deb-version {debupstream}-17395~202104022043~202104031457 -lp:~linuxgndu/sqlite-recipe/+git/sqlite-recipe git-commit:9af69ff547d76f1f8c7c4513fdb6c0ca1a32f9fc +# git-build-recipe format 0.4 deb-version {debupstream}-1-17377~202104021520~202104041725 +lp:~linuxgndu/sqlite-recipe/+git/sqlite-recipe git-commit:8bec96953b78abf7ee0323850434e956a435b0ba nest-part packaging lp:sqlite-recipe debian debian git-commit:8d41916a566e0d2a5a2f72d5a417616b9f895822 diff -Nru sqlite3-3.35.0/doc/lemon.html sqlite3-3.35.0-1/doc/lemon.html --- sqlite3-3.35.0/doc/lemon.html 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/doc/lemon.html 2021-04-04 17:23:21.000000000 +0000 @@ -697,7 +697,6 @@
  • %stack_size
  • %start_symbol
  • %syntax_error -
  • %token
  • %token_class
  • %token_destructor
  • %token_prefix @@ -1080,37 +1079,14 @@

    See Error Processing.

    - -

    4.4.20 The %token directive

    - -

    Tokens are normally created automatically, the first time they are used. -Any identifier that begins with an upper-case letter is a token. - -

    Sometimes it is useful to declare tokens in advance, however. The -integer values assigned to each token determined by the order in which -the tokens are seen. So by declaring tokens in advance, it is possible to -cause some tokens to have low-numbered values, which might be desirable in -some grammers, or to have sequential values assigned to a sequence of -related tokens. For this reason, the %token directive is provided to -declare tokens in advance. The syntax is as follows: - -

    -%token TOKEN TOKEN... . -

    - -

    The %token directive is followed by zero or more token symbols and -terminated by a single ".". Each token named is created if it does not -already exist. Tokens are created in order. - - -

    4.4.21 The %token_class directive

    +

    4.4.20 The %token_class directive

    Undocumented. Appears to be related to the MULTITERMINAL concept. Implementation.

    -

    4.4.22 The %token_destructor directive

    +

    4.4.21 The %token_destructor directive

    The %destructor directive assigns a destructor to a non-terminal symbol. (See the description of the @@ -1126,7 +1102,7 @@ destructors.

    -

    4.4.23 The %token_prefix directive

    +

    4.4.22 The %token_prefix directive

    Lemon generates #defines that assign small integer constants to each terminal symbol in the grammar. If desired, Lemon will @@ -1153,7 +1129,7 @@ -

    4.4.24 The %token_type and %type directives

    +

    4.4.23 The %token_type and %type directives

    These directives are used to specify the data types for values on the parser's stack associated with terminal and non-terminal @@ -1190,7 +1166,7 @@ and able to pay that price, fine. You just need to know.

    -

    4.4.25 The %wildcard directive

    +

    4.4.24 The %wildcard directive

    The %wildcard directive is followed by a single token name and a period. This directive specifies that the identified token should diff -Nru sqlite3-3.35.0/ext/expert/expert1.test sqlite3-3.35.0-1/ext/expert/expert1.test --- sqlite3-3.35.0/ext/expert/expert1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/expert/expert1.test 2021-04-04 17:23:21.000000000 +0000 @@ -103,7 +103,7 @@ SELECT * FROM t1 } { (no new indexes) - SCAN t1 + SCAN TABLE t1 } do_setup_rec_test $tn.2 { @@ -112,7 +112,7 @@ SELECT * FROM t1 WHERE b>?; } { CREATE INDEX t1_idx_00000062 ON t1(b); - SEARCH t1 USING INDEX t1_idx_00000062 (b>?) + SEARCH TABLE t1 USING INDEX t1_idx_00000062 (b>?) } do_setup_rec_test $tn.3 { @@ -121,7 +121,7 @@ SELECT * FROM t1 WHERE b COLLATE nocase BETWEEN ? AND ? } { CREATE INDEX t1_idx_3e094c27 ON t1(b COLLATE NOCASE); - SEARCH t1 USING INDEX t1_idx_3e094c27 (b>? AND b? AND b? AND b? AND b? } { (no new indexes) - SEARCH example USING INDEX sqlite_autoindex_example_1 (A=? AND B>?) + SEARCH TABLE example USING INDEX sqlite_autoindex_example_1 (A=? AND B>?) } do_setup_rec_test $tn.17.5 { CREATE TABLE example (A INTEGER, B INTEGER, C INTEGER, PRIMARY KEY (A,B)); @@ -365,7 +365,7 @@ SELECT * FROM example WHERE a>? AND b=? } { CREATE INDEX example_idx_0000cb3f ON example(B, A); - SEARCH example USING INDEX example_idx_0000cb3f (B=? AND A>?) + SEARCH TABLE example USING INDEX example_idx_0000cb3f (B=? AND A>?) } do_setup_rec_test $tn.18.0 { @@ -377,7 +377,7 @@ SELECT x FROM SomeObject; } { (no new indexes) - SCAN SomeObject + SCAN TABLE SomeObject } do_setup_rec_test $tn.18.1 { CREATE TABLE SomeObject ( @@ -388,7 +388,7 @@ SELECT * FROM SomeObject WHERE x=?; } { CREATE INDEX SomeObject_idx_00000078 ON SomeObject(x); - SEARCH SomeObject USING COVERING INDEX SomeObject_idx_00000078 (x=?) + SEARCH TABLE SomeObject USING COVERING INDEX SomeObject_idx_00000078 (x=?) } } @@ -455,3 +455,4 @@ } finish_test + diff -Nru sqlite3-3.35.0/ext/fts3/fts3.c sqlite3-3.35.0-1/ext/fts3/fts3.c --- sqlite3-3.35.0/ext/fts3/fts3.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts3/fts3.c 2021-04-04 17:23:21.000000000 +0000 @@ -326,9 +326,7 @@ ** assert() conditions in the fts3 code are activated - conditions that are ** only true if it is guaranteed that the fts3 database is not corrupt. */ -#ifdef SQLITE_DEBUG int sqlite3_fts3_may_be_corrupt = 1; -#endif /* ** Write a 64-bit variable-length integer to memory starting at p[0]. diff -Nru sqlite3-3.35.0/ext/fts3/fts3Int.h sqlite3-3.35.0-1/ext/fts3/fts3Int.h --- sqlite3-3.35.0/ext/fts3/fts3Int.h 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts3/fts3Int.h 2021-04-04 17:23:21.000000000 +0000 @@ -134,7 +134,7 @@ ** is used for assert() conditions that are true only if it can be ** guranteed that the database is not corrupt. */ -#ifdef SQLITE_DEBUG +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) extern int sqlite3_fts3_may_be_corrupt; # define assert_fts3_nc(x) assert(sqlite3_fts3_may_be_corrupt || (x)) #else diff -Nru sqlite3-3.35.0/ext/fts3/fts3_test.c sqlite3-3.35.0-1/ext/fts3/fts3_test.c --- sqlite3-3.35.0/ext/fts3/fts3_test.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts3/fts3_test.c 2021-04-04 17:23:21.000000000 +0000 @@ -585,7 +585,6 @@ int objc, Tcl_Obj *CONST objv[] ){ -#ifdef SQLITE_DEBUG int bOld = sqlite3_fts3_may_be_corrupt; if( objc!=2 && objc!=1 ){ @@ -599,7 +598,6 @@ } Tcl_SetObjResult(interp, Tcl_NewIntObj(bOld)); -#endif return TCL_OK; } diff -Nru sqlite3-3.35.0/ext/fts5/fts5_main.c sqlite3-3.35.0-1/ext/fts5/fts5_main.c --- sqlite3-3.35.0/ext/fts5/fts5_main.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts5/fts5_main.c 2021-04-04 17:23:21.000000000 +0000 @@ -22,9 +22,7 @@ ** assert() conditions in the fts5 code are activated - conditions that are ** only true if it is guaranteed that the fts5 database is not corrupt. */ -#ifdef SQLITE_DEBUG int sqlite3_fts5_may_be_corrupt = 1; -#endif typedef struct Fts5Auxdata Fts5Auxdata; diff -Nru sqlite3-3.35.0/ext/fts5/fts5_tcl.c sqlite3-3.35.0-1/ext/fts5/fts5_tcl.c --- sqlite3-3.35.0/ext/fts5/fts5_tcl.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts5/fts5_tcl.c 2021-04-04 17:23:21.000000000 +0000 @@ -29,9 +29,7 @@ #include #include -#ifdef SQLITE_DEBUG extern int sqlite3_fts5_may_be_corrupt; -#endif extern int sqlite3Fts5TestRegisterMatchinfo(sqlite3*); extern int sqlite3Fts5TestRegisterTok(sqlite3*, fts5_api*); @@ -1013,7 +1011,6 @@ int objc, Tcl_Obj *CONST objv[] ){ -#ifdef SQLITE_DEBUG int bOld = sqlite3_fts5_may_be_corrupt; if( objc!=2 && objc!=1 ){ @@ -1027,7 +1024,6 @@ } Tcl_SetObjResult(interp, Tcl_NewIntObj(bOld)); -#endif return TCL_OK; } diff -Nru sqlite3-3.35.0/ext/fts5/test/fts5plan.test sqlite3-3.35.0-1/ext/fts5/test/fts5plan.test --- sqlite3-3.35.0/ext/fts5/test/fts5plan.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts5/test/fts5plan.test 2021-04-04 17:23:21.000000000 +0000 @@ -30,23 +30,23 @@ SELECT * FROM t1, f1 WHERE f1 MATCH t1.x } { QUERY PLAN - |--SCAN t1 - `--SCAN f1 VIRTUAL TABLE INDEX 0:M1 + |--SCAN TABLE t1 + `--SCAN TABLE f1 VIRTUAL TABLE INDEX 0:M1 } do_eqp_test 1.2 { SELECT * FROM t1, f1 WHERE f1 > t1.x } { QUERY PLAN - |--SCAN f1 VIRTUAL TABLE INDEX 0: - `--SCAN t1 + |--SCAN TABLE f1 VIRTUAL TABLE INDEX 0: + `--SCAN TABLE t1 } do_eqp_test 1.3 { SELECT * FROM f1 WHERE f1 MATCH ? ORDER BY ff } { QUERY PLAN - |--SCAN f1 VIRTUAL TABLE INDEX 0:M1 + |--SCAN TABLE f1 VIRTUAL TABLE INDEX 0:M1 `--USE TEMP B-TREE FOR ORDER BY } @@ -54,12 +54,12 @@ SELECT * FROM f1 ORDER BY rank } { QUERY PLAN - |--SCAN f1 VIRTUAL TABLE INDEX 0: + |--SCAN TABLE f1 VIRTUAL TABLE INDEX 0: `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test 1.5 { SELECT * FROM f1 WHERE rank MATCH ? -} {SCAN f1 VIRTUAL TABLE INDEX 0:r} +} {SCAN TABLE f1 VIRTUAL TABLE INDEX 0:r} finish_test diff -Nru sqlite3-3.35.0/ext/fts5/test/fts5trigram.test sqlite3-3.35.0-1/ext/fts5/test/fts5trigram.test --- sqlite3-3.35.0/ext/fts5/test/fts5trigram.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/fts5/test/fts5trigram.test 2021-04-04 17:23:21.000000000 +0000 @@ -192,9 +192,10 @@ } {VIRTUAL TABLE INDEX 0:G0} do_eqp_test 6.3 { SELECT * FROM ci1 WHERE x LIKE ? -} {{SCAN ci1 VIRTUAL TABLE INDEX 0:}} +} {{SCAN TABLE ci1 VIRTUAL TABLE INDEX 0:}} do_eqp_test 6.4 { SELECT * FROM ci1 WHERE x GLOB ? } {VIRTUAL TABLE INDEX 0:G0} finish_test + diff -Nru sqlite3-3.35.0/ext/rtree/geopoly.c sqlite3-3.35.0-1/ext/rtree/geopoly.c --- sqlite3-3.35.0/ext/rtree/geopoly.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/rtree/geopoly.c 2021-04-04 17:23:21.000000000 +0000 @@ -683,7 +683,7 @@ aCoord[2].f = mnY; aCoord[3].f = mxY; } - }else if( aCoord ){ + }else{ memset(aCoord, 0, sizeof(RtreeCoord)*4); } return pOut; diff -Nru sqlite3-3.35.0/ext/rtree/rtree6.test sqlite3-3.35.0-1/ext/rtree/rtree6.test --- sqlite3-3.35.0/ext/rtree/rtree6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/ext/rtree/rtree6.test 2021-04-04 17:23:21.000000000 +0000 @@ -79,47 +79,47 @@ SELECT * FROM t1,t2 WHERE k=+ii AND x1<10 } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 2:C0 - `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0 + `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test rtree6.2.2 { SELECT * FROM t1,t2 WHERE k=ii AND x1<10 } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 2:C0 - `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0 + `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test rtree6.2.3 { SELECT * FROM t1,t2 WHERE k=ii } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 2: - `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 2: + `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test rtree6.2.4.1 { SELECT * FROM t1,t2 WHERE v=+ii and x1<10 and x2>10 } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 2:C0E1 - `--SEARCH t2 USING AUTOMATIC COVERING INDEX (v=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0E1 + `--SEARCH TABLE t2 USING AUTOMATIC COVERING INDEX (v=?) } do_eqp_test rtree6.2.4.2 { SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10 } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 2:C0E1 - `--SEARCH t2 USING AUTOMATIC PARTIAL COVERING INDEX (v=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0E1 + `--SEARCH TABLE t2 USING AUTOMATIC PARTIAL COVERING INDEX (v=?) } do_eqp_test rtree6.2.5 { SELECT * FROM t1,t2 WHERE k=ii AND x1=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y } { QUERY PLAN - |--SCAN t - `--SCAN r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 + |--SCAN TABLE t + `--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 } do_eqp_test 1.2 { @@ -39,8 +39,8 @@ WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y } { QUERY PLAN - |--SCAN t - `--SCAN r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 + |--SCAN TABLE t + `--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 } do_eqp_test 1.3 { @@ -48,16 +48,16 @@ WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND ?<=max_y } { QUERY PLAN - |--SCAN t - `--SCAN r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 + |--SCAN TABLE t + `--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 } do_eqp_test 1.5 { SELECT * FROM t, r_tree } { QUERY PLAN - |--SCAN r_tree VIRTUAL TABLE INDEX 2: - `--SCAN t + |--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2: + `--SCAN TABLE t } do_execsql_test 2.0 { @@ -87,8 +87,8 @@ WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y } { QUERY PLAN - |--SCAN t - `--SCAN r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 + |--SCAN TABLE t + `--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 } do_eqp_test 2.2 { @@ -96,8 +96,8 @@ WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y } { QUERY PLAN - |--SCAN t - `--SCAN r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 + |--SCAN TABLE t + `--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 } do_eqp_test 2.3 { @@ -105,16 +105,16 @@ WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND ?<=max_y } { QUERY PLAN - |--SCAN t - `--SCAN r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 + |--SCAN TABLE t + `--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0 } do_eqp_test 2.5 { SELECT * FROM t, r_tree } { QUERY PLAN - |--SCAN r_tree VIRTUAL TABLE INDEX 2: - `--SCAN t + |--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2: + `--SCAN TABLE t } #------------------------------------------------------------------------- @@ -128,24 +128,24 @@ do_eqp_test 3.2.1 { SELECT * FROM t1 CROSS JOIN t2 } { QUERY PLAN - |--SCAN t1 - `--SCAN t2 + |--SCAN TABLE t1 + `--SCAN TABLE t2 } do_eqp_test 3.2.2 { SELECT * FROM t2 CROSS JOIN t1 } { QUERY PLAN - |--SCAN t2 - `--SCAN t1 + |--SCAN TABLE t2 + `--SCAN TABLE t1 } do_eqp_test 3.3.1 { SELECT * FROM t1 CROSS JOIN t3 } { QUERY PLAN - |--SCAN t1 - `--SCAN t3 VIRTUAL TABLE INDEX 2: + |--SCAN TABLE t1 + `--SCAN TABLE t3 VIRTUAL TABLE INDEX 2: } do_eqp_test 3.3.2 { SELECT * FROM t3 CROSS JOIN t1 } { QUERY PLAN - |--SCAN t3 VIRTUAL TABLE INDEX 2: - `--SCAN t1 + |--SCAN TABLE t3 VIRTUAL TABLE INDEX 2: + `--SCAN TABLE t1 } #-------------------------------------------------------------------- @@ -203,8 +203,8 @@ SELECT * FROM t1, rt WHERE x==id; } { QUERY PLAN - |--SCAN t1 - `--SCAN rt VIRTUAL TABLE INDEX 1: + |--SCAN TABLE t1 + `--SCAN TABLE rt VIRTUAL TABLE INDEX 1: } # Now create enough ANALYZE data to tell SQLite that virtual table "rt" @@ -220,8 +220,8 @@ SELECT * FROM t1, rt WHERE x==id; } { QUERY PLAN - |--SCAN rt VIRTUAL TABLE INDEX 2: - `--SEARCH t1 USING INDEX sqlite_autoindex_t1_1 (x=?) + |--SCAN TABLE rt VIRTUAL TABLE INDEX 2: + `--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (x=?) } # Delete the ANALYZE data. "t1" should be the outer loop again. @@ -233,8 +233,8 @@ SELECT * FROM t1, rt WHERE x==id; } { QUERY PLAN - |--SCAN t1 - `--SCAN rt VIRTUAL TABLE INDEX 1: + |--SCAN TABLE t1 + `--SCAN TABLE rt VIRTUAL TABLE INDEX 1: } # This time create and attach a database that contains ANALYZE data for @@ -258,8 +258,8 @@ SELECT * FROM t1, rt WHERE x==id; } { QUERY PLAN - |--SCAN t1 - `--SCAN rt VIRTUAL TABLE INDEX 1: + |--SCAN TABLE t1 + `--SCAN TABLE rt VIRTUAL TABLE INDEX 1: } #-------------------------------------------------------------------- @@ -327,9 +327,9 @@ WHERE (x1 BETWEEN xmin AND xmax); } { QUERY PLAN - |--SCAN xdir - |--SCAN ydir - `--SCAN rt VIRTUAL TABLE INDEX 2:B2D3B0D1 + |--SCAN TABLE xdir + |--SCAN TABLE ydir + `--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B2D3B0D1 } { 2 4 } @@ -340,9 +340,9 @@ WHERE (x1 BETWEEN xmin AND xmax); } { QUERY PLAN - |--SCAN xdir - |--SCAN rt VIRTUAL TABLE INDEX 2:B0D1 - `--SCAN ydir + |--SCAN TABLE xdir + |--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1 + `--SCAN TABLE ydir } { 5 1 2 7 12 14 {} 5 2 2 7 8 12 10 @@ -355,9 +355,9 @@ WHERE (x1 BETWEEN xmin AND xmax); } { QUERY PLAN - |--SCAN xdir - |--SCAN rt VIRTUAL TABLE INDEX 2:B0D1 - `--SCAN ydir + |--SCAN TABLE xdir + |--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1 + `--SCAN TABLE ydir } { 2 4 } @@ -368,9 +368,9 @@ WHERE (x1 BETWEEN xmin AND xmax); } { QUERY PLAN - |--SCAN xdir - |--SCAN rt VIRTUAL TABLE INDEX 2:B0D1 - `--SCAN ydir + |--SCAN TABLE xdir + |--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1 + `--SCAN TABLE ydir } { 2 4 } diff -Nru sqlite3-3.35.0/manifest sqlite3-3.35.0-1/manifest --- sqlite3-3.35.0/manifest 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/manifest 2021-04-04 17:23:21.000000000 +0000 @@ -1,5 +1,5 @@ -C Correctly\scapture\sthe\serror\swhen\sa\sRETURNING\sclause\sappears\son\san\s\nattempt\sto\sUPDATE\san\seponymous\svirtual\stable.\ndbsqlfuzz\s486f791cbe2dc45839310073e71367a1d8ad22dd. -D 2021-04-02T20:43:26.666 +C Version\s3.35.4 +D 2021-04-02T15:20:15.843 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -7,7 +7,7 @@ F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241 F Makefile.msc 6b5428cef2af1288e02faeb602dabe68fbf2de7bc8a8e29c7299778ee08cd35c F README.md 1514a365ffca3c138e00c5cc839906108a01011a6b082bad19b09781e3aa498a -F VERSION 8c392f6d70d82e513a0eac622bdf23c43df3e084cb630288beba8cef3012c812 +F VERSION ecb003bb32c9abbcabbfb2f4fc1e5f0011eb407ad28b041d1c7ae68f0739da3d F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 @@ -34,11 +34,11 @@ F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6 F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc F config.sub c2d0260f17f3e4bc0b6808fccf1b291cb5e9126c14fc5890efc77b9fd0175559 -F configure c658869fc056a2460a2212fb2960e410cd24e3fb9c55640fbc78d15b48810936 x +F configure 1ef01982e256c82a74885886ef5cc05e3d1d85a50d3b93941903dcf3f93cae56 x F configure.ac 4e4b58b32f88c8da9914a2f2c3158f80e69907eccc019fcc7e3ba14ffd91c640 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd -F doc/lemon.html efc0cd2345d66905505d98f862e1c571512def0ceb5b016cb658fd4918eb76a3 +F doc/lemon.html 1bb72ece6271df0d901d233551dd985f2c6ba30d09382cf2d321ed951ab57491 F doc/pager-invariants.txt 27fed9a70ddad2088750c4a2b493b63853da2710 F doc/trusted-schema.md 33625008620e879c7bcfbbfa079587612c434fa094d338b08242288d358c3e8a F doc/vdbesort-memory.md 4da2639c14cd24a31e0af694b1a8dd37eaf277aff3867e9a8cc14046bc49df56 @@ -50,7 +50,7 @@ F ext/async/sqlite3async.h 46b47c79357b97ad85d20d2795942c0020dc20c532114a49808287f04aa5309a F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3 F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4 -F ext/expert/expert1.test 6703fd74711daf8230240680b0a348d0720e28819b602701adfbd32457fdcddd +F ext/expert/expert1.test 63d778d964e55ef2d1a723043d91c59e7dc6ef1649d91c78c0bef00f9c6f1427 F ext/expert/sqlite3expert.c de51b187c629a4c4264d5de0b77862641e11426f7a963a92abf2d4077085fc8c F ext/expert/sqlite3expert.h ca81efc2679a92373a13a3e76a6138d0310e32be53d6c3bfaedabd158ea8969b F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72 @@ -84,9 +84,9 @@ F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d -F ext/fts3/fts3.c d91986eb52b0a640f7e5e545deabab708db53e886750a4e994e919784a1bcd86 +F ext/fts3/fts3.c 7b449348226a91cc851fe969f5c1932d4f00c359a32fd17f2afea92bf875147b F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe -F ext/fts3/fts3Int.h bde280294d56ff50ee29d03e5140f0b6953b44d1c969bb5831e8ae85e3e76715 +F ext/fts3/fts3Int.h 045179f538c478ced266ca14327269cde8ad8d573c5be902230a5ebaa5636c59 F ext/fts3/fts3_aux.c 96708c8b3a7d9b8ca1b68ea2b7e503e283f20e95f145becadedfad096dbd0f34 F ext/fts3/fts3_expr.c 5853cd7a35a79d193614add9b4c461b2d56f465d90899ca4309f05d9d1536558 F ext/fts3/fts3_hash.c 8b6e31bfb0844c27dc6092c2620bdb1fca17ed613072db057d96952c6bdb48b7 @@ -95,7 +95,7 @@ F ext/fts3/fts3_porter.c 3565faf04b626cddf85f03825e86056a4562c009 F ext/fts3/fts3_snippet.c 86e7e947a176f0f005720b3ca17631aca2fd2f9daa6729d4adbf2d16ab1b9613 F ext/fts3/fts3_term.c f45a1e7c6ef464abb1231245d123dae12266b69e05cc56e14045b76591ae92d1 -F ext/fts3/fts3_test.c d8d7b2734f894e8a489987447658e374cdd3a3bc8575c401decf1911cb7c6454 +F ext/fts3/fts3_test.c 73b16e229e517c1b1f0fb8e1046182a4e5dbc8dbe6eea8a5d4353fcce7dbbf39 F ext/fts3/fts3_tokenize_vtab.c 8d15b148e7d88a4280389a200b26e8d52abda4c4ec2e9a35e9d7a1fa50e5aa03 F ext/fts3/fts3_tokenizer.c 6d8fc150c48238955d5182bf661498db0dd473c8a2a80e00c16994a646fa96e7 F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3 @@ -120,9 +120,9 @@ F ext/fts5/fts5_expr.c 016bd06030679bd31b0f07ef87d62c42031e5da25cb3174a84e5b0f6ef4b47b0 F ext/fts5/fts5_hash.c 1aa93c9b5f461afba66701ee226297dc78402b3bdde81e90a10de5fe3df14959 F ext/fts5/fts5_index.c df5e18b705ac601e826576298a5ce23ef1e5d417fbfdb3feb5f702f89e5f6f41 -F ext/fts5/fts5_main.c f497ca97cb2802311ec93733b595762dc5b044ce3c6c8ce5fb3e871dd3fccd5d +F ext/fts5/fts5_main.c d77648a52b8d73d13887306149912e420f7e0b2d7b3d7da2f54152bfa140ac02 F ext/fts5/fts5_storage.c 58ba71e6cd3d43a5735815e7956ee167babb4d2cbfe206905174792af4d09d75 -F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae +F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282db0d95 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee F ext/fts5/fts5_test_tok.c a2bed8edb25f6432e8cdb62aad5916935c19dba8dac2b8324950cfff397e25ff F ext/fts5/fts5_tokenize.c 5e251efb0f1af99a25ed50010ba6b1ad1250aca5921af1988fdcabe5ebc3cb43 @@ -200,7 +200,7 @@ F ext/fts5/test/fts5onepass.test f9b7d9b2c334900c6542a869760290e2ab5382af8fbd618834bf1fcc3e7b84da F ext/fts5/test/fts5optimize.test 36a752d24c818792032e4ff502936fc9cc5ef938721696396fdc79214b2717f1 F ext/fts5/test/fts5phrase.test 13e5d8e9083077b3d9c74315b3c92ec723cc6eb37c8155e0bfe1bba00559f07b -F ext/fts5/test/fts5plan.test b65cfcca9ddd6fdaa118c61e17aeec8e8433bc5b6bb307abd116514f79c49c5a +F ext/fts5/test/fts5plan.test 79d35b5e83bbdcba48d946a7f008df161f6b0ede1a966892d0aa6c8dd0b6e773 F ext/fts5/test/fts5porter.test 8d08010c28527db66bc3feebd2b8767504aaeb9b101a986342fa7833d49d0d15 F ext/fts5/test/fts5porter2.test 0d251a673f02fa13ca7f011654873b3add20745f7402f108600a23e52d8c7457 F ext/fts5/test/fts5prefix.test a0fa67b06650f2deaa7bf27745899d94e0fb547ad9ecbd08bfad98c04912c056 @@ -219,7 +219,7 @@ F ext/fts5/test/fts5tok1.test 1f7817499f5971450d8c4a652114b3d833393c8134e32422d0af27884ffe9cef F ext/fts5/test/fts5tok2.test dcacb32d4a2a3f0dd3215d4a3987f78ae4be21a2 F ext/fts5/test/fts5tokenizer.test ac3c9112b263a639fb0508ae73a3ee886bf4866d2153771a8e8a20c721305a43 -F ext/fts5/test/fts5trigram.test 5b4feb53a4d5aca70c841f6919c8719b5a9c805474727dda99285fccdd2e9cce +F ext/fts5/test/fts5trigram.test e2ce256fd0ccd6707e740aa3596206aedb0d5834b100c0cb49e344dcd1d8463c F ext/fts5/test/fts5umlaut.test a42fe2fe6387c40c49ab27ccbd070e1ae38e07f38d05926482cc0bccac9ad602 F ext/fts5/test/fts5unicode.test 17056f4efe6b0a5d4f41fdf7a7dc9af2873004562eaa899d40633b93dc95f5a9 F ext/fts5/test/fts5unicode2.test 9b3df486de05fb4bde4aa7ee8de2e6dae1df6eb90e3f2e242c9383b95d314e3e @@ -392,7 +392,7 @@ F ext/repair/test/checkindex01.test b530f141413b587c9eb78ff734de6bb79bc3515c335096108c12c01bddbadcec F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 -F ext/rtree/geopoly.c d35b73dddcbc6f3f81879f95875770b553a1021216fa4a04f77b9c49bce21a46 +F ext/rtree/geopoly.c 1b1ddecb79877b12331d35de9f393b80bbb731e0bf6db6c572f23191987ea803 F ext/rtree/rtree.c 60f6f1675134201974be4189dbd219494c13e1ed30e80bd92ae0dcc86df1b035 F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412 F ext/rtree/rtree1.test 00792b030a4e188ff1b22e8530e8aa0452bb5dd81c2b18cb004afc7dc63e040e @@ -400,13 +400,13 @@ F ext/rtree/rtree3.test 4ee5d7df86040efe3d8d84f141f2962a7745452200a7cba1db06f86d97050499 F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd73452c4b F ext/rtree/rtree5.test 49c9041d713d54560b315c2c7ef7207ee287eba1b20f8266968a06f2e55d3142 -F ext/rtree/rtree6.test 9ce3691c1aac43070a9f194f0ebf54372db346c5a82241fd11b525ed53ce9f3f +F ext/rtree/rtree6.test 1252a0439da01d2f1f5cbbdeeb80455a2d68b9bae2a9787937b167a5e3957828 F ext/rtree/rtree7.test c8fb2e555b128dd0f0bdb520c61380014f497f8a23c40f2e820acc9f9e4fdce5 F ext/rtree/rtree8.test 2d99006a1386663978c9e1df167554671e4f711c419175b39f332719deb1ce0e F ext/rtree/rtree9.test c646f12c8c1c68ef015c6c043d86a0c42488e2e68ed1bb1b0771a7ca246cbabf F ext/rtree/rtreeA.test ed2f1be9c06dde0b1ab93a95dd9e87eeaa02db2d30bcb4b9179b69ee3dc3319b F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9 -F ext/rtree/rtreeC.test c4bfa9a61c6788c03e4a9ce40ab2cfc6100982559effd9842d1b658e1d47aa5f +F ext/rtree/rtreeC.test 6aa87eba4d9a3003b941a1ba77db259c5cabc3fd92fc5a6360f5369520eb9a4d F ext/rtree/rtreeD.test fe46aa7f012e137bd58294409b16c0d43976c3bb92c8f710481e577c4a1100dc F ext/rtree/rtreeE.test e65d3fc625da1800b412fc8785817327d43ccfec5f5973912d8c9e471928caa9 F ext/rtree/rtreeF.test 81ffa7ef51c4e4618d497a57328c265bf576990c7070633b623b23cd450ed331 @@ -476,7 +476,7 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c ee335771956c1b674ec5f3f943cf7179f877accf208c498271c72b4ea8d16409 +F src/alter.c 2d631213818b654faaf08755f26e934134c4769757ae9286981401cd6b571081 F src/analyze.c 01c6c6765cb4d40b473b71d85535093730770bb186f2f473abac25f07fcdee5c F src/attach.c 9cbe761e464025694df8e6f6ee4d9f41432c3a255ca9443ccbb4130eeb87cf72 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853 @@ -486,7 +486,7 @@ F src/btree.c cfd2a37794532d765e235a2550ad2732924a6d06b07a3bc9f6a71750e3b3cca1 F src/btree.h 096cc53baa58be22b02c896d1cf933c38cfc6d65f9253c1367ece8cc88a24de5 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 -F src/build.c 06089aaf769ec1e91d1ba607442aa32c22aeb97200d47fe405ceb373adbdf2d7 +F src/build.c 066c44421bf7b73c6fa47f6fb0c0fcf1357c10552bcf8f3f94c6ebede581cd01 F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 2a322b9a3d75771fb4d99e0702851f4f68dda982507a0f798eefb0712969a410 @@ -494,16 +494,16 @@ F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c F src/delete.c 73f57a9a183532c344a3135cf8f2a5589376e39183e0b5f562d6b61b2af0f4d8 -F src/expr.c 1bf346b7efbe37f62aab7079fdc9ee1aa13e9bea29dbb161f9e7036db9df24e2 +F src/expr.c cfab1113f9eba24f1d6d11b710577c9fcc9cc8e29ed60bd7ac7906be7481dda4 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c e9063648396c58778f77583a678342fe4a9bc82436bf23c5f9f444f2df0fdaa4 F src/func.c 479f6929be027eb0210cbdde9d3529c012facf082d64a6b854a9415940761e5e -F src/global.c 56d6762a3a44495ab035e2d3185eeccbc98579e18c06038e1bb9af346105bc84 +F src/global.c ed55af196a9b66e198aaeda3f5454c3aa7d7d050c6c938181fd044b70d180a81 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 -F src/insert.c f8d462ab6174a2c30476b5a1fc77f4d66ce7d9dd45c994966b9f4445db1131f0 +F src/insert.c e36be69e3810902eaf7e171260c885bc9547b1d41616c868f1cc46e6a0a3b7fd F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 8c9c8cd2bd8eecdb06d9b6e89de7e9e65bae45cc8fc33609cc74023a5c296067 F src/main.c 2a7ece3a67c646e5fe9984ffe0277d6a76f80ce9715bf2faa591d8cb66b9d913 @@ -526,7 +526,7 @@ F src/os.h 48388821692e87da174ea198bf96b1b2d9d83be5dfc908f673ee21fafbe0d432 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 -F src/os_unix.c b5b7475bd1a8f1b83b6173a81f4fe50f9e077ccbacb62ce2fe7a5cb89916bce1 +F src/os_unix.c 7a9eab7b11f552ab91ead980086b312c7e3b871efdee8c0c072b682bbec6592e F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 970691daea03f9f15e34de671bd8675c1e136232b529e21bfd36d4dba6d41753 @@ -538,21 +538,21 @@ F src/pragma.c eb42cb9bec189cf18cef5d8fcae56e13bb73ef2b019b198fb48740ced81bce95 F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf F src/prepare.c e21b54489b5c73b06ada15e6fc79b5c6f64b06701924a6ca98944ae59e06256f -F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b +F src/printf.c 2b03a80d7c11bb422115dca175a18bf430e9c9dbaa0eee63b758f0c022f8f34f F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 -F src/resolve.c fc136d935f19966747663bed605ad7f06f84f9fe7bf7bf79e9bf844ef5c7556d +F src/resolve.c fec151c9c33a6fa2e93d10b4e8cd4084a7c773df36fb3ec6788eb89ae493a1a4 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 2d7a1f3d9f5970962b407cb4b38416fedc1a3b55efd010b40af375088653b6ce -F src/shell.c.in dcce260883836c9b58847505fbccce8d5546af925046f7dacd9443e922ece036 -F src/sqlite.h.in 18ec33e32001721fd4e9c4705a24a85dff04956ac2c0a21775058884ba845b09 +F src/select.c 734cf12e42f81f2fe461e41214e6552375e55b62a802784a4f0066ac592e7f4a +F src/shell.c.in aa28256887d049badaf93aa30ab5c76a2ec88143a674d685c0e739056702e5c3 +F src/sqlite.h.in 3426a080ea1f222a73e3bd91e7eacbd30570a0117c03d42c6dde606f33e5e318 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e -F src/sqliteInt.h c5cfae5891a6e643116f66f63769bcffeba89ca51f6278732da710eb0cf092b6 +F src/sqliteInt.h e56aa05ef78513cd596c30a56fda68cd9bba91d444ac40e135e919fed40cd875 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 F src/tclsqlite.c 986b6391f02cd9b53c1d688be55899f6ffddeb8e8014cd83c1b73ff912579a71 -F src/test1.c 2100f4c28bae21ce83a9a0c5ec6827efd0e15d11b93b569b614daa5654b3fcf6 +F src/test1.c cff43d8e21be543b77651b4d2caf49bd6488fee220f8540ecd9f71d13169dbd1 F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5 F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644 F src/test4.c 7c4420e01c577b5c4add2cb03119743b1a357543d347773b9e717195ea967159 @@ -607,18 +607,18 @@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 0b9c82fa628b5adce93e2bcaf935a24d43eb83344fb51551f7835526d0693fc4 -F src/treeview.c 70f57a2b77e20b354724ea69b8ed1ea1df946c48296d695320c741c7d174be90 -F src/trigger.c 28f439bb454a46ba191817c8c5b6468f7ef236233b14155fd3b10c12bc6f868e +F src/treeview.c c6260e1fa5f41c361b2409edc9b0050bcaef5bc4d6abc467fbc45f0d7ccf3d84 +F src/trigger.c bce0908f714a5b89360c01e444521a648997425e2a91ff9b92b899cf8d53c20b F src/update.c 0f5a61f0787199983530a33f6fffe4f52742f35fcdf6ccfad1078b1a8bc17723 F src/upsert.c df8f1727d62b5987c4fd302cd4d7c0c84ae57cd65683c5a34a740dfe24039235 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c 41c7a72da1df47864faa378a1c720b38adb288c6838cb6be5594511b6287a048 F src/vacuum.c 492422c1463c076473bae1858799c7a0a5fe87a133d1223239447c422cd26286 -F src/vdbe.c c2990a6f877a15b2fd7cc8cb624033699a4a602740f5b9f576762861cc86d3ce +F src/vdbe.c 5001a0d3003d3664615dd7ac3cedab1d51e2391b5bdd0878f40a41fdcd942e13 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe F src/vdbeInt.h 000d9ab1ea4cb55a80de15e28f3f595645b4fddef34bca4347fb3db8031d9041 F src/vdbeapi.c 4a43e303ec3354c785f453e881521969378e85628278ab74ba4a9df790c0d93b -F src/vdbeaux.c 1ffaf15d48b1678dfd403c02ee60061c10a5dd447051860e793cd3393ab019fe +F src/vdbeaux.c 1b3eaa3a70d9d1877266e8ade0d0c3b2b4c6cf77d393d94dbcbd522b9bfefc15 F src/vdbeblob.c 253ed82894924c362a7fa3079551d3554cd1cdace39aa833da77d3bc67e7c1b1 F src/vdbemem.c 947f2a65910edb4014dc981d33e414a68c51f169f9df8c4c493a0ba840b6eb1f F src/vdbesort.c f5b5e473a7cee44e47a94817b042fd7172cf3aa2c0a7928a8339d612bcfdec5a @@ -629,9 +629,9 @@ F src/wal.c 69e770e96fd56cc21608992bf2c6f1f3dc5cf2572d0495c6a643b06c3a679f14 F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/walker.c d42d6c80ea363ef689a462e65eefcfe87deab924c50de5baa37ecb6af7d7ddaa -F src/where.c 07d1232df6fc4705815b0ef5182fe3e56bdba6ac09ce52bd66ecb207626aac2b +F src/where.c 10d06b16670a1d2a992d52a9f08e49426d38a08fb0a7ae5f7f62fd023d560e1e F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4 -F src/wherecode.c c7354c9749f015f37bc32e15a4257a5155fa5d2b79f605f528bd09f3b9f1b4e6 +F src/wherecode.c e57a8690311a75d06e723e8d379f9831de04aba300e07174d236e32a7f9c7a13 F src/whereexpr.c 4ba94b8ebbff97c658b212de6ccdb6d3a41847800bdf99e7a2a967c250269f2c F src/window.c 32b03808aff2e7263889cce0cbcb2a68efefc2a9d5187514ddb6a2a1046dc7f5 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 @@ -646,33 +646,32 @@ F test/alter3.test e487958dec7932453e0b83baf21d6b1e71d5e7d9a55bc20eadfa62a51ddffc29 F test/alter4.test dfd6086faf461b27ca2d2999848dcd207edf23352fc1592d0005c0844f3f08cf F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959 -F test/alterauth2.test 381b1ab603c9ef96314a3158528ea17f7964449385a28eeaf8191120b2e24a8d -F test/altercol.test b11fa1b131e80ab5b6ecfb3b725fb0419c14ca6efba5adb57aeabfc9baa0c8f3 +F test/alterauth2.test 794ac5cef251819fe364b4fe20f12f86e9c5d68070513c7fd26c17cb244c89af +F test/altercol.test 3456f7cc4196ef8f7d82d245d6e91940eb12bc95c36c91ac4b512f6b5c9a4fa9 F test/altercorrupt.test 584d707a80e106952d6382790c8919bcf9f0db678ed3a1c09fd98b7f9d1d3a10 F test/alterdropcol.test 596623cb8a72d9570bfb8417b0f302810efe007873796f03c17a9e9ff28dade1 F test/alterdropcol2.test 527fce683b200d620f560f666c44ae33e22728e990a10a48a543280dfd4b4d41 F test/alterlegacy.test f38c6d06cda39e1f7b955bbce57f2e3ef5b7cb566d3d1234502093e228c15811 F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9 F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b -F test/altermalloc3.test 059841a3de6b6780efd9f0b30bf1d9b4443c555f68d39975cbcac2583167b239 -F test/alterqf.test 67568ad152db8c1187b15633b801242cf960f1beafc51261a3d1725d910baeb2 -F test/altertab.test d15362de3d487368e1f64d600fdfc1976033aecf8394c0a88454a5c63b357209 +F test/altermalloc3.test 2c7bbd8cf3e9c4a91e28675bb62bcc2ef70f227967fa74349f03d9f4642f0615 +F test/altertab.test 7691872aadfe00a94b459af9086504bcf399dd936336e486da1b182930744b77 F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b F test/altertab3.test 2b82fa2236a3a91553d53ae5555d8e723c7eec174c41f1fa62ff497355398479 F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f F test/analyze.test 547bb700f903107b38611b014ca645d6b5bb819f5210d7bf39c40802aafeb7d7 -F test/analyze3.test 4440c4932247adb2b4e0c838f657c19dc7af4f56859255436dc4e855f39b9324 -F test/analyze4.test 293ec8ea21525f3435beaf9d6b1efb29e719415f03a0cd2a70589d59098e8464 +F test/analyze3.test fca2a9de0017becfdcc201647f03b1cfd5ba0e7b5b5c852936e4ec62780cde49 +F test/analyze4.test cdf88f3f72b0f0643a1ff6c730fc5af1e42464d47478d9fbac84c333f72c014e F test/analyze5.test fa5131952303ac4146aba101b116b9c8cb89e2637531c334a6df7f7d19dddc0d -F test/analyze6.test 028f5bdfc9e5b5294768fa9a7185b8cd1d019aa7aab5b2f8ee42d7271d9a3b28 -F test/analyze7.test 079d17c495e396bdbd6cc6a083112788a6fbfb3b95c42e760e4270a53c9ead8f -F test/analyze8.test 29ef237d8a59b39cc31c3310134fefe96a690b195e3deed5ecb652839089f15c -F test/analyze9.test 162cd40d713310fbe7a63a5ecff5d3a013777d86809618838177d9b2af4dd09c -F test/analyzeC.test 1111830ad355d29a294a5dda654dd5f6a8622c6a223a4f7b7b3d091df7a7a42b -F test/analyzeD.test 485f621cfd2ef0a8f8ac79672586651bfa495bd899db50461bb4b558400ab3c1 -F test/analyzeE.test 69d130f9ba78c9853dcd5a18317e81f462a72d704cec0c4c30afb220213acd29 -F test/analyzeF.test 40b5cc3ad7b10e81020d7ca86f1417647ecfae7477cfd88acc5aa7ae1068f949 -F test/analyzeG.test 623be33038c49648872746c8dd8b23b5792c08fef173c55e82f1b12fca259852 +F test/analyze6.test 6c3f7df2996cb6872f355a6ac1eb6d5de00a5a9288214bad7ef25c97d9cc72dc +F test/analyze7.test 6ef0b12369f61ddeadc7d8a705c40e6b52cb29f63de3a4c56581b510b46b5783 +F test/analyze8.test 36ce54947710bd44e4f9484e1ad07e725ef01a9d7078b417c1bc884356febe4d +F test/analyze9.test 9fbf0e0101eef4f5dc149769aa14e10b76ee06e7c28598264b32173cd1999a54 +F test/analyzeC.test 489fe2ea3be3f17548e8dd895f1b41c9669b52de1b0861f5bffe6eec46eac710 +F test/analyzeD.test e50cd0b3e6063216cc0c88a1776e8645dc0bd65a6bb275769cbee33b7fd8d90c +F test/analyzeE.test 8684e8ac5722fb97c251887ad97e5d496a98af1d +F test/analyzeF.test 9e1a0537949eb5483642b1140a5c39e5b4025939024b935398471fa552f4dabb +F test/analyzeG.test a48c0f324dd14de9a40d52abe5ca2637f682b9a791d2523dd619f6efa14e345b F test/analyzer1.test 459fa02c445ddbf0101a3bad47b34290a35f2e49 F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b @@ -686,18 +685,18 @@ F test/attach.test 54f8e49e88d0de48f6428267a678465863d2b8f72320612f35bd5c02e240bc2f F test/attach2.test 256bd240da1835fb8408dd59fb7ef71f8358c7a756c46662434d11d07ba3a0ce F test/attach3.test c59d92791070c59272e00183b7353eeb94915976 -F test/attach4.test 00e754484859998d124d144de6d114d920f2ed6ca2f961e6a7f4183c714f885e +F test/attach4.test aa05b1d8218b24eba5a7cccf4f224f514ba57ba705c9267f09d2bb63fed0eea1 F test/attachmalloc.test 12c4f028e570acf9e0a4b0b7fe6f536e21f3d5ebddcece423603d0569beaf438 F test/auth.test 2154625c05bc79f0e0ea72cb2358395a8041243caa0fd7ce7617d50da4331794 F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1 F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49 F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec F test/autoinc.test 997d6f185f138229dc4251583a1d04816423dddc2fc034871a01aeb1d728cb39 -F test/autoindex1.test fe27af92eaf884bd9c38f94be3e8afa04ec494e5eefb189902026181a6175f5e +F test/autoindex1.test 96185415f5faacd5b8d7a7f505efddd5abb1f111d58338e9c0b1dc40b87cd3cc F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df -F test/autoindex3.test 2d13958a5617e987624a428d7aed91bf51f322b49b476e3573fadec697ce6da5 +F test/autoindex3.test 2dd997d6590438b53e4f715f9278aa91c9299cf3f81246a0915269c35beb790e F test/autoindex4.test 49d3cd791a9baa16fb461d7ea3de80d019a819cf -F test/autoindex5.test 809c59d6bee9a5146bef0809a6a2a050f89b78f63c11db2b84a567403e7dd85a +F test/autoindex5.test a5d72fe8c217cc0ea356dc6fa06a282a8a3fc53aa807709d79dba07a8f248102 F test/autovacuum.test 0831cd34e14695d297187f7f6519265e3121c5b0a1720e548e86829e796129e9 F test/autovacuum_ioerr2.test 8a367b224183ad801e0e24dcb7d1501f45f244b4 F test/avfs.test 0c3a38e03cccb0fc3127838462dc05dc3f4c1480d770c084b388304c25de3652 @@ -712,17 +711,17 @@ F test/badutf.test d5360fc31f643d37a973ab0d8b4fb85799c3169f F test/badutf2.test f310fd3b24a491b6b77bccdf14923b85d6ebcce751068c180d93a6b8ff854399 F test/bc_common.tcl b5e42d80305be95697e6370e015af571e5333a1c -F test/bestindex1.test 2e92e046148b3f8a2be62af9c0f307413547a33677af0df159c0fcc76e5134a2 -F test/bestindex2.test 60266e2854055788459cbfd86cef575601eabe74a2c61faba72601739fea4398 -F test/bestindex3.test e061a6ed0f519beee037ba7e7a4c37f80c8a7e4a303e2559ed1f760e4b0235eb -F test/bestindex4.test 82250e7dcc6d5b15244edc9d6554b1760583af1b8548c2a255a1c4f28e744c0e +F test/bestindex1.test 705b57d7f51d53ee5fd043dd9666236e1fc18f4d59abf51da0ea5ea1b4804947 +F test/bestindex2.test 9a0ccd320b6525eec3a706aae6cdab7e1b7b5abca75027e39f39f755e76e5928 +F test/bestindex3.test 7622e792ff2da16d262d3cea6ad914591ac4806d57ed128e6c940b7920b47b84 +F test/bestindex4.test 038e3d0789332f3f1d61474f9bbc9c6d08c6bd1783a978f31f38ad82688de601 F test/bestindex5.test 67c1166131bb59f9e47c00118f7d432ca5491e6cae6ca3f87ca9db20103a78f9 F test/bestindex6.test d856a9bb63d927493575823eed44053bc36251e241aa364e54d0f2a2d302e1d4 -F test/bestindex7.test a11348824aed0de2bb9030f092636929000cd72882bdf919adacc3792f67ccbd -F test/between.test b9a65fb065391980119e8a781a7409d3fcf059d89968279c750e190a9a1d5263 +F test/bestindex7.test f36ada201973d3022cf7afffffe08de9e58341996020e7a2df9a1d2f2be20132 +F test/between.test 68137a6e941c221417c15b6fe2d55f27bb1b6ab48bdf9e2aa51efdd85bc53802 F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59 F test/bigfile2.test 1b489a3a39ae90c7f027b79110d6b4e1dbc71bfc -F test/bigmmap.test b820c234daa56d24bc3bf006e3ac7aa9d9623c8ac656a38f59063b444a2d65d1 +F test/bigmmap.test e906cf9729d7c362270ffe9fa6471f4c39c28ba83f0f77fb795e1b4d38a22ba0 F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747 F test/bigsort.test 8299fa9298f4f1e02fc7d2712e8b77d6cd60e5a2 F test/bind.test 1e136709b306f7ed3192d349c2930d89df6ab621654ad6f1a72381d3fe76f483 @@ -741,7 +740,7 @@ F test/btree02.test 7555a5440453d900410160a52554fe6478af4faf53098f7235f1f443d5a1d6cc F test/btreefault.test c2bcb542685eea44621275cfedbd8a13f65201e3 F test/busy.test 510dc6daaad18bcbbc085bcc6217d6dc418def5e73f72ce1475eea0cb7834727 -F test/busy2.test dbfb61b3265e7a962d3bcd32cd542bbe3d7801edbda6438d35af5aa707cae981 +F test/busy2.test 0a1633fef7987fc8ea25ed5838f7eef2f08fc6d2a3dcc77d23e6402e53946a7a F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de F test/cacheflush.test af25bb1509df04c1da10e38d8f322d66eceedf61 F test/cachespill.test 895997f84a25b323b166aecb69baab2d6380ea98f9e0bcc688c4493c535cfab9 @@ -773,7 +772,7 @@ F test/collateB.test 1e68906951b846570f29f20102ed91d29e634854ee47454d725f2151ecac0b95 F test/colmeta.test 2c765ea61ee37bc43bbe6d6047f89004e6508eb1 F test/colname.test 87ad5458bb8709312dac0d6755fd30e8e4ca83298d0a9ef6e5c24277a3c3390e -F test/columncount.test d86fb6307261186370698962790ad2088ed419e4a4e823512b502f17d443b1b7 +F test/columncount.test eff33d402a7b0fde0a52a1920d238af200ca573327021e0ce3b7e5688de41449 F test/conflict.test ac0667090f66130ac77d5fb764655558ca6600dd6d88f670ca9123b61c448337 F test/conflict2.test 5557909ce683b1073982f5d1b61dfb1d41e369533bfdaf003180c5bc87282dd1 F test/conflict3.test 81865d9599609aca394fb3b9cd5f561d4729ea5b176bece3644f6ecb540f88ac @@ -801,10 +800,10 @@ F test/corruptL.test 22589f503602cc5984e80f27f46c4de2134f24f1515ba2440513c377cb692258 F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067 F test/corruptN.test 781c5f26a2d8918f03d45ac4968a738031eeb113a4b153c7588756d9b09c7b04 -F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576 -F test/count.test 5364003488249957750a5f15ee42ca1cd7b100b1131c2dc71fff266a1250bf55 +F test/cost.test 1d156ce9858780a966c062694687afe0343a0ed12d081d071fb57027e726bafc +F test/count.test e0699a15712bc2a4679d60e408921c2cce7f6365a30340e790c98e0f334a9c77 F test/countofview.test e17d6e6688cf74f22783c9ec6e788c0790ee4fbbaee713affd00b1ac0bb39b86 -F test/coveridxscan.test f35c7208dedc4f98e471c569df64c0f95a49f6e072d8dc7c8f99bdee2697de1b +F test/coveridxscan.test 5ec98719a2e2914e8908dc75f7247d9b54a26df04625f846ac7900d5483f7296 F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f F test/crash2.test 5b14d4eb58b880e231361d3b609b216acda86651 F test/crash3.test 8f5de9d32ab9ab95475a9efe7f47a940aa889418 @@ -843,20 +842,20 @@ F test/descidx2.test a0ba347037ff3b811f4c6ceca5fd0f9d5d72e74e59f2d9de346a9d2f6ad78298 F test/descidx3.test 953c831df7ea219c73826dfbf2f6ee02d95040725aa88ccb4fa43d1a1999b926 F test/diskfull.test 106391384780753ea6896b7b4f005d10e9866b6e -F test/distinct.test eefe5a8e47fcb761aaa745838e355ab28586f9f75786a1c098016881344b2a5e +F test/distinct.test e7d0cf371944dd0cbedff86420744e2f1ea2b528156451c97eb6ff41a99b9236 F test/distinct2.test cd1d15a4a2abf579298f7161e821ed50c0119136fe0424db85c52cf0adc230d1 -F test/distinctagg.test fd74c3783700f1d99c67a5d906bba97fb6650f4559f3ea7b1873f793ffc601c9 +F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376 F test/e_blobbytes.test 439a945953b35cb6948a552edaec4dc31fd70a05 F test/e_blobclose.test 4b3c8c60c2171164d472059c73e9f3c1844bb66d F test/e_blobopen.test e95e1d40f995056f6f322cd5e1a1b83a27e1a145 F test/e_blobwrite.test f87ff598b67af5b3ec002a8d83e804dc8d23808e88cf0080c176612fc9ffce14 F test/e_changes.test fd66105385153dbf21fdb35eb8ef6c3e1eade579 -F test/e_createtable.test 7997c0106c181243e0ac7db7ba8b9ae7233d0bfb0188605650322a7a02ea326e +F test/e_createtable.test 7107f5deda2324ea12dbf105044dc9265195401e9dbb3eead6a2c1a3da4bb5b7 F test/e_delete.test ab39084f26ae1f033c940b70ebdbbd523dc4962e F test/e_droptrigger.test 235c610f8bf8ec44513e222b9085c7e49fad65ad0c1975ac2577109dd06fd8fa F test/e_dropview.test 74e405df7fa0f762e0c9445b166fe03955856532e2bb234c372f7c51228d75e7 F test/e_expr.test 6ba7a51ece7b3e7fc145f14f924eed25ebb5a24e7b8596c78f3838d372cf0385 -F test/e_fkey.test 351c7b989e5aefcc339ef5fc78dc4738442bd247a392cd67d81c2881000c369e +F test/e_fkey.test a2907f749cccd0b2c30d8576b673002eebdcc1fc9964bae61e5117b1d54733e2 F test/e_fts3.test 17ba7c373aba4d4f5696ba147ee23fd1a1ef70782af050e03e262ca187c5ee07 F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e F test/e_reindex.test 2b0e29344497d9a8a999453a003cb476b6b1d2eef2d6c120f83c2d3a429f3164 @@ -876,19 +875,18 @@ F test/enc2.test 848bf05f15b011719f478dddb7b5e9aea35e39e457493cba4c4eef75d849a5ec F test/enc3.test 6807f7a7740a00361ca8d0ccd66bc60c8dc5f2b6 F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020 -F test/eqp.test bfe979eb1f4b8ab7a3bd7db6d16c2e6c6be0e5a3aada2227716f3fd3a9d76b69 +F test/eqp.test 84879b63e3110552bf8ce648a3507dc3ceb72109ecec83c2aef0db37a27f6382 F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9 F test/eval.test a64c9105d6ff163df7cf09d6ac29cdad5922078c F test/exclusive.test 7ff63be7503990921838d5c9f77f6e33e68e48ed1a9d48cd28745bf650bf0747 F test/exclusive2.test 984090e8e9d1b331d2e8111daf6e5d61dda0bef7 F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7 F test/exists.test 79a75323c78f02bbe9c251ea502a092f9ef63dac -F test/exists2.test 92d563a97019a70f7adcbe3cbaab16f9fc696affbf0f9ede1796ea5f7cc5a3ac -F test/existsfault.test 72a0036c1424d9204d49f4d976c3277a1b8bb2eed3c67aa124ba2df2f1331c7c +F test/exists2.test 47970f2ce98826519cc38ce502b718641755b30a93d9b89915019ba1e770f361 +F test/existsfault.test 74f7edc713f5a335e7ff47adf503067bf05c6f8630f88b2a19c24f0fa5486ab8 F test/expr.test 26cd01e8485bc48c8aa6a1add598e9ce1e706b4eb4f3f554e0b0223022e8c2cf F test/expr2.test c27327ae9c017a7ff6280123f67aff496f912da74d78c888926d68b46ec75fd8 F test/extension01.test 00d13cec817f331a687a243e0e5a2d87b0e358c9 -F test/external_reader.test c7d34694f1b25c32d866f56ac80c1e29edddc42b4ef90cad589263ffac2cde0c F test/extraquick.test cb254400bd42bfb777ff675356aabf3287978f79 F test/fallocate.test 37a62e396a68eeede8f8d2ecf23573a80faceb630788d314d0a073d862616717 F test/filectrl.test 6e871c2d35dead1d9a88e176e8d2ca094fec6bb3 @@ -962,7 +960,7 @@ F test/fts3ao.test 266989148fec6d9f1bb6c5382f7aa3dcea0e9cd444576e28dd2b9287ac7dd220 F test/fts3atoken.test dc2078ce464914efe3a8dfc545dd034a0fc14f2ab425c240471d5a5f1c721400 F test/fts3auto.test 649aa4c198d7acc5cd6355e19ee073d051c40d9e88a43fc3d88af46bdf3e99d5 -F test/fts3aux1.test 1880eaa75c586cd10f53080479a2b819b3915ae7ce55c4e0ba8f1fe05ac0a6a7 +F test/fts3aux1.test 7a170e172afdbceb67f5baa05941fd4fbf56af42f61daa3d140f4b4bf4cb68f6 F test/fts3aux2.test 2459e7fa3e22734aed237d1e2ae192f5541c4d8b218956ad2d90754977bf907f F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491 F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958 @@ -973,7 +971,7 @@ F test/fts3corrupt3.test 0d5b69a0998b4adf868cc301fc78f3d0707745f1d984ce044c205cdb764b491f F test/fts3corrupt4.test b71512ec391d39da96d60d01959e4e9f20d4237a964a94abcf5f5a2ad28378c1 F test/fts3corrupt5.test 0549f85ec4bd22e992f645f13c59b99d652f2f5e643dac75568bfd23a6db7ed5 -F test/fts3corrupt6.test d274f139ec173392002c768631f404fefc007ae02ffa1b03d8cbd096c3fc00f9 +F test/fts3corrupt6.test d5896a8d389bd824457772dc1e2d2023cd5c5cf8e42733607b5d632103018d8b F test/fts3cov.test 7eacdbefd756cfa4dc2241974e3db2834e9b372ca215880e00032222f32194cf F test/fts3d.test 2bd8c97bcb9975f2334147173b4872505b6a41359a4f9068960a36afe07a679f F test/fts3defer.test f4c20e4c7153d20a98ee49ee5f3faef624fefc9a067f8d8d629db380c4d9f1de @@ -990,7 +988,7 @@ F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f94341e9da0 F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641 F test/fts3fuzz001.test e3c7b0ce9b04cc02281dcc96812a277f02df03cd7dc082055d87e11eb18aaf56 -F test/fts3join.test b285c919559af5b093c51abb2c07ce7ec0156dbc9573f444b78dabd9f3040db2 +F test/fts3join.test 949b4f5ae3ae9cc2423cb865d711e32476bdb205ab2be923fdf48246e4a44166 F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6 F test/fts3matchinfo.test aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a F test/fts3matchinfo2.test 00144e841704b8debfcdf6097969cd9f2a1cf759e2203cda42583648f2e6bf58 @@ -999,12 +997,12 @@ F test/fts3offsets.test b85fd382abdc78ebce721d8117bd552dfb75094c F test/fts3prefix.test fa794eaab0bdae466494947b0b153d7844478ab2 F test/fts3prefix2.test e1f0a822ca661dced7f12ce392e14eaf65609dce -F test/fts3query.test 45806a302921b245a9dba5d85c9d51fb98b3f137eea6e6bf6eae4883e041ab72 +F test/fts3query.test ca033ff2ebcc22c69d89032fb0bc1850997d31e7e60ecd26440796ba1654e78f F test/fts3rank.test cd99bc83a3c923c8d52afd90d86979cf05fc41849f892faeac3988055ef37b99 F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0 F test/fts3shared.test 57e26a801f21027b7530da77db54286a6fe4997e F test/fts3snippet.test 0887196d67cffbe365edde535b95ecc642a532ce8551ccd9a73aab5999c3ffae -F test/fts3snippet2.test e79afeb1f673713f96d7fc5655726081975399d11e659d15553207be43301dc4 +F test/fts3snippet2.test 2dabb5889eda4c9980aad325e688b470781f97ce7c0fca0db125616fae0a2cdd F test/fts3sort.test ed34c716a11cc2009a35210e84ad5f9c102362ca F test/fts3tok1.test a663f4cac22a9505400bc22aacb818d7055240409c28729669ea7d4cc2120d15 F test/fts3tok_err.test 52273cd193b9036282f7bacb43da78c6be87418d @@ -1031,7 +1029,7 @@ F test/fts4rename.test 2e0565ffd92b2c51f1a757df0b8f2ca30537197106fec09e943919801d173692 F test/fts4umlaut.test fcaca4471de7e78c9d1f7e8976e3e8704d7d8ad979d57a739d00f3f757380429 F test/fts4unicode.test 82a9c16b68ba2f358a856226bb2ee02f81583797bc4744061c54401bf1a0f4c9 -F test/fts4upfrom.test f25835162c989dffd5e2ef91ec24c4848cc9973093e2d492d1c7b32afac1b49d +F test/fts4upfrom.test 8df5acb6e10ad73f393d1add082b042ab1db72567888847d098152121e507b34 F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d F test/func.test f673822636fb8ed618dd2b80230d16e495d19c8f2e2e7d6c22e93e2b3de097ad F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f @@ -1065,7 +1063,7 @@ F test/having.test a89236dd8d55aa50c4805f82ac9daf64d477a44d712d8209c118978d0ca21ec9 F test/hexlit.test 4a6a5f46e3c65c4bf1fa06f5dd5a9507a5627751 F test/hidden.test 23c1393a79e846d68fd902d72c85d5e5dcf98711 -F test/hook.test 55b6d605d06dadbb04416eae8ad79889aea3521d119c87f04353c25f9c1450a4 +F test/hook.test fa54fa8afc842ae375f10c1f9fc0014fa59789052fc30c9eae19811fa3afa009 F test/hook2.test b9ff3b8c6519fb67f33192f1afe86e7782ee4ac8 F test/icu.test 716a6b89fbabe5cc63e0cd4c260befb08fd7b9d761f04d43669233292f0753b1 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e @@ -1073,7 +1071,7 @@ F test/in.test 688ed2011d922d83141a45af431601738674a4c0bdde34b6351f688b82a169b3 F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75 F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0 -F test/in4.test cd08375ba470b248c3dc4ab30fd5dbcb682deafe3862d8249ba0ad6a11dd25ea +F test/in4.test 64ac9c767ac5af562f066a40163d4202f8fa3be05d264ec65d6258e74606b30c F test/in5.test b32ce7f4a93f44c5dee94af16886d922cc16ebe33c8e1765c73d4049d0f4b40f F test/in6.test 8562d0945195cab3cc4ab3794e9118e72cb44c43f785c2b04d48a9d06ca6b4ec F test/incrblob.test c9b96afc292aeff43d6687bcb09b0280aa599822 @@ -1092,13 +1090,13 @@ F test/index3.test 51685f39345462b84fcf77eb8537af847fdf438cc96b05c45d6aaca4e473ade0 F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6 F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7 -F test/index6.test 880858a65d8686120fe9a8971a4d82b429cc206fe7fd525b8b2b55451c74d82d -F test/index7.test b238344318e0b4e42126717f6554f0e7dfd0b39cecad4b736039b43e1e3b6eb3 -F test/index8.test caa097735c91dbc23d8a402f5e63a2a03c83840ba3928733ed7f9a03f8a912a3 +F test/index6.test f172653b35b20233e59200e8b92a76db61bf7285437bf777b93b306ba26a47e7 +F test/index7.test b8a0ba2110fd517bb48c4e76d26d60f1ab2ed9e257b18d71f820d7e71e9f8570 +F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7 F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721 -F test/indexedby.test f21eca4f7a6ffe14c8500a7ad6cd53166666c99e5ccd311842a28bc94a195fe0 -F test/indexexpr1.test 7e0e7a33acb4d9b3524398e6ce90cc05c26603fabbaf3062083a036c8874bc12 -F test/indexexpr2.test 2c7abe3c48f8aaa5a448615ab4d13df3662185d28419c00999670834a3f0b484 +F test/indexedby.test a3ca11f0819a9279619099f36b624bcaa315f7a1ed65c3ed2219c2a944683d2c +F test/indexexpr1.test 284e119999d132cc8bf37735a928c9859b28e8e295d02b7a6a4f93977c7f9ba5 +F test/indexexpr2.test dba11dbb0a58fcba4cd694f46b4004976123b81b0501f525d43c9be59f0207b1 F test/indexfault.test 98d78a8ff1f5335628b62f886a1cb7c7dac1ef6d48fa39c51ec871c87dce9811 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7 F test/insert.test 4e3f0de67aac3c5be1f4aaedbcea11638f1b5cdc9a3115be14d19aa9db7623c6 @@ -1112,7 +1110,7 @@ F test/intarray.test bb976b0b3df0ebb6a2eddfb61768280440e672beba5460ed49679ea984ccf440 F test/interrupt.test 16ea879ec728cb76414c148c5f24afd5d1f91054 F test/interrupt2.test e4408ca770a6feafbadb0801e54a0dcd1a8d108d -F test/intpkey.test aee694afed1a65c86c4e69ad030224b3fc268113d00685234d40079fca16bad3 +F test/intpkey.test ac71107a49a06492b69b82aafaf225400598d3c8 F test/intreal.test 2a87e85a5949bd55e41ef04c58f5800587c5380bdbc559ff1c79b614b0e6a533 F test/io.test f95bca1783b01ea7761671560d023360d2dfa4cc F test/ioerr.test 470fcc78e9cd352d162baf782fe301ea807d764241f58a48fc58109c2dfcdb6b @@ -1123,10 +1121,10 @@ F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b F test/istrue.test 9619a2d77580f676048aaff7a16a0bcfea2b96c6c660dfaded2e53c873418899 F test/join.test 25da4f53523a4aa17c893134b47fba6aa4799bb33350517b157785878290e238 -F test/join2.test 9bdc615841b91c97a16d68bad9508aea11fa0c6b34e5689847bcc4dac70e4990 +F test/join2.test 21fc30e54ab35ed66bf51b89cec18729205497f5cc43c83bc042f96a73721593 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 -F test/join5.test f418fccdfefa41f1659663463aa517431ddcf3e30ccbb80e64173b7d615a03f4 +F test/join5.test 3a96dc62f0b45402d7207e22d1993fe0c2fce1c57644a11439891dd62b990eb7 F test/join6.test f809c025fa253f9e150c0e9afd4cef8813257bceeb6f46e04041228c9403cc2c F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497 F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4 @@ -1144,9 +1142,9 @@ F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63 F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200 F test/lemon-test01.y 58b764610fd934e189ffbb0bbfa33d171b9cb06019b55bdc04d090d6767e11d7 -F test/like.test 35e83182beb4c730d50e0f9aff7613fb5cdf8ca9147a833a77290fa5b8ba9474 +F test/like.test 0b7b4765ca59d95a1f92dfab9e4d810c9fb8280b5edd6332a01340a20db9e0ed F test/like2.test 3b2ee13149ba4a8a60b59756f4e5d345573852da -F test/like3.test a76e5938fadbe6d32807284c796bafd869974a961057bc5fc5a28e06de98745c +F test/like3.test 03d1bdf848483b78d2cfd1db283d75c4ec2e37c8b8eccc006813f3978d78fbbd F test/limit.test 350f5d03c29e7dff9a2cde016f84f8d368d40bcd02fa2b2a52fa10c4bf3cbfaf F test/limit2.test 9409b033284642a859fafc95f29a5a6a557bd57c1f0d7c3f554bd64ed69df77e F test/loadext.test faa4f6eed07a5aac35d57fdd7bc07f8fc82464cfd327567c10cf0ba3c86cde04 @@ -1181,7 +1179,7 @@ F test/mallocH.test 79b65aed612c9b3ed2dcdaa727c85895fd1bfbdb F test/mallocI.test 6c23a71df077fa5d387be90e7e669c5b368ca38a F test/mallocJ.test b5d1839da331d96223e5f458856f8ffe1366f62e -F test/mallocK.test 25897506da0098cea09b302ff432b0fb6d8002773c1e0fc9732aa8b444bfd455 +F test/mallocK.test 1f4b5efbf61715ab79b20b38739ff4b3d110ceb53f54e5db6da1f01c083707ab F test/mallocL.test fb311ff80afddf3b1a75e52289081f4754d901dc F test/mallocM.test 78bbe9d3da84a5c679123cdb40d7b2010b18fc46e13897e4f253c6ba6fbff134 F test/malloc_common.tcl aac62499b76be719fac31e7a3e54a7fd53272e7f @@ -1203,7 +1201,7 @@ F test/misc4.test 10cd6addb2fa9093df4751a1b92b50440175dd5468a6ec84d0386e78f087db0e F test/misc5.test c4aeaa0fa28faa08f2485309c38db4719e6cd1364215d5687a5b96d340a3fa58 F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91 -F test/misc7.test d912f3d45c2989191b797504a220ca225d6be80b21acad22ba0d35f4a9ee4579 +F test/misc7.test 7b4c88c1d5ea8c8b9d537d212c08a0343d345fdd5c789598692c1c0e60fbda69 F test/misc8.test 8782708f4c8a459591c3e8fe1215bd2048bffb4024b3df249e9b9ed407dc61ed F test/misuse.test 9e7f78402005e833af71dcab32d048003869eca5abcaccc985d4f8dc1d86bcc7 F test/mjournal.test 28a08d5cb5fb5b5702a46e19176e45e964e0800d1f894677169e79f34030e152 @@ -1227,10 +1225,10 @@ F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934 F test/notnull.test a37b663d5bb728d66fc182016613fb8e4a0a4bbf3d75b8876a7527f7d4ed3f18 -F test/notnull2.test 9b09c3405f1dfaf8c1725fb16d815407a5ceb4bb5bc7300e7a506348b3e78cd9 -F test/notnullfault.test fc4bb7845582a2b3db376001ef49118393b1b11abe0d24adb03db057ee2b73d5 +F test/notnull2.test 965a893619751255e59c911a8c58504b3174a3788b1458b7c7365b232209711b +F test/notnullfault.test 6126e31300632070ca6021698393c7fcf61ab4791bc2aa1d6d704242c0fcd4f8 F test/null.test b7ff206a1c60fe01aa2abd33ef9ea83c93727d993ca8a613de86e925c9f2bc6f -F test/nulls1.test 7a5e4346ee4285034100b4cd20e6784f16a9d6c927e44ecdf10034086bbee9c9 +F test/nulls1.test 82c5bc33148405f21205865abf13c786084438d573a4ac4e87e11b6091cde526 F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1 F test/numindex1.test 20a5450d4b056e48cd5db30e659f13347a099823 F test/offset1.test f06b83657bcf26f9ce805e67450e189e282143b2 @@ -1238,7 +1236,7 @@ F test/optfuzz-db01.c 9f2fa80b8f84ebbf1f2e8b13421a4e0477fe300f6686fbd76cac1d2db66e0fdc F test/optfuzz-db01.txt 21f6bdeadc701cf11528276e2a55c70bfcb846ba42df327f979bd9e7b6ce7041 F test/optfuzz.c 50e330304eb1992e15ddd11f3daaad9bcc0d9aaad09cb2bcc77f9515df2e88b1 -F test/orderby1.test a4bba04b9c60a21e53486fbc173a596b29641a3b3a57a0f26a1cbef1360358e9 +F test/orderby1.test 6bf0ce45cbfb1cf4779dd418ac5e8cf66abfa04de2c1d2edf1e0e85f1520d8f3 F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04 F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99 F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4 @@ -1297,18 +1295,18 @@ F test/releasetest_data.tcl 3d41ddb3f04f474ac9d925485da24ce6576ff0ebc4c7201c8a340bc09846c261 F test/resetdb.test 8062cf10a09d8c048f8de7711e94571c38b38168db0e5877ba7561789e5eeb2b F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb -F test/returning1.test 23dd8e28e69fb2f4e1a2173a241d5fb84846cac651096ad378980e4b7a79b434 +F test/returning1.test ce2192b40045cc94d53ac5ec5789a72a3ade233a6ea6e29666e296d151b59479 F test/rollback.test 06680159bc6746d0f26276e339e3ae2f951c64812468308838e0a3362d911eaa -F test/rollback2.test 3f3a4e20401825017df7e7671e9f31b6de5fae5620c2b9b49917f52f8c160a8f +F test/rollback2.test bc868d57899dc6972e2b4483faae0e03365a0556941474eec487ae21d8d38bb6 F test/rollbackfault.test 0e646aeab8840c399cfbfa43daab46fd609cf04a F test/round1.test 768018b04522ca420b1aba8a24bd76091d269f3bce3902af3ec6ebcee41ab21e F test/rowallock.test 3f88ec6819489d0b2341c7a7528ae17c053ab7cc F test/rowhash.test 0bc1d31415e4575d10cacf31e1a66b5cc0f8be81 F test/rowid.test bfbd7b97d9267660be3c8f28507c4ed7f205196b8877c0db42df347c2e8845e3 -F test/rowvalue.test 466efbb7bb93ca9f95d89f69c7c140aa52cc57ac6dfa7efba09ea4a9ab3cd9f0 +F test/rowvalue.test 6795850abf6243e96f09ef041919d1ea61713332237b60d01371c0fee73f6379 F test/rowvalue2.test 060d238b7e5639a7c5630cb5e63e311b44efef2b F test/rowvalue3.test 3068f508753af69884b12125995f023da0dbb256 -F test/rowvalue4.test 441e7e366ac6d939a3a95a574031c56ec2a854077a91d66eee5ff1d86cb5be58 +F test/rowvalue4.test 02e35f7762371c2f57ebd856aa056eac56cb27ef7715a0bb31eac1895a745356 F test/rowvalue5.test c81c7d8cf36711ab37675ad7376084ae2a359cb6 F test/rowvalue6.test d19b54feb604d5601f8614b15e214e0774c01087 F test/rowvalue7.test c1cbdbf407029db01f87764097c6ac02a1c5a37efd2776eff32a9cdfdf6f2dba @@ -1325,7 +1323,7 @@ F test/savepoint6.test f41279c5e137139fa5c21485773332c7adb98cd7 F test/savepoint7.test cde525ea3075283eb950cdcdefe23ead4f700daa F test/savepointfault.test f044eac64b59f09746c7020ee261734de82bf9b2 -F test/scanstatus.test 9a0ed37ab6d57b50567282788fffdf832d9b16739ecc41bff9d77a8d767cf317 +F test/scanstatus.test 874e35011779b07725a47dbf1dd6282b0ca04af7e028fb0b534ee544b571be42 F test/schema.test 5dd11c96ba64744de955315d2e4f8992e447533690153b93377dffb2a5ef5431 F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5 F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38 @@ -1343,11 +1341,11 @@ F test/select6.test 319d45e414cdd321bf17cfacedaf19e3935ad64dac357c53f1492338c6e9b801 F test/select7.test f659f231489349e8c5734e610803d7654207318f F test/select8.test 8c8f5ae43894c891efc5755ed905467d1d67ad5d -F test/select9.test f7586b207ce2304ab80dc93d3146469a28fd4403621dd3a82d06644563d3c812 -F test/selectA.test 5a9ef0f36c0f2666eb5e998073a98fce90c2fd0aa63a79c462c80036e9e0926d +F test/select9.test aebc2bb0c3bc44606125033cbcaac2c8d1f33a95 +F test/selectA.test 68de52409e45a3313d00b8461b48bef4fb729faf36ade9067a994eae55cc86f4 F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25 F test/selectC.test fec14c9015ed4ec941508bbc144f30b42e40ac34a4bb33001450369865dd0b75 -F test/selectD.test 6d1909b49970bf92f45ce657505befcef5fc7cbc13544e18103a316d32189bfb +F test/selectD.test fc20452847a01775710090383cfb4423275d2f745fed61f34fbf37573ac0d214 F test/selectE.test a8730ca330fcf40ace158f134f4fe0eb00c7edbf F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3 F test/selectG.test 089f7d3d7e6db91566f00b036cb353107a2cca6220eb1cb264085a836dae8840 @@ -1380,11 +1378,11 @@ F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5 F test/shrink.test 1b4330b1fd9e818c04726d45cb28db73087535ce F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329 -F test/skipscan1.test 1a9972e1dc15ca3887f306d3cd9a29679afb382eca0f3539f3b746f3c2ccaf68 -F test/skipscan2.test c588cb7ed947db724d300f2a0dc537dd2ad292b0f812641d8481bc0b95dd3f49 +F test/skipscan1.test ed524bc86f27646b3a297f45d6557b55db338977b6838f8064b196b35848b31b +F test/skipscan2.test 3eb703ce794f139e7b83567911046298bcde29606116727f9b700ce34f559d2d F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5 -F test/skipscan5.test 0672103fd2c8f96bd114133f356192b35ece45c794fe3677e1d9e5e3104a608e -F test/skipscan6.test bddbb35dd335e2d21b7791a61e3b2e1f3255dc307ce80aa6fe19cc298e6feb13 +F test/skipscan5.test 980875ad45d8aacfe7bdec7c288343520cd1d14e84befdcfe50c785f9e6c8709 +F test/skipscan6.test 0b4cd1b4ac9f84d91454df513c99a4932fa07e8f27b8049bea605068b3e34ac7 F test/snapshot.test a504f2e7009f512ef66c719f0ea1c55a556bdaf1e1312c80a04d46fc1a3e9632 F test/snapshot2.test 8d6ff5dd9cc503f6e12d408a30409c3f9c653507b24408d9cd7195931c89bc54 F test/snapshot3.test 8744313270c55f6e18574283553d3c5c5fe4c5970585663613a0e75c151e599b @@ -1472,7 +1470,7 @@ F test/tkt-2ea2425d34.test 1cf13e6f75d149b3209a0cb32927a82d3d79fb28 F test/tkt-31338dca7e.test 6fb8807851964da0d24e942f2e19c7c705b9fb58 F test/tkt-313723c356.test 4b306ad45c736cedf2f5221f6155b92143244b6d -F test/tkt-385a5b56b9.test 81d7c8ef2d2a378323ba2190c1f02f91022fdff0d8d0b84c04954d02c85ef374 +F test/tkt-385a5b56b9.test 5204a7cba0e28c99df0acbf95af5e1af4d32965a7a14de6eccebf949607618b1 F test/tkt-38cb5df375.test f3cc8671f1eb604d4ae9cf886ed4366bec656678 F test/tkt-3998683a16.test 6d1d04d551ed1704eb3396ca87bb9ccc8c5c1eb7 F test/tkt-3a77c9714e.test 90e3e8455ee945a4076d4c44062b8845708af24a880355328fe7008f2047c9f0 @@ -1487,7 +1485,7 @@ F test/tkt-5ee23731f.test 9db6e1d7209dc0794948b260d6f82b2b1de83a9f F test/tkt-6bfb98dfc0.test 24780633627b5cfc0635a5500c2389ebfb563336 F test/tkt-752e1646fc.test ea78d88d14fe9866bdd991c634483334639e13bf -F test/tkt-78e04e52ea.test b731f2ab7d1c2482ac5152097da02ef4805a45147ba9498d3cd9da27072f34d1 +F test/tkt-78e04e52ea.test cb44d0f5e7940223be740a39913a1b9b9b30d7e4a17ed3349141f893bae1b8f2 F test/tkt-7a31705a7e6.test 9e9c057b6a9497c8f7ba7b16871029414ccf6550e7345d9085d6d71c9a56bb6f F test/tkt-7bbfb7d442.test 7b2cd79c7a17ae6750e75ec1a7846712a69c9d18 F test/tkt-80ba201079.test 105a721e6aad0ae3c5946d7615d1e4d03f6145b8 @@ -1506,7 +1504,7 @@ F test/tkt-b1d3a2e531.test 8f7576e41ca179289ee1a8fee28386fd8e4b0550 F test/tkt-b351d95f9.test d14a503c414c5c58fdde3e80f9a3cfef986498c0 F test/tkt-b72787b1.test a95e8cdad0b98af1853ac7f0afd4ab27b77bf5f3 -F test/tkt-b75a9ca6b0.test dc6a853c242f7d0326564ae32e9e5eb462b5e8d2bc5b01ea3b18fd24f8e5894b +F test/tkt-b75a9ca6b0.test ade89229d853a67a21bbd5e6e1e787a8f9d21f19908d1b7fca6bf3d4d5aa0767 F test/tkt-ba7cbfaedc.test b4c0deccc12aeb55cfdb57935b16b5d67c5a9877 F test/tkt-bd484a090c.test 60460bf946f79a79712b71f202eda501ca99b898 F test/tkt-bdc6bbbb38.test fc38bb09bdd440e3513a1f5f98fc60a075182d7d @@ -1572,7 +1570,7 @@ F test/tkt3357.test 77c37c6482b526fe89941ce951c22d011f5922ed F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b F test/tkt3424.test 61f831bd2b071bd128fa5d00fbda57e656ca5812 -F test/tkt3442.test 6287173de5bb2d43693b1f822426018a209f9df49ce2f454808bac1771852330 +F test/tkt3442.test a1fc47c669e651d16494de3ff349bcb53281456f2ca02c8bc14220b6044bbfe8 F test/tkt3457.test 5651e2cbb94645b677ec663160b9e192b87b7d365aecdfb24e19f749575a6fc2 F test/tkt3461.test 228ea328a5a21e8663f80ee3d212a6ad92549a19 F test/tkt3493.test 1686cbde85f8721fc1bdc0ee72f2ef2f63139218 @@ -1608,14 +1606,14 @@ F test/tkt3997.test a335fa41ca3985660a139df7b734a26ef53284bd F test/tkt4018.test 18dbc6617f7a4b90e938d1bd6d26ad18daafaf08 F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7 -F test/tpch01.test 4479008f85f6f8f25f7ab2cb305d665752b4727fa28a8df3d8e0ad46520c62ff +F test/tpch01.test 7c4eb8cdd79c568f46d344b3e789c9fdb8a766d112871352704861f3fca32a2a F test/trace.test a659a9862957f4789e37a92b3bf6d2caf5c86b02cdeefc41e850ae53acf6992a F test/trace2.test f5cb67ad3bc09e0c58e8cca78dfd0b5639259983 F test/trace3.test ae2004df24b585fed9046cc0bae4601762bc6fc4aa321d475f1350bba5047f31 F test/trans.test 45f6f9ab6f66a7b5744f1caac06b558f95da62501916906cf55586a896f9f439 F test/trans2.test 62bd045bfc7a1c14c5ba83ba64d21ade31583f76 F test/trans3.test 91a100e5412b488e22a655fe423a14c26403ab94 -F test/transitive1.test 239eec5343388983f112c16d666aa89960cd85302b6af6cd8408ce8edb7b3316 +F test/transitive1.test 293300f46916569f08875cdb2fe2134be2c27677 F test/trigger1.test d30cd09ae8ac365a088f09daba583cc5c0b8fc7d4e1d70809d0b4be3bf6ae2ab F test/trigger2.test d15da46f7012832faf3e0c536b47024409d5fb1722d2bb77e29c06d96d704bb1 F test/trigger3.test aa640bb2bbb03edd5ff69c055117ea088f121945 @@ -1632,7 +1630,7 @@ F test/triggerE.test 612969cb57a4ef792059ad6d01af0117e1ae862c283753ffcc9a6428642b22ee F test/triggerF.test 5d76f0a8c428ff87a4d5ed52da06f6096a2c787a1e21b846111dfac4123de3ad F test/triggerG.test 2b816093c91ba73c733cfa8aedcc210ad819d72a98b1da30768a3c56505233e9 -F test/triggerupfrom.test d1f9e56090408115c522bee626cc33a2f3370f627a5e341d832589d72e3aa271 +F test/triggerupfrom.test d25961fa70a99b6736193da7b49a36d8c1d28d56188f0be6406d4366315cd6e4 F test/trustschema1.test 4e970aef0bfe0cee139703cc7209d0e0f07725d999b180ba50770f49edef1494 F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1 F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a @@ -1651,14 +1649,14 @@ F test/unique.test 93f8b2ef5ea51b9495f8d6493429b1fd0f465264 F test/unique2.test 3674e9f2a3f1fbbfd4772ac74b7a97090d0f77d2 F test/unixexcl.test d936ba2b06794018e136418addd59a2354eeae97 -F test/unordered.test 0edaf3411d300693bca595897c5201421c6c5ec787990a1dfe2f7f60ae93f1e2 +F test/unordered.test ffeea7747d5ba962a8009a20b7e53d68cbae05b063604c68702c5998eb50c981 F test/update.test e906ca7cb1dc6f52af1ea243e08f727edfa79f924c2691f2f9e72481f847310d F test/update2.test 67455bc61fcbcf96923c45b3bc4f87bc72be7d67575ad35f134906148c7b06d3 F test/upfrom1.tcl 8859d9d437f03b44174c4524a7a734a391fd4526fcff65be08285dafc9dc9041 F test/upfrom1.test d18f69f7c691bc791e7f31bf0e354eeff04cf2f44edc32d6b1928bad71697073 -F test/upfrom2.test f92e47bfc35e9410d3e8716ee626384e89ad026c55fd6148508ca9d707521673 -F test/upfrom3.test 6130f24ebf97f5ea865e5d2a14a2d543fe5428a62e87cc60f62d875e45c1f5f0 -F test/upfromfault.test 3a10075a0043f0c4fad6614b2c371f88a8ba5a4acab68b907438413865d6a8d6 +F test/upfrom2.test 6ebd3be8c3fac984e89a177d823686f04605b512fc167392bce6d8ba2ba63325 +F test/upfrom3.test 7dab379d128e8dd7beb2055b295fb113c7ba93e8c2038f5ddb7a4a10f0ebb348 +F test/upfromfault.test 70ecf8eb85559727a487283f69374e3ae39879e994d8a2437c49d7c05ecb70c9 F test/upsert1.test 88f9e258c6a0eeeb85937b08831e8daad440ba41f125af48439e9d33f266fb18 F test/upsert2.test 9c3cdbb1a890227f6504ce4b0e3de68f4cdfa16bb21d8641208a9239896c5a09 F test/upsert3.test 88d7d590a1948a9cb6eac1b54b0642f67a9f35a1fc0f19b200e97d5d39e3179c @@ -1733,37 +1731,37 @@ F test/walro.test cb438d05ba0d191f10b688e39c4f0cd5b71569a1d1f4440e5bdf3c6880e08c20 F test/walro2.test 0e79dd15cbdb4f482c01ea248373669c732414a726b357d04846a816afafb768 F test/walrofault.test c70cb6e308c443867701856cce92ad8288cd99488fa52afab77cca6cfd51af68 -F test/walsetlk.test 3185bebc90557e0d611442c8d64f7a0cb7b06f8e156eea37a4a7358f722715be +F test/walsetlk.test 11f7fe792fdce54cf09874dab824e0627f2eedecfb9f7983e325606ec5184e0c F test/walshared.test 0befc811dcf0b287efae21612304d15576e35417 F test/walslow.test c05c68d4dc2700a982f89133ce103a1a84cc285f F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747 F test/walvfs.test bccb3e0d235ef85e276f491d34db32c9ada1ea67be8d9f10aabe7b30319ec656 F test/wapp.tcl b440cd8cf57953d3a49e7ee81e6a18f18efdaf113b69f7d8482b0710a64566ec F test/wapptest.tcl 899594e25684861d5b0c0880fb012364def50ef8097041b8ddf74be5ba7fa270 x -F test/where.test 4f7a3939e5190845ef42142031a1819070f65e065e6a840a09adc54dccfef01f -F test/where2.test 03c21a11e7b90e2845fc3c8b4002fc44cc2797fa74c86ee47d70bd7ea4f29ed6 -F test/where3.test 5b4ffc0ac2ea0fe92f02b1244b7531522fe4d7bccf6fa8741d54e82c10e67753 +F test/where.test e713c0c64e3e6b062235e39a2f7e5508c517df16b63d69fd786e26bc7330b1c6 +F test/where2.test 478d2170637b9211f593120648858593bf2445a1 +F test/where3.test 2341a294e17193a6b1699ea7f192124a5286ca6acfcc3f4b06d16c931fbcda2c F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8 F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2 F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b -F test/where7.test ab41d53ce8f2a6919ea3d5b13cd1153c1375a8e3ddaa129b81781f9033981383 +F test/where7.test 75722434c486ac9e74718caa6cce234f45ba34c0b6c0f9555b29eb8bb5f6ade1 F test/where8.test 461ca40265ed996a6305da99bb024b0e41602bb586acf544c08f95922358e49f -F test/where9.test b1942ed1d4c4632ea99e135691371f33803428ee4092a462280338ab3347f916 +F test/where9.test 8e3e0ff42cc17156f52361a1c012281550d0d632912fec92d1d6df74db7a8e6d F test/whereA.test 9d1077b117f1b68d5f739d94f36956c36cf995eb87bb19b77b2e81af020edd20 F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5 F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6 F test/whereD.test c1c335e914e28b122e000e9310f02d2be83e1c9dbca2e29f46bd732703944d1b -F test/whereE.test 0ac7e61c6225354a980666996539da154991b4325af943a25a9079079c82fb03 -F test/whereF.test 926b65519608e3f2aa28720822b9154fb5c7b13519dd78194f434a511ab3dac5 -F test/whereG.test 0a489c891a74500b3994266342785dc12e675ac55ad74935c7c1b70393edf82c +F test/whereE.test b3a055eef928c992b0a33198a7b8dc10eea5ad2f +F test/whereF.test 3d9412b1199d3e2bed34fcb76b4c48d0bf4df95d27e3f8dd27b6f8b4716d0d89 +F test/whereG.test 77127a4d214bb21da3b5c695cf4106cd9e418c60d9c24471ba55d3772067cd35 F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2 -F test/whereI.test c4bb7e2ca56d49bd8ab5c7bd085b8b83e353922b46904d68aefb3c7468643581 -F test/whereJ.test fc05e374cc9f2dc204148d6c06822c380ad388895fe97a6d335b94a26a08aecf -F test/whereK.test 0270ab7f04ba5436fb9156d31d642a1c82727f4c4bfe5ba90d435c78cf44684a -F test/whereL.test 7717caf61ff4b09d05ddd2978701c4cf5661408bd4dce31d38eff482f60f44f3 +F test/whereI.test a2874062140ed4aba9ffae76e6190a3df6fc73d1373fdfa8fd632945082a5364 +F test/whereJ.test 88287550f6ee604422403b053455b1ad894eeaa5c35d348532dfa1439286cb9a +F test/whereK.test f8e3cf26a8513ecc7f514f54df9f0572c046c42b +F test/whereL.test 1afe47227f093dc0547236491fb37529b7be9724b8575925a321001b80e6a23a F test/wherefault.test 1374c3aa198388925246475f84ad4cd5f9528864 F test/wherelfault.test 9012e4ef5259058b771606616bd007af5d154e64cc25fa9fd4170f6411db44e3 -F test/wherelimit.test daa0fd9122c5745cc459ec40b8d3c16ce13ce8382b5b847e7cfff4b871260cbf +F test/wherelimit.test afb46397c6d7e964e6e294ba3569864a0c570fe3807afc634236c2b752372f31 F test/wherelimit2.test 657a3f24aadee62d058c5091ea682dc4af4b95ffe32f137155be49799a58e721 F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2aeee74 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972 @@ -1788,20 +1786,20 @@ F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0 F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3cc1819b F test/windowfault.test d543d46571b32d19f198cb04b6505747fabf3cc369970daae47074ee793612be -F test/windowpushd.test d8895d08870b7226f7693665bd292eb177e62ca06799184957b3ca7dc03067df -F test/with1.test b231edbf0f7c1d94bc14365cd9f33e197b2f0aa16add927ee121649fce014c15 +F test/windowpushd.test 5b9c114e8173c3addacf58a0fcd941437b14649f2033700184479a13f188ad00 +F test/with1.test 780be387f01e290e768bdfd1827280f9e37ba37223eb4736aba386864fac5a94 F test/with2.test 000fb95f1f29dae868cea0f41505eb5126077d49eb967ff88f9ee46212ad8863 -F test/with3.test ad32d13ad50661e6fa305f62a0717649c348792e7b658bf2644976227a9e0373 +F test/with3.test 2f1e05aef7aeef9a741cbf36deeb4be73003dc541921c3abc78becbbf5b7852d F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f198205 F test/with5.test 6248213c41fab36290b5b73aa3f937309dfba337004d9d8434c3fabc8c7d4be8 -F test/with6.test 661d7e416bef6c0a2556b2c9f0c8178a5b15932bed65246abed99723a8d4e7c0 +F test/with6.test 3001b59179cbdc26a8c67ff8f46944e3141fdece9ab064c49bbf08459b67b207 F test/withM.test 693b61765f2b387b5e3e24a4536e2e82de15ff64 F test/without_rowid1.test e4034c0849ccc2e8bb749c69f15bd69bb9fcf8fe77e8d17ce02369604242fe83 F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99 F test/without_rowid3.test 39ab0dd773eaa62e59b17093f875327630f54c4145458f6d2b053d68d4b2f67b F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a F test/without_rowid5.test 89b1c587bd92a0590e440da33e7666bf4891572a -F test/without_rowid6.test efbd7add62c59bf5ca97bf8da674e734e6a70ef979234e816166824b4d258f68 +F test/without_rowid6.test 8463b20098e9f75a501a9f17dfb42fffc79068eac0b2775fe56ef2281d2df45e F test/without_rowid7.test d7c59a93d726b55812d620f8f284e01904a5b85f9ee9eea8f2f68571a5e8c40e F test/wordcount.c d721a4b6fae93e6e33449700bce1686bc23257c27425bc3ef1599dc912adec66 F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501ddd910cc @@ -1831,7 +1829,7 @@ F tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce F tool/index_usage.c f62a0c701b2c7ff2f3e21d206f093c123f222dbf07136a10ffd1ca15a5c706c5 F tool/kvtest-speed.sh 4761a9c4b3530907562314d7757995787f7aef8f -F tool/lemon.c a5acddd3eec6a388872aae6efc7563336348a9c45e5563642f77e8e3a50e859d +F tool/lemon.c d44ba4f03427c9bd34b601f315fe77c2b6d4bd215801a0259aeedbcc4c94a95c F tool/lempar.c 1d3d075da18681c67ecc66c1f171e7094e18cd2cfba6a8a1bd4f3f639d6656e1 F tool/libvers.c caafc3b689638a1d88d44bc5f526c2278760d9b9 F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862 @@ -1912,7 +1910,9 @@ F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P e16da5af822ef31d7e05992403cf9787fbb3d9abb0b5283aba55ea07e1830a72 -R 31cf23d11c71c31febdef8457989c710 -U drh -Z bb6d981e49a44d67794ddc6bc2f09d25 +P 64b0eb7e1171611436031b8d2923ce947c37addbd8a776a7ded461fc486c3640 +R 55c5b4b708ce6050b44359864678297d +T +sym-release * +T +sym-version-3.35.4 * +U dan +Z 77a9a4e15883c7141df67ebe55a2c0d2 diff -Nru sqlite3-3.35.0/manifest.uuid sqlite3-3.35.0-1/manifest.uuid --- sqlite3-3.35.0/manifest.uuid 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/manifest.uuid 2021-04-04 17:23:21.000000000 +0000 @@ -1 +1 @@ -778a9a6e6f8d960fd55ac9be7eea20b1875a46192db85e63dddc61b632b30173 \ No newline at end of file +5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e \ No newline at end of file diff -Nru sqlite3-3.35.0/src/alter.c sqlite3-3.35.0-1/src/alter.c --- sqlite3-3.35.0/src/alter.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/alter.c 2021-04-04 17:23:21.000000000 +0000 @@ -54,7 +54,7 @@ const char *zDb, /* Name of db to verify schema of */ int bTemp, /* True if this is the temp db */ const char *zWhen, /* "when" part of error message */ - int bNoDQS /* Do not allow DQS in the schema */ + const char *zDropColumn /* Name of column being dropped */ ){ pParse->colNamesSet = 1; sqlite3NestedParse(pParse, @@ -62,9 +62,9 @@ "FROM \"%w\"." DFLT_SCHEMA_TABLE " " "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" " AND sql NOT LIKE 'create virtual%%'" - " AND sqlite_rename_test(%Q, sql, type, name, %d, %Q, %d)=NULL ", + " AND sqlite_rename_test(%Q, sql, type, name, %d, %Q, %Q)=NULL ", zDb, - zDb, bTemp, zWhen, bNoDQS + zDb, bTemp, zWhen, zDropColumn ); if( bTemp==0 ){ @@ -73,32 +73,8 @@ "FROM temp." DFLT_SCHEMA_TABLE " " "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" " AND sql NOT LIKE 'create virtual%%'" - " AND sqlite_rename_test(%Q, sql, type, name, 1, %Q, %d)=NULL ", - zDb, zWhen, bNoDQS - ); - } -} - -/* -** Generate VM code to replace any double-quoted strings (but not double-quoted -** identifiers) within the "sql" column of the sqlite_schema table in -** database zDb with their single-quoted equivalents. If argument bTemp is -** not true, similarly update all SQL statements in the sqlite_schema table -** of the temp db. -*/ -static void renameFixQuotes(Parse *pParse, const char *zDb, int bTemp){ - sqlite3NestedParse(pParse, - "UPDATE \"%w\"." DFLT_SCHEMA_TABLE - " SET sql = sqlite_rename_quotefix(%Q, sql)" - "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" - " AND sql NOT LIKE 'create virtual%%'" , zDb, zDb - ); - if( bTemp==0 ){ - sqlite3NestedParse(pParse, - "UPDATE temp." DFLT_SCHEMA_TABLE - " SET sql = sqlite_rename_quotefix('temp', sql)" - "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" - " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, 1, %Q, %Q)=NULL ", + zDb, zWhen, zDropColumn ); } } @@ -261,7 +237,7 @@ "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), " "tbl_name = " "CASE WHEN tbl_name=%Q COLLATE nocase AND " - " sqlite_rename_test(%Q, sql, type, name, 1, 'after rename', 0) " + " sqlite_rename_test(%Q, sql, type, name, 1, 'after rename',0) " "THEN %Q ELSE tbl_name END " "WHERE type IN ('view', 'trigger')" , zDb, zTabName, zName, zTabName, zDb, zName); @@ -620,10 +596,6 @@ goto exit_rename_column; } - /* Ensure the schema contains no double-quoted strings */ - renameTestSchema(pParse, zDb, iSchema==1, "", 0); - renameFixQuotes(pParse, zDb, iSchema==1); - /* Do the rename operation using a recursive UPDATE statement that ** uses the sqlite_rename_column() SQL function to compute the new ** CREATE statement text for the sqlite_schema table. @@ -653,7 +625,7 @@ /* Drop and reload the database schema. */ renameReloadSchema(pParse, iSchema, INITFLAG_AlterRename); - renameTestSchema(pParse, zDb, iSchema==1, "after rename", 1); + renameTestSchema(pParse, zDb, iSchema==1, "after rename", 0); exit_rename_column: sqlite3SrcListDelete(db, pSrc); @@ -1077,12 +1049,17 @@ const char *zDb, /* Name of schema SQL belongs to */ sqlite3 *db, /* Database handle */ const char *zSql, /* SQL to parse */ - int bTemp /* True if SQL is from temp schema */ + int bTemp, /* True if SQL is from temp schema */ + const char *zDropColumn /* Name of column being dropped */ ){ int rc; char *zErr = 0; db->init.iDb = bTemp ? 1 : sqlite3FindDbName(db, zDb); + if( zDropColumn ){ + db->init.bDropColumn = 1; + db->init.azInit = (char**)&zDropColumn; + } /* Parse the SQL statement passed as the first argument. If no error ** occurs and the parse does not result in a new table, index or @@ -1115,6 +1092,7 @@ #endif db->init.iDb = 0; + db->init.bDropColumn = 0; return rc; } @@ -1138,72 +1116,47 @@ int nSql = sqlite3Strlen30(zSql); sqlite3 *db = sqlite3_context_db_handle(pCtx); int rc = SQLITE_OK; - char *zQuot = 0; + char *zQuot; char *zOut; - int nQuot = 0; - char *zBuf1 = 0; - char *zBuf2 = 0; - - if( zNew ){ - /* Set zQuot to point to a buffer containing a quoted copy of the - ** identifier zNew. If the corresponding identifier in the original - ** ALTER TABLE statement was quoted (bQuote==1), then set zNew to - ** point to zQuot so that all substitutions are made using the - ** quoted version of the new column name. */ - zQuot = sqlite3MPrintf(db, "\"%w\" ", zNew); - if( zQuot==0 ){ - return SQLITE_NOMEM; - }else{ - nQuot = sqlite3Strlen30(zQuot)-1; - } + int nQuot; - assert( nQuot>=nNew ); - zOut = sqlite3DbMallocZero(db, nSql + pRename->nList*nQuot + 1); + /* Set zQuot to point to a buffer containing a quoted copy of the + ** identifier zNew. If the corresponding identifier in the original + ** ALTER TABLE statement was quoted (bQuote==1), then set zNew to + ** point to zQuot so that all substitutions are made using the + ** quoted version of the new column name. */ + zQuot = sqlite3MPrintf(db, "\"%w\"", zNew); + if( zQuot==0 ){ + return SQLITE_NOMEM; }else{ - zOut = (char*)sqlite3DbMallocZero(db, (nSql*2+1) * 3); - if( zOut ){ - zBuf1 = &zOut[nSql*2+1]; - zBuf2 = &zOut[nSql*4+2]; - } + nQuot = sqlite3Strlen30(zQuot); + } + if( bQuote ){ + zNew = zQuot; + nNew = nQuot; } /* At this point pRename->pList contains a list of RenameToken objects ** corresponding to all tokens in the input SQL that must be replaced - ** with the new column name, or with single-quoted versions of themselves. - ** All that remains is to construct and return the edited SQL string. */ + ** with the new column name. All that remains is to construct and + ** return the edited SQL string. */ + assert( nQuot>=nNew ); + zOut = sqlite3DbMallocZero(db, nSql + pRename->nList*nQuot + 1); if( zOut ){ int nOut = nSql; memcpy(zOut, zSql, nSql); while( pRename->pList ){ int iOff; /* Offset of token to replace in zOut */ - u32 nReplace; - const char *zReplace; RenameToken *pBest = renameColumnTokenNext(pRename); - if( zNew ){ - if( bQuote==0 && sqlite3IsIdChar(*pBest->t.z) ){ - nReplace = nNew; - zReplace = zNew; - }else{ - nReplace = nQuot; - zReplace = zQuot; - if( pBest->t.z[pBest->t.n]=='"' ) nReplace++; - } + u32 nReplace; + const char *zReplace; + if( sqlite3IsIdChar(*pBest->t.z) ){ + nReplace = nNew; + zReplace = zNew; }else{ - /* Dequote the double-quoted token. Then requote it again, this time - ** using single quotes. If the character immediately following the - ** original token within the input SQL was a single quote ('), then - ** add another space after the new, single-quoted version of the - ** token. This is so that (SELECT "string"'alias') maps to - ** (SELECT 'string' 'alias'), and not (SELECT 'string''alias'). */ - memcpy(zBuf1, pBest->t.z, pBest->t.n); - zBuf1[pBest->t.n] = 0; - sqlite3Dequote(zBuf1); - sqlite3_snprintf(nSql*2, zBuf2, "%Q%s", zBuf1, - pBest->t.z[pBest->t.n]=='\'' ? " " : "" - ); - zReplace = zBuf2; - nReplace = sqlite3Strlen30(zReplace); + nReplace = nQuot; + zReplace = zQuot; } iOff = pBest->t.z - zSql; @@ -1441,7 +1394,7 @@ #ifndef SQLITE_OMIT_AUTHORIZATION db->xAuth = 0; #endif - rc = renameParseSql(&sParse, zDb, db, zSql, bTemp); + rc = renameParseSql(&sParse, zDb, db, zSql, bTemp, 0); /* Find tokens that need to be replaced. */ memset(&sWalker, 0, sizeof(Walker)); @@ -1645,7 +1598,7 @@ sWalker.xSelectCallback = renameTableSelectCb; sWalker.u.pRename = &sCtx; - rc = renameParseSql(&sParse, zDb, db, zInput, bTemp); + rc = renameParseSql(&sParse, zDb, db, zInput, bTemp, 0); if( rc==SQLITE_OK ){ int isLegacy = (db->flags & SQLITE_LegacyAlter); @@ -1748,119 +1701,6 @@ return; } -static int renameQuotefixExprCb(Walker *pWalker, Expr *pExpr){ - if( pExpr->op==TK_STRING && (pExpr->flags & EP_DblQuoted) ){ - renameTokenFind(pWalker->pParse, pWalker->u.pRename, (void*)pExpr); - } - return WRC_Continue; -} - -/* -** The implementation of an SQL scalar function that rewrites DDL statements -** so that any string literals that use double-quotes are modified so that -** they use single quotes. -** -** Two arguments must be passed: -** -** 0: Database name ("main", "temp" etc.). -** 1: SQL statement to edit. -** -** The returned value is the modified SQL statement. For example, given -** the database schema: -** -** CREATE TABLE t1(a, b, c); -** -** SELECT sqlite_rename_quotefix('main', -** 'CREATE VIEW v1 AS SELECT "a", "string" FROM t1' -** ); -** -** returns the string: -** -** CREATE VIEW v1 AS SELECT "a", 'string' FROM t1 -*/ -static void renameQuotefixFunc( - sqlite3_context *context, - int NotUsed, - sqlite3_value **argv -){ - sqlite3 *db = sqlite3_context_db_handle(context); - char const *zDb = (const char*)sqlite3_value_text(argv[0]); - char const *zInput = (const char*)sqlite3_value_text(argv[1]); - -#ifndef SQLITE_OMIT_AUTHORIZATION - sqlite3_xauth xAuth = db->xAuth; - db->xAuth = 0; -#endif - - sqlite3BtreeEnterAll(db); - - UNUSED_PARAMETER(NotUsed); - if( zDb && zInput ){ - int rc; - Parse sParse; - rc = renameParseSql(&sParse, zDb, db, zInput, 0); - - if( rc==SQLITE_OK ){ - RenameCtx sCtx; - Walker sWalker; - - /* Walker to find tokens that need to be replaced. */ - memset(&sCtx, 0, sizeof(RenameCtx)); - memset(&sWalker, 0, sizeof(Walker)); - sWalker.pParse = &sParse; - sWalker.xExprCallback = renameQuotefixExprCb; - sWalker.xSelectCallback = renameColumnSelectCb; - sWalker.u.pRename = &sCtx; - - if( sParse.pNewTable ){ - Select *pSelect = sParse.pNewTable->pSelect; - if( pSelect ){ - pSelect->selFlags &= ~SF_View; - sParse.rc = SQLITE_OK; - sqlite3SelectPrep(&sParse, pSelect, 0); - rc = (db->mallocFailed ? SQLITE_NOMEM : sParse.rc); - if( rc==SQLITE_OK ){ - sqlite3WalkSelect(&sWalker, pSelect); - } - }else{ - int i; - sqlite3WalkExprList(&sWalker, sParse.pNewTable->pCheck); -#ifndef SQLITE_OMIT_GENERATED_COLUMNS - for(i=0; inCol; i++){ - sqlite3WalkExpr(&sWalker, sParse.pNewTable->aCol[i].pDflt); - } -#endif /* SQLITE_OMIT_GENERATED_COLUMNS */ - } - }else if( sParse.pNewIndex ){ - sqlite3WalkExprList(&sWalker, sParse.pNewIndex->aColExpr); - sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); - }else{ -#ifndef SQLITE_OMIT_TRIGGER - rc = renameResolveTrigger(&sParse); - if( rc==SQLITE_OK ){ - renameWalkTrigger(&sWalker, sParse.pNewTrigger); - } -#endif /* SQLITE_OMIT_TRIGGER */ - } - - if( rc==SQLITE_OK ){ - rc = renameEditSql(context, &sCtx, zInput, 0, 0); - } - renameTokenFree(db, sCtx.pList); - } - if( rc!=SQLITE_OK ){ - sqlite3_result_error_code(context, rc); - } - renameParseCleanup(&sParse); - } - -#ifndef SQLITE_OMIT_AUTHORIZATION - db->xAuth = xAuth; -#endif - - sqlite3BtreeLeaveAll(db); -} - /* ** An SQL user function that checks that there are no parse or symbol ** resolution problems in a CREATE TRIGGER|TABLE|VIEW|INDEX statement. @@ -1874,7 +1714,7 @@ ** 3: Object name. ** 4: True if object is from temp schema. ** 5: "when" part of error message. -** 6: True to disable the DQS quirk when parsing SQL. +** 6: Name of column being dropped, or NULL. ** ** Unless it finds an error, this function normally returns NULL. However, it ** returns integer value 1 if: @@ -1893,7 +1733,7 @@ int bTemp = sqlite3_value_int(argv[4]); int isLegacy = (db->flags & SQLITE_LegacyAlter); char const *zWhen = (const char*)sqlite3_value_text(argv[5]); - int bNoDQS = sqlite3_value_int(argv[6]); + char const *zDropColumn = (const char*)sqlite3_value_text(argv[6]); #ifndef SQLITE_OMIT_AUTHORIZATION sqlite3_xauth xAuth = db->xAuth; @@ -1901,14 +1741,10 @@ #endif UNUSED_PARAMETER(NotUsed); - if( zDb && zInput ){ int rc; Parse sParse; - int flags = db->flags; - if( bNoDQS ) db->flags &= ~(SQLITE_DqsDML|SQLITE_DqsDDL); - rc = renameParseSql(&sParse, zDb, db, zInput, bTemp); - db->flags |= (flags & (SQLITE_DqsDML|SQLITE_DqsDDL)); + rc = renameParseSql(&sParse, zDb, db, zInput, bTemp, zDropColumn); if( rc==SQLITE_OK ){ if( isLegacy==0 && sParse.pNewTable && sParse.pNewTable->pSelect ){ NameContext sNC; @@ -1976,7 +1812,7 @@ #endif UNUSED_PARAMETER(NotUsed); - rc = renameParseSql(&sParse, zDb, db, zSql, iSchema==1); + rc = renameParseSql(&sParse, zDb, db, zSql, iSchema==1, 0); if( rc!=SQLITE_OK ) goto drop_column_done; pTab = sParse.pNewTable; if( pTab==0 || pTab->nCol==1 || iCol>=pTab->nCol ){ @@ -2070,7 +1906,6 @@ assert( iDb>=0 ); zDb = db->aDb[iDb].zDbSName; renameTestSchema(pParse, zDb, iDb==1, "", 0); - renameFixQuotes(pParse, zDb, iDb==1); sqlite3NestedParse(pParse, "UPDATE \"%w\"." DFLT_SCHEMA_TABLE " SET " "sql = sqlite_drop_column(%d, sql, %d) " @@ -2080,7 +1915,7 @@ /* Drop and reload the database schema. */ renameReloadSchema(pParse, iDb, INITFLAG_AlterDrop); - renameTestSchema(pParse, zDb, iDb==1, "after drop column", 1); + renameTestSchema(pParse, zDb, iDb==1, "after drop column", zCol); /* Edit rows of table on disk */ if( pParse->nErr==0 && (pTab->aCol[iCol].colFlags & COLFLAG_VIRTUAL)==0 ){ @@ -2142,7 +1977,6 @@ INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc), INTERNAL_FUNCTION(sqlite_rename_test, 7, renameTableTest), INTERNAL_FUNCTION(sqlite_drop_column, 3, dropColumnFunc), - INTERNAL_FUNCTION(sqlite_rename_quotefix,2, renameQuotefixFunc), }; sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); } diff -Nru sqlite3-3.35.0/src/build.c sqlite3-3.35.0-1/src/build.c --- sqlite3-3.35.0/src/build.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/build.c 2021-04-04 17:23:21.000000000 +0000 @@ -4263,7 +4263,7 @@ pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase); if( pIndex==0 ){ if( !ifExists ){ - sqlite3ErrorMsg(pParse, "no such index: %S", pName->a); + sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0); }else{ sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase); } diff -Nru sqlite3-3.35.0/src/expr.c sqlite3-3.35.0-1/src/expr.c --- sqlite3-3.35.0/src/expr.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/expr.c 2021-04-04 17:23:21.000000000 +0000 @@ -611,7 +611,6 @@ int regLeft = 0; int regRight = 0; u8 opx = op; - int addrCmp = 0; int addrDone = sqlite3VdbeMakeLabel(pParse); int isCommuted = ExprHasProperty(pExpr,EP_Commuted); @@ -631,24 +630,21 @@ assert( p5==0 || pExpr->op!=op ); assert( p5==SQLITE_NULLEQ || pExpr->op==op ); - if( op==TK_LE ) opx = TK_LT; - if( op==TK_GE ) opx = TK_GT; - if( op==TK_NE ) opx = TK_EQ; + p5 |= SQLITE_STOREP2; + if( opx==TK_LE ) opx = TK_LT; + if( opx==TK_GE ) opx = TK_GT; regLeft = exprCodeSubselect(pParse, pLeft); regRight = exprCodeSubselect(pParse, pRight); - sqlite3VdbeAddOp2(v, OP_Integer, 1, dest); for(i=0; 1 /*Loop exits by "break"*/; i++){ int regFree1 = 0, regFree2 = 0; Expr *pL, *pR; int r1, r2; assert( i>=0 && i0 @@ -1504,7 +1494,6 @@ pNew = sqlite3DbMallocRawNN(db, sqlite3DbMallocSize(db, p)); if( pNew==0 ) return 0; pNew->nExpr = p->nExpr; - pNew->nAlloc = p->nAlloc; pItem = pNew->a; pOldItem = p->a; for(i=0; inExpr; i++, pItem++, pOldItem++){ @@ -1677,64 +1666,41 @@ ** NULL is returned. If non-NULL is returned, then it is guaranteed ** that the new entry was successfully appended. */ -static const struct ExprList_item zeroItem; -SQLITE_NOINLINE ExprList *sqlite3ExprListAppendNew( - sqlite3 *db, /* Database handle. Used for memory allocation */ - Expr *pExpr /* Expression to be appended. Might be NULL */ -){ - struct ExprList_item *pItem; - ExprList *pList; - - pList = sqlite3DbMallocRawNN(db, sizeof(ExprList)+sizeof(pList->a[0])*4 ); - if( pList==0 ){ - sqlite3ExprDelete(db, pExpr); - return 0; - } - pList->nAlloc = 4; - pList->nExpr = 1; - pItem = &pList->a[0]; - *pItem = zeroItem; - pItem->pExpr = pExpr; - return pList; -} -SQLITE_NOINLINE ExprList *sqlite3ExprListAppendGrow( - sqlite3 *db, /* Database handle. Used for memory allocation */ - ExprList *pList, /* List to which to append. Might be NULL */ - Expr *pExpr /* Expression to be appended. Might be NULL */ -){ - struct ExprList_item *pItem; - ExprList *pNew; - pList->nAlloc *= 2; - pNew = sqlite3DbRealloc(db, pList, - sizeof(*pList)+(pList->nAlloc-1)*sizeof(pList->a[0])); - if( pNew==0 ){ - sqlite3ExprListDelete(db, pList); - sqlite3ExprDelete(db, pExpr); - return 0; - }else{ - pList = pNew; - } - pItem = &pList->a[pList->nExpr++]; - *pItem = zeroItem; - pItem->pExpr = pExpr; - return pList; -} ExprList *sqlite3ExprListAppend( Parse *pParse, /* Parsing context */ ExprList *pList, /* List to which to append. Might be NULL */ Expr *pExpr /* Expression to be appended. Might be NULL */ ){ struct ExprList_item *pItem; + sqlite3 *db = pParse->db; + assert( db!=0 ); if( pList==0 ){ - return sqlite3ExprListAppendNew(pParse->db,pExpr); - } - if( pList->nAllocnExpr+1 ){ - return sqlite3ExprListAppendGrow(pParse->db,pList,pExpr); + pList = sqlite3DbMallocRawNN(db, sizeof(ExprList) ); + if( pList==0 ){ + goto no_mem; + } + pList->nExpr = 0; + }else if( (pList->nExpr & (pList->nExpr-1))==0 ){ + ExprList *pNew; + pNew = sqlite3DbRealloc(db, pList, + sizeof(*pList)+(2*(sqlite3_int64)pList->nExpr-1)*sizeof(pList->a[0])); + if( pNew==0 ){ + goto no_mem; + } + pList = pNew; } pItem = &pList->a[pList->nExpr++]; - *pItem = zeroItem; + assert( offsetof(struct ExprList_item,zEName)==sizeof(pItem->pExpr) ); + assert( offsetof(struct ExprList_item,pExpr)==0 ); + memset(&pItem->zEName,0,sizeof(*pItem)-offsetof(struct ExprList_item,zEName)); pItem->pExpr = pExpr; return pList; + +no_mem: + /* Avoid leaking memory if malloc has failed. */ + sqlite3ExprDelete(db, pExpr); + sqlite3ExprListDelete(db, pList); + return 0; } /* @@ -4080,9 +4046,8 @@ }else{ r1 = sqlite3ExprCodeTemp(pParse, pLeft, ®Free1); r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); - sqlite3VdbeAddOp2(v, OP_Integer, 1, inReg); - codeCompare(pParse, pLeft, pExpr->pRight, op, r1, r2, - sqlite3VdbeCurrentAddr(v)+2, p5, + codeCompare(pParse, pLeft, pExpr->pRight, op, + r1, r2, inReg, SQLITE_STOREP2 | p5, ExprHasProperty(pExpr,EP_Commuted)); assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); assert(TK_LE==OP_Le); testcase(op==OP_Le); VdbeCoverageIf(v,op==OP_Le); @@ -4090,11 +4055,6 @@ assert(TK_GE==OP_Ge); testcase(op==OP_Ge); VdbeCoverageIf(v,op==OP_Ge); assert(TK_EQ==OP_Eq); testcase(op==OP_Eq); VdbeCoverageIf(v,op==OP_Eq); assert(TK_NE==OP_Ne); testcase(op==OP_Ne); VdbeCoverageIf(v,op==OP_Ne); - if( p5==SQLITE_NULLEQ ){ - sqlite3VdbeAddOp2(v, OP_Integer, 0, inReg); - }else{ - sqlite3VdbeAddOp3(v, OP_ZeroOrNull, r1, inReg, r2); - } testcase( regFree1==0 ); testcase( regFree2==0 ); } diff -Nru sqlite3-3.35.0/src/global.c sqlite3-3.35.0-1/src/global.c --- sqlite3-3.35.0/src/global.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/global.c 2021-04-04 17:23:21.000000000 +0000 @@ -37,7 +37,7 @@ 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215, 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233, 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251, - 252,253,254,255, + 252,253,254,255 #endif #ifdef SQLITE_EBCDIC 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 0x */ @@ -57,35 +57,7 @@ 224,225,162,163,164,165,166,167,168,169,234,235,236,237,238,239, /* Ex */ 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, /* Fx */ #endif -/* All of the upper-to-lower conversion data is above. The following -** 18 integers are completely unrelated. They are appended to the -** sqlite3UpperToLower[] array to avoid UBSAN warnings. Here's what is -** going on: -** -** The SQL comparison operators (<>, =, >, <=, <, and >=) are implemented -** by invoking sqlite3MemCompare(A,B) which compares values A and B and -** returns negative, zero, or positive if A is less then, equal to, or -** greater than B, respectively. Then the true false results is found by -** consulting sqlite3aLTb[opcode], sqlite3aEQb[opcode], or -** sqlite3aGTb[opcode] depending on whether the result of compare(A,B) -** is negative, zero, or positive, where opcode is the specific opcode. -** The only works because the comparison opcodes are consecutive and in -** this order: NE EQ GT LE LT GE. Various assert()s throughout the code -** ensure that is the case. -** -** These elements must be appended to another array. Otherwise the -** index (here shown as [256-OP_Ne]) would be out-of-bounds and thus -** be undefined behavior. That's goofy, but the C-standards people thought -** it was a good idea, so here we are. -*/ -/* NE EQ GT LE LT GE */ - 1, 0, 0, 1, 1, 0, /* aLTb[]: Use when compare(A,B) less than zero */ - 0, 1, 0, 1, 0, 1, /* aEQb[]: Use when compare(A,B) equals zero */ - 1, 0, 1, 0, 0, 1 /* aGTb[]: Use when compare(A,B) greater than zero*/ }; -const unsigned char *sqlite3aLTb = &sqlite3UpperToLower[256-OP_Ne]; -const unsigned char *sqlite3aEQb = &sqlite3UpperToLower[256+6-OP_Ne]; -const unsigned char *sqlite3aGTb = &sqlite3UpperToLower[256+12-OP_Ne]; /* ** The following 256 byte lookup table is used to support SQLites built-in diff -Nru sqlite3-3.35.0/src/insert.c sqlite3-3.35.0-1/src/insert.c --- sqlite3-3.35.0/src/insert.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/insert.c 2021-04-04 17:23:21.000000000 +0000 @@ -817,7 +817,7 @@ bIdListInOrder = 0; }else{ sqlite3ErrorMsg(pParse, "table %S has no column named %s", - pTabList->a, pColumn->a[i].zName); + pTabList, 0, pColumn->a[i].zName); pParse->checkSchema = 1; goto insert_cleanup; } @@ -945,7 +945,7 @@ if( nColumn!=(pTab->nCol-nHidden) ){ sqlite3ErrorMsg(pParse, "table %S has %d columns but %d values were supplied", - pTabList->a, pTab->nCol-nHidden, nColumn); + pTabList, 0, pTab->nCol-nHidden, nColumn); goto insert_cleanup; } } diff -Nru sqlite3-3.35.0/src/os_unix.c sqlite3-3.35.0-1/src/os_unix.c --- sqlite3-3.35.0/src/os_unix.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/os_unix.c 2021-04-04 17:23:21.000000000 +0000 @@ -3951,7 +3951,6 @@ /* Forward declaration */ static int unixGetTempname(int nBuf, char *zBuf); -static int unixFcntlExternalReader(unixFile*, int*); /* ** Information and control of an open file handle. @@ -4068,10 +4067,6 @@ return proxyFileControl(id,op,pArg); } #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */ - - case SQLITE_FCNTL_EXTERNAL_READER: { - return unixFcntlExternalReader((unixFile*)id, (int*)pArg); - } } return SQLITE_NOTFOUND; } @@ -4318,40 +4313,6 @@ #define UNIX_SHM_DMS (UNIX_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ /* -** Use F_GETLK to check whether or not there are any readers with open -** wal-mode transactions in other processes on database file pFile. If -** no error occurs, return SQLITE_OK and set (*piOut) to 1 if there are -** such transactions, or 0 otherwise. If an error occurs, return an -** SQLite error code. The final value of *piOut is undefined in this -** case. -*/ -static int unixFcntlExternalReader(unixFile *pFile, int *piOut){ - int rc = SQLITE_OK; - *piOut = 0; - if( pFile->pShm){ - unixShmNode *pShmNode = pFile->pShm->pShmNode; - struct flock f; - - memset(&f, 0, sizeof(f)); - f.l_type = F_WRLCK; - f.l_whence = SEEK_SET; - f.l_start = UNIX_SHM_BASE + 3; - f.l_len = SQLITE_SHM_NLOCK - 3; - - sqlite3_mutex_enter(pShmNode->pShmMutex); - if( osFcntl(pShmNode->hShm, F_GETLK, &f)<0 ){ - rc = SQLITE_IOERR_LOCK; - }else{ - *piOut = (f.l_type!=F_UNLCK); - } - sqlite3_mutex_leave(pShmNode->pShmMutex); - } - - return rc; -} - - -/* ** Apply posix advisory locks for all bytes from ofst through ofst+n-1. ** ** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking diff -Nru sqlite3-3.35.0/src/printf.c sqlite3-3.35.0-1/src/printf.c --- sqlite3-3.35.0/src/printf.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/printf.c 2021-04-04 17:23:21.000000000 +0000 @@ -29,7 +29,7 @@ #define etSQLESCAPE2 10 /* Strings with '\'' doubled and enclosed in '', NULL pointers replaced by SQL NULL. %Q */ #define etTOKEN 11 /* a pointer to a Token structure */ -#define etSRCITEM 12 /* a pointer to a SrcItem */ +#define etSRCLIST 12 /* a pointer to a SrcList */ #define etPOINTER 13 /* The %p conversion */ #define etSQLESCAPE3 14 /* %w -> Strings with '\"' doubled */ #define etORDINAL 15 /* %r -> 1st, 2nd, 3rd, 4th, etc. English only */ @@ -95,16 +95,10 @@ /* All the rest are undocumented and are for internal use only */ { 'T', 0, 0, etTOKEN, 0, 0 }, - { 'S', 0, 0, etSRCITEM, 0, 0 }, + { 'S', 0, 0, etSRCLIST, 0, 0 }, { 'r', 10, 1, etORDINAL, 0, 0 }, }; -/* Notes: -** -** %S Takes a pointer to SrcItem. Shows name or database.name -** %!S Like %S but prefer the zName over the zAlias -*/ - /* Floating point constants used for rounding */ static const double arRound[] = { 5.0e-01, 5.0e-02, 5.0e-03, 5.0e-04, 5.0e-05, @@ -859,24 +853,21 @@ length = width = 0; break; } - case etSRCITEM: { + case etSRCLIST: { + SrcList *pSrc; + int k; SrcItem *pItem; if( (pAccum->printfFlags & SQLITE_PRINTF_INTERNAL)==0 ) return; - pItem = va_arg(ap, SrcItem*); + pSrc = va_arg(ap, SrcList*); + k = va_arg(ap, int); + pItem = &pSrc->a[k]; assert( bArgList==0 ); - if( pItem->zAlias && !flag_altform2 ){ - sqlite3_str_appendall(pAccum, pItem->zAlias); - }else if( pItem->zName ){ - if( pItem->zDatabase ){ - sqlite3_str_appendall(pAccum, pItem->zDatabase); - sqlite3_str_append(pAccum, ".", 1); - } - sqlite3_str_appendall(pAccum, pItem->zName); - }else if( pItem->zAlias ){ - sqlite3_str_appendall(pAccum, pItem->zAlias); - }else if( ALWAYS(pItem->pSelect) ){ - sqlite3_str_appendf(pAccum, "SUBQUERY %u", pItem->pSelect->selId); + assert( k>=0 && knSrc ); + if( pItem->zDatabase ){ + sqlite3_str_appendall(pAccum, pItem->zDatabase); + sqlite3_str_append(pAccum, ".", 1); } + sqlite3_str_appendall(pAccum, pItem->zName); length = width = 0; break; } diff -Nru sqlite3-3.35.0/src/resolve.c sqlite3-3.35.0-1/src/resolve.c --- sqlite3-3.35.0/src/resolve.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/resolve.c 2021-04-04 17:23:21.000000000 +0000 @@ -563,6 +563,7 @@ assert( pExpr->op==TK_ID ); if( ExprHasProperty(pExpr,EP_DblQuoted) && areDoubleQuotedStringsEnabled(db, pTopNC) + && (db->init.bDropColumn==0 || sqlite3StrICmp(zCol, db->init.azInit[0])!=0) ){ /* If a double-quoted identifier does not match any known column name, ** then treat it as a string. @@ -577,6 +578,11 @@ ** Someday, I hope to get rid of this hack. Unfortunately there is ** a huge amount of legacy SQL that uses it. So for now, we just ** issue a warning. + ** + ** 2021-03-15: ticket 1c24a659e6d7f3a1 + ** Do not do the ID-to-STRING conversion when doing the schema + ** sanity check following a DROP COLUMN if the identifer name matches + ** the name of the column being dropped. */ sqlite3_log(SQLITE_WARNING, "double-quoted string literal: \"%w\"", zCol); diff -Nru sqlite3-3.35.0/src/select.c sqlite3-3.35.0-1/src/select.c --- sqlite3-3.35.0/src/select.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/select.c 2021-04-04 17:23:21.000000000 +0000 @@ -741,155 +741,31 @@ } /* -** Add code that will check to make sure the array of registers starting at -** iMem form a distinct entry. This is used by both "SELECT DISTINCT ..." and -** distinct aggregates ("SELECT count(DISTINCT ) ..."). Three strategies -** are available. Which is used depends on the value of parameter eTnctType, -** as follows: -** -** WHERE_DISTINCT_UNORDERED/WHERE_DISTINCT_NOOP: -** Build an ephemeral table that contains all entries seen before and -** skip entries which have been seen before. -** -** Parameter iTab is the cursor number of an ephemeral table that must -** be opened before the VM code generated by this routine is executed. -** The ephemeral cursor table is queried for a record identical to the -** record formed by the current array of registers. If one is found, -** jump to VM address addrRepeat. Otherwise, insert a new record into -** the ephemeral cursor and proceed. -** -** The returned value in this case is a copy of parameter iTab. -** -** WHERE_DISTINCT_ORDERED: -** In this case rows are being delivered sorted order. The ephermal -** table is not required. Instead, the current set of values -** is compared against previous row. If they match, the new row -** is not distinct and control jumps to VM address addrRepeat. Otherwise, -** the VM program proceeds with processing the new row. -** -** The returned value in this case is the register number of the first -** in an array of registers used to store the previous result row so that -** it can be compared to the next. The caller must ensure that this -** register is initialized to NULL. (The fixDistinctOpenEph() routine -** will take care of this initialization.) -** -** WHERE_DISTINCT_UNIQUE: -** In this case it has already been determined that the rows are distinct. -** No special action is required. The return value is zero. -** -** Parameter pEList is the list of expressions used to generated the -** contents of each row. It is used by this routine to determine (a) -** how many elements there are in the array of registers and (b) the -** collation sequences that should be used for the comparisons if -** eTnctType is WHERE_DISTINCT_ORDERED. +** Add code that will check to make sure the N registers starting at iMem +** form a distinct entry. iTab is a sorting index that holds previously +** seen combinations of the N values. A new entry is made in iTab +** if the current N values are new. +** +** A jump to addrRepeat is made and the N+1 values are popped from the +** stack if the top N elements are not distinct. */ -static int codeDistinct( +static void codeDistinct( Parse *pParse, /* Parsing and code generating context */ - int eTnctType, /* WHERE_DISTINCT_* value */ int iTab, /* A sorting index used to test for distinctness */ int addrRepeat, /* Jump to here if not distinct */ - ExprList *pEList, /* Expression for each element */ - int regElem /* First element */ + int N, /* Number of elements */ + int iMem /* First element */ ){ - int iRet = 0; - int nResultCol = pEList->nExpr; - Vdbe *v = pParse->pVdbe; - - switch( eTnctType ){ - case WHERE_DISTINCT_ORDERED: { - int i; - int iJump; /* Jump destination */ - int regPrev; /* Previous row content */ - - /* Allocate space for the previous row */ - iRet = regPrev = pParse->nMem+1; - pParse->nMem += nResultCol; - - iJump = sqlite3VdbeCurrentAddr(v) + nResultCol; - for(i=0; ia[i].pExpr); - if( idb->mallocFailed ); - sqlite3VdbeAddOp3(v, OP_Copy, regElem, regPrev, nResultCol-1); - break; - } - - case WHERE_DISTINCT_UNIQUE: { - /* nothing to do */ - break; - } - - default: { - int r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, regElem, nResultCol); - VdbeCoverage(v); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regElem, nResultCol, r1); - sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r1, regElem, nResultCol); - sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); - sqlite3ReleaseTempReg(pParse, r1); - iRet = iTab; - break; - } - } - - return iRet; -} + Vdbe *v; + int r1; -/* -** This routine runs after codeDistinct(). It makes necessary -** adjustments to the OP_OpenEphemeral opcode that the codeDistinct() -** routine made use of. This processing must be done separately since -** sometimes codeDistinct is called before the OP_OpenEphemeral is actually -** laid down. -** -** WHERE_DISTINCT_NOOP: -** WHERE_DISTINCT_UNORDERED: -** -** No adjustments necessary. This function is a no-op. -** -** WHERE_DISTINCT_UNIQUE: -** -** The ephemeral table is not needed. So change the -** OP_OpenEphemeral opcode into an OP_Noop. -** -** WHERE_DISTINCT_ORDERED: -** -** The ephemeral table is not needed. But we do need register -** iVal to be initialized to NULL. So change the OP_OpenEphemeral -** into an OP_Null on the iVal register. -*/ -static void fixDistinctOpenEph( - Parse *pParse, /* Parsing and code generating context */ - int eTnctType, /* WHERE_DISTINCT_* value */ - int iVal, /* Value returned by codeDistinct() */ - int iOpenEphAddr /* Address of OP_OpenEphemeral instruction for iTab */ -){ - if( eTnctType==WHERE_DISTINCT_UNIQUE || eTnctType==WHERE_DISTINCT_ORDERED ){ - Vdbe *v = pParse->pVdbe; - sqlite3VdbeChangeToNoop(v, iOpenEphAddr); - if( sqlite3VdbeGetOp(v, iOpenEphAddr+1)->opcode==OP_Explain ){ - sqlite3VdbeChangeToNoop(v, iOpenEphAddr+1); - } - if( eTnctType==WHERE_DISTINCT_ORDERED ){ - /* Change the OP_OpenEphemeral to an OP_Null that sets the MEM_Cleared - ** bit on the first register of the previous value. This will cause the - ** OP_Ne added in codeDistinct() to always fail on the first iteration of - ** the loop even if the first row is all NULLs. */ - VdbeOp *pOp = sqlite3VdbeGetOp(v, iOpenEphAddr); - pOp->opcode = OP_Null; - pOp->p1 = 1; - pOp->p2 = iVal; - } - } + v = pParse->pVdbe; + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N); VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r1, iMem, N); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + sqlite3ReleaseTempReg(pParse, r1); } #ifdef SQLITE_ENABLE_SORTER_REFERENCES @@ -1137,11 +1013,59 @@ ** part of the result. */ if( hasDistinct ){ - int eType = pDistinct->eTnctType; - int iTab = pDistinct->tabTnct; - assert( nResultCol==p->pEList->nExpr ); - iTab = codeDistinct(pParse, eType, iTab, iContinue, p->pEList, regResult); - fixDistinctOpenEph(pParse, eType, iTab, pDistinct->addrTnct); + switch( pDistinct->eTnctType ){ + case WHERE_DISTINCT_ORDERED: { + VdbeOp *pOp; /* No longer required OpenEphemeral instr. */ + int iJump; /* Jump destination */ + int regPrev; /* Previous row content */ + + /* Allocate space for the previous row */ + regPrev = pParse->nMem+1; + pParse->nMem += nResultCol; + + /* Change the OP_OpenEphemeral coded earlier to an OP_Null + ** sets the MEM_Cleared bit on the first register of the + ** previous value. This will cause the OP_Ne below to always + ** fail on the first iteration of the loop even if the first + ** row is all NULLs. + */ + sqlite3VdbeChangeToNoop(v, pDistinct->addrTnct); + pOp = sqlite3VdbeGetOp(v, pDistinct->addrTnct); + pOp->opcode = OP_Null; + pOp->p1 = 1; + pOp->p2 = regPrev; + pOp = 0; /* Ensure pOp is not used after sqlite3VdbeAddOp() */ + + iJump = sqlite3VdbeCurrentAddr(v) + nResultCol; + for(i=0; ipEList->a[i].pExpr); + if( idb->mallocFailed ); + sqlite3VdbeAddOp3(v, OP_Copy, regResult, regPrev, nResultCol-1); + break; + } + + case WHERE_DISTINCT_UNIQUE: { + sqlite3VdbeChangeToNoop(v, pDistinct->addrTnct); + break; + } + + default: { + assert( pDistinct->eTnctType==WHERE_DISTINCT_UNORDERED ); + codeDistinct(pParse, pDistinct->tabTnct, iContinue, nResultCol, + regResult); + break; + } + } if( pSort==0 ){ codeOffset(v, p->iOffset, iContinue); } @@ -5721,10 +5645,8 @@ pFunc->iDistinct = -1; }else{ KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pE->x.pList,0,0); - pFunc->iDistAddr = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, - pFunc->iDistinct, 0, 0, (char*)pKeyInfo, P4_KEYINFO); - ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(DISTINCT)", - pFunc->pFunc->zName)); + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0, + (char*)pKeyInfo, P4_KEYINFO); } } } @@ -5756,12 +5678,7 @@ ** registers if register regAcc contains 0. The caller will take care ** of setting and clearing regAcc. */ -static void updateAccumulator( - Parse *pParse, - int regAcc, - AggInfo *pAggInfo, - int eDistinctType -){ +static void updateAccumulator(Parse *pParse, int regAcc, AggInfo *pAggInfo){ Vdbe *v = pParse->pVdbe; int i; int regHit = 0; @@ -5807,12 +5724,13 @@ nArg = 0; regAgg = 0; } - if( pF->iDistinct>=0 && pList ){ + if( pF->iDistinct>=0 ){ if( addrNext==0 ){ addrNext = sqlite3VdbeMakeLabel(pParse); } - pF->iDistinct = codeDistinct(pParse, eDistinctType, - pF->iDistinct, addrNext, pList, regAgg); + testcase( nArg==0 ); /* Error condition */ + testcase( nArg>1 ); /* Also an error */ + codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg); } if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ CollSeq *pColl = 0; @@ -5864,7 +5782,7 @@ ){ if( pParse->explain==2 ){ int bCover = (pIdx!=0 && (HasRowid(pTab) || !IsPrimaryKeyIndex(pIdx))); - sqlite3VdbeExplain(pParse, 0, "SCAN %s%s%s", + sqlite3VdbeExplain(pParse, 0, "SCAN TABLE %s%s%s", pTab->zName, bCover ? " USING COVERING INDEX " : "", bCover ? pIdx->zName : "" @@ -6437,10 +6355,10 @@ pItem->regReturn = ++pParse->nMem; sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop); - VdbeComment((v, "%!S", pItem)); + VdbeComment((v, "%s", pItem->pTab->zName)); pItem->addrFillSub = addrTop; sqlite3SelectDestInit(&dest, SRT_Coroutine, pItem->regReturn); - ExplainQueryPlan((pParse, 1, "CO-ROUTINE %!S", pItem)); + ExplainQueryPlan((pParse, 1, "CO-ROUTINE %u", pSub->selId)); sqlite3Select(pParse, pSub, &dest); pItem->pTab->nRowLogEst = pSub->nSelectRow; pItem->fg.viaCoroutine = 1; @@ -6484,17 +6402,17 @@ ** a trigger, then we only need to compute the value of the subquery ** once. */ onceAddr = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); - VdbeComment((v, "materialize %!S", pItem)); + VdbeComment((v, "materialize \"%s\"", pItem->pTab->zName)); }else{ - VdbeNoopComment((v, "materialize %!S", pItem)); + VdbeNoopComment((v, "materialize \"%s\"", pItem->pTab->zName)); } sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); - ExplainQueryPlan((pParse, 1, "MATERIALIZE %!S", pItem)); + ExplainQueryPlan((pParse, 1, "MATERIALIZE %u", pSub->selId)); sqlite3Select(pParse, pSub, &dest); pItem->pTab->nRowLogEst = pSub->nSelectRow; if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr); retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn); - VdbeComment((v, "end %!S", pItem)); + VdbeComment((v, "end %s", pItem->pTab->zName)); sqlite3VdbeChangeP1(v, topAddr, retAddr); sqlite3ClearTempRegCache(pParse); if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){ @@ -6844,20 +6762,6 @@ int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */ int addrReset; /* Subroutine for resetting the accumulator */ int regReset; /* Return address register for reset subroutine */ - ExprList *pDistinct = 0; - u16 distFlag = 0; - int eDist = WHERE_DISTINCT_NOOP; - - if( pAggInfo->nFunc==1 - && pAggInfo->aFunc[0].iDistinct>=0 - && pAggInfo->aFunc[0].pFExpr->x.pList - ){ - Expr *pExpr = pAggInfo->aFunc[0].pFExpr->x.pList->a[0].pExpr; - pExpr = sqlite3ExprDup(db, pExpr, 0); - pDistinct = sqlite3ExprListDup(db, pGroupBy, 0); - pDistinct = sqlite3ExprListAppend(pParse, pDistinct, pExpr); - distFlag = pDistinct ? WHERE_WANT_DISTINCT : 0; - } /* If there is a GROUP BY clause we might need a sorting index to ** implement it. Allocate that sorting index now. If it turns out @@ -6894,12 +6798,10 @@ */ sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); SELECTTRACE(1,pParse,p,("WhereBegin\n")); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct, - WHERE_GROUPBY | (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0 + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, 0, + WHERE_GROUPBY | (orderByGrp ? WHERE_SORTBYGROUP : 0), 0 ); - sqlite3ExprListDelete(db, pDistinct); if( pWInfo==0 ) goto select_end; - eDist = sqlite3WhereIsDistinct(pWInfo); SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){ /* The optimizer is able to deliver rows in group by order so @@ -7017,7 +6919,7 @@ ** the current row */ sqlite3VdbeJumpHere(v, addr1); - updateAccumulator(pParse, iUseFlag, pAggInfo, eDist); + updateAccumulator(pParse, iUseFlag, pAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); VdbeComment((v, "indicate data in accumulator")); @@ -7073,11 +6975,7 @@ sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp1(v, OP_Return, regReset); - - if( eDist!=WHERE_DISTINCT_NOOP ){ - struct AggInfo_func *pF = &pAggInfo->aFunc[0]; - fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr); - } + } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ else { Table *pTab; @@ -7141,9 +7039,6 @@ explainSimpleCount(pParse, pTab, pBest); }else{ int regAcc = 0; /* "populate accumulators" flag */ - ExprList *pDistinct = 0; - u16 distFlag = 0; - int eDist; /* If there are accumulator registers but no min() or max() functions ** without FILTER clauses, allocate register regAcc. Register regAcc @@ -7167,9 +7062,6 @@ regAcc = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); } - }else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){ - pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList; - distFlag = pDistinct ? WHERE_WANT_DISTINCT : 0; } /* This case runs if the aggregate has no GROUP BY clause. The @@ -7189,18 +7081,12 @@ SELECTTRACE(1,pParse,p,("WhereBegin\n")); pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy, - pDistinct, minMaxFlag|distFlag, 0); + 0, minMaxFlag, 0); if( pWInfo==0 ){ goto select_end; } SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); - eDist = sqlite3WhereIsDistinct(pWInfo); - updateAccumulator(pParse, regAcc, pAggInfo, eDist); - if( eDist!=WHERE_DISTINCT_NOOP ){ - struct AggInfo_func *pF = &pAggInfo->aFunc[0]; - fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr); - } - + updateAccumulator(pParse, regAcc, pAggInfo); if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); if( minMaxFlag ){ sqlite3WhereMinMaxOptEarlyOut(v, pWInfo); diff -Nru sqlite3-3.35.0/src/shell.c.in sqlite3-3.35.0-1/src/shell.c.in --- sqlite3-3.35.0/src/shell.c.in 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/shell.c.in 2021-04-04 17:23:21.000000000 +0000 @@ -5779,7 +5779,7 @@ " || fkey_collate_clause(" " f.[table], COALESCE(f.[to], p.[name]), s.name, f.[from]),' AND ')" ", " - " 'SEARCH ' || s.name || ' USING COVERING INDEX*('" + " 'SEARCH TABLE ' || s.name || ' USING COVERING INDEX*('" " || group_concat('*=?', ' AND ') || ')'" ", " " s.name || '(' || group_concat(f.[from], ', ') || ')'" @@ -5799,7 +5799,7 @@ "GROUP BY s.name, f.id " "ORDER BY (CASE WHEN ? THEN f.[table] ELSE s.name END)" ; - const char *zGlobIPK = "SEARCH * USING INTEGER PRIMARY KEY (rowid=?)"; + const char *zGlobIPK = "SEARCH TABLE * USING INTEGER PRIMARY KEY (rowid=?)"; for(i=2; i -** -**

  • [[SQLITE_FCNTL_EXTERNAL_READER]] -** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect -** whether or not there is a database client in another process with a wal-mode -** transaction open on the database or not. It is only available on unix.The -** (void*) argument passed with this file-control should be a pointer to a -** value of type (int). The integer value is set to 1 if the database is a wal -** mode database and there exists at least one client in another process that -** currently has an SQL transaction open on the database. It is set to 0 if -** the database is not a wal-mode db, or if there is no such connection in any -** other process. This opcode cannot be used to detect transactions opened -** by clients within the current process, only within other processes. -** */ #define SQLITE_FCNTL_LOCKSTATE 1 #define SQLITE_FCNTL_GET_LOCKPROXYFILE 2 @@ -1181,8 +1168,6 @@ #define SQLITE_FCNTL_RESERVE_BYTES 38 #define SQLITE_FCNTL_CKPT_START 39 -#define SQLITE_FCNTL_EXTERNAL_READER 40 - /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE #define SQLITE_SET_LOCKPROXYFILE SQLITE_FCNTL_SET_LOCKPROXYFILE diff -Nru sqlite3-3.35.0/src/sqliteInt.h sqlite3-3.35.0-1/src/sqliteInt.h --- sqlite3-3.35.0/src/sqliteInt.h 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/sqliteInt.h 2021-04-04 17:23:21.000000000 +0000 @@ -1533,7 +1533,10 @@ unsigned orphanTrigger : 1; /* Last statement is orphaned TEMP trigger */ unsigned imposterTable : 1; /* Building an imposter table */ unsigned reopenMemdb : 1; /* ATTACH is really a reopen using MemDB */ + unsigned bDropColumn : 1; /* Doing schema check after DROP COLUMN */ char **azInit; /* "type", "name", and "tbl_name" columns */ + /* or if bDropColumn, then azInit[0] is the */ + /* name of the column being dropped */ } init; int nVdbeActive; /* Number of VDBEs currently running */ int nVdbeRead; /* Number of active VDBEs that read or write */ @@ -2104,7 +2107,9 @@ ** operator is NULL. It is added to certain comparison operators to ** prove that the operands are always NOT NULL. */ +#define SQLITE_KEEPNULL 0x08 /* Used by vector == or <> */ #define SQLITE_JUMPIFNULL 0x10 /* jumps if either operand is NULL */ +#define SQLITE_STOREP2 0x20 /* Store result in reg[P2] rather than jump */ #define SQLITE_NULLEQ 0x80 /* NULL=NULL */ #define SQLITE_NOTNULL 0x90 /* Assert that operands are never NULL */ @@ -2601,7 +2606,6 @@ FuncDef *pFunc; /* The aggregate function implementation */ int iMem; /* Memory location that acts as accumulator */ int iDistinct; /* Ephemeral table used to enforce DISTINCT */ - int iDistAddr; /* Address of OP_OpenEphemeral */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ u32 selId; /* Select to which this AggInfo belongs */ @@ -2874,7 +2878,6 @@ */ struct ExprList { int nExpr; /* Number of expressions on the list */ - int nAlloc; /* Number of a[] slots allocated */ struct ExprList_item { /* For each expression in the list */ Expr *pExpr; /* The parse tree for this expression */ char *zEName; /* Token associated with this expression */ @@ -4738,9 +4741,6 @@ extern const unsigned char sqlite3OpcodeProperty[]; extern const char sqlite3StrBINARY[]; extern const unsigned char sqlite3UpperToLower[]; -extern const unsigned char *sqlite3aLTb; -extern const unsigned char *sqlite3aEQb; -extern const unsigned char *sqlite3aGTb; extern const unsigned char sqlite3CtypeMap[]; extern SQLITE_WSD struct Sqlite3Config sqlite3Config; extern FuncDefHash sqlite3BuiltinFunctions; diff -Nru sqlite3-3.35.0/src/test1.c sqlite3-3.35.0-1/src/test1.c --- sqlite3-3.35.0/src/test1.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/test1.c 2021-04-04 17:23:21.000000000 +0000 @@ -3825,11 +3825,9 @@ ){ sqlite3_stmt *pStmt; int idx; - int trueLength = 0; int bytes; char *value; int rc; - char *toFree = 0; if( objc!=5 ){ Tcl_AppendResult(interp, "wrong # args: should be \"", @@ -3839,23 +3837,13 @@ if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR; if( Tcl_GetIntFromObj(interp, objv[2], &idx) ) return TCL_ERROR; - value = (char*)Tcl_GetByteArrayFromObj(objv[3], &trueLength); + value = (char*)Tcl_GetByteArrayFromObj(objv[3], &bytes); if( Tcl_GetIntFromObj(interp, objv[4], &bytes) ) return TCL_ERROR; - if( bytes<0 ){ - toFree = malloc( trueLength + 1 ); - if( toFree==0 ){ - Tcl_AppendResult(interp, "out of memory", (void*)0); - return TCL_ERROR; - } - memcpy(toFree, value, trueLength); - toFree[trueLength] = 0; - value = toFree; - } + rc = sqlite3_bind_text(pStmt, idx, value, bytes, SQLITE_TRANSIENT); - free(toFree); if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR; if( rc!=SQLITE_OK ){ - Tcl_AppendResult(interp, sqlite3ErrName(rc), (void*)0); + Tcl_AppendResult(interp, sqlite3ErrName(rc), 0); return TCL_ERROR; } @@ -3881,9 +3869,7 @@ int idx; int bytes; char *value; - char *toFree = 0; int rc; - int trueLength = 0; void (*xDel)(void*) = (objc==6?SQLITE_STATIC:SQLITE_TRANSIENT); Tcl_Obj *oStmt = objv[objc-4]; @@ -3899,20 +3885,10 @@ if( getStmtPointer(interp, Tcl_GetString(oStmt), &pStmt) ) return TCL_ERROR; if( Tcl_GetIntFromObj(interp, oN, &idx) ) return TCL_ERROR; - value = (char*)Tcl_GetByteArrayFromObj(oString, &trueLength); + value = (char*)Tcl_GetByteArrayFromObj(oString, 0); if( Tcl_GetIntFromObj(interp, oBytes, &bytes) ) return TCL_ERROR; - if( bytes<0 && xDel==SQLITE_TRANSIENT ){ - toFree = malloc( trueLength + 3 ); - if( toFree==0 ){ - Tcl_AppendResult(interp, "out of memory", (void*)0); - return TCL_ERROR; - } - memcpy(toFree, value, trueLength); - memset(toFree+trueLength, 0, 3); - value = toFree; - } + rc = sqlite3_bind_text16(pStmt, idx, (void *)value, bytes, xDel); - free(toFree); if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR; if( rc!=SQLITE_OK ){ Tcl_AppendResult(interp, sqlite3ErrName(rc), 0); @@ -6514,42 +6490,6 @@ return TCL_OK; } -/* -** tclcmd: file_control_external_reader DB ?AUXDB? -** -** Return a string that is a temporary filename -*/ -static int SQLITE_TCLAPI file_control_external_reader( - ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ - Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ - int objc, /* Number of arguments */ - Tcl_Obj *CONST objv[] /* Command arguments */ -){ - sqlite3 *db; - const char *zName = "main"; - int iRes = 0; - int rc = SQLITE_OK; - - if( objc!=2 && objc!=3 ){ - Tcl_AppendResult(interp, "wrong # args: should be \"", - Tcl_GetStringFromObj(objv[0], 0), " DB ?AUXDB?", 0); - return TCL_ERROR; - } - if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ - return TCL_ERROR; - } - if( objc==3 ){ - zName = Tcl_GetString(objv[2]); - } - rc = sqlite3_file_control(db, zName, SQLITE_FCNTL_EXTERNAL_READER, &iRes); - if( rc!=SQLITE_OK ){ - Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); - return TCL_ERROR; - } - Tcl_SetObjResult(interp, Tcl_NewIntObj(iRes)); - return TCL_OK; -} - /* ** tclcmd: sqlite3_vfs_list @@ -8488,7 +8428,6 @@ { "file_control_vfsname", file_control_vfsname, 0 }, { "file_control_reservebytes", file_control_reservebytes, 0 }, { "file_control_tempfilename", file_control_tempfilename, 0 }, - { "file_control_external_reader", file_control_external_reader, 0 }, { "sqlite3_vfs_list", vfs_list, 0 }, { "sqlite3_create_function_v2", test_create_function_v2, 0 }, diff -Nru sqlite3-3.35.0/src/treeview.c sqlite3-3.35.0-1/src/treeview.c --- sqlite3-3.35.0/src/treeview.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/treeview.c 2021-04-04 17:23:21.000000000 +0000 @@ -134,11 +134,19 @@ StrAccum x; char zLine[100]; sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); - sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem); + sqlite3_str_appendf(&x, "{%d:*}", pItem->iCursor); + if( pItem->zDatabase ){ + sqlite3_str_appendf(&x, " %s.%s", pItem->zDatabase, pItem->zName); + }else if( pItem->zName ){ + sqlite3_str_appendf(&x, " %s", pItem->zName); + } if( pItem->pTab ){ sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx", pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab, pItem->colUsed); } + if( pItem->zAlias ){ + sqlite3_str_appendf(&x, " (AS %s)", pItem->zAlias); + } if( pItem->fg.jointype & JT_LEFT ){ sqlite3_str_appendf(&x, " LEFT-JOIN"); } diff -Nru sqlite3-3.35.0/src/trigger.c sqlite3-3.35.0-1/src/trigger.c --- sqlite3-3.35.0/src/trigger.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/trigger.c 2021-04-04 17:23:21.000000000 +0000 @@ -69,7 +69,7 @@ ){ pTrig->pNext = pList; pList = pTrig; - }else if( pTrig->op==TK_RETURNING && pParse->db->pVtabCtx==0 ){ + }else if( pTrig->op==TK_RETURNING ){ assert( pParse->bReturning ); assert( &(pParse->u1.pReturning->retTrig) == pTrig ); pTrig->table = pTab->zName; @@ -209,12 +209,12 @@ */ if( pTab->pSelect && tr_tm!=TK_INSTEAD ){ sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", - (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName->a); + (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0); goto trigger_orphan_error; } if( !pTab->pSelect && tr_tm==TK_INSTEAD ){ sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF" - " trigger on table: %S", pTableName->a); + " trigger on table: %S", pTableName, 0); goto trigger_orphan_error; } @@ -611,7 +611,7 @@ } if( !pTrigger ){ if( !noErr ){ - sqlite3ErrorMsg(pParse, "no such trigger: %S", pName->a); + sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0); }else{ sqlite3CodeVerifyNamedSchema(pParse, zDb); } diff -Nru sqlite3-3.35.0/src/vdbeaux.c sqlite3-3.35.0-1/src/vdbeaux.c --- sqlite3-3.35.0/src/vdbeaux.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/vdbeaux.c 2021-04-04 17:23:21.000000000 +0000 @@ -1487,7 +1487,11 @@ char c; zSynopsis = zOpName += nOpName + 1; if( strncmp(zSynopsis,"IF ",3)==0 ){ - sqlite3_snprintf(sizeof(zAlt), zAlt, "if %s goto P2", zSynopsis+3); + if( pOp->p5 & SQLITE_STOREP2 ){ + sqlite3_snprintf(sizeof(zAlt), zAlt, "r[P2] = (%s)", zSynopsis+3); + }else{ + sqlite3_snprintf(sizeof(zAlt), zAlt, "if %s goto P2", zSynopsis+3); + } zSynopsis = zAlt; } for(ii=0; (c = zSynopsis[ii])!=0; ii++){ diff -Nru sqlite3-3.35.0/src/vdbe.c sqlite3-3.35.0-1/src/vdbe.c --- sqlite3-3.35.0/src/vdbe.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/vdbe.c 2021-04-04 17:23:21.000000000 +0000 @@ -1915,7 +1915,8 @@ ** Synopsis: IF r[P3]==r[P1] ** ** Compare the values in register P1 and P3. If reg(P3)==reg(P1) then -** jump to address P2. +** jump to address P2. Or if the SQLITE_STOREP2 flag is set in P5, then +** store the result of comparison in register P2. ** ** The SQLITE_AFF_MASK portion of P5 must be an affinity character - ** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made @@ -1941,8 +1942,9 @@ ** If neither operand is NULL the result is the same as it would be if ** the SQLITE_NULLEQ flag were omitted from P5. ** -** This opcode saves the result of comparison for use by the new -** OP_Jump opcode. +** If both SQLITE_STOREP2 and SQLITE_KEEPNULL flags are set then the +** content of r[P2] is only changed if the new value is NULL or 0 (false). +** In other words, a prior r[P2] value will not be overwritten by 1 (true). */ /* Opcode: Ne P1 P2 P3 P4 P5 ** Synopsis: IF r[P3]!=r[P1] @@ -1950,12 +1952,17 @@ ** This works just like the Eq opcode except that the jump is taken if ** the operands in registers P1 and P3 are not equal. See the Eq opcode for ** additional information. +** +** If both SQLITE_STOREP2 and SQLITE_KEEPNULL flags are set then the +** content of r[P2] is only changed if the new value is NULL or 1 (true). +** In other words, a prior r[P2] value will not be overwritten by 0 (false). */ /* Opcode: Lt P1 P2 P3 P4 P5 ** Synopsis: IF r[P3]p5 & SQLITE_JUMPIFNULL ){ - goto jump_to_p2; + if( pOp->p5 & SQLITE_STOREP2 ){ + pOut = &aMem[pOp->p2]; + iCompare = 1; /* Operands are not equal */ + memAboutToChange(p, pOut); + MemSetTypeFlag(pOut, MEM_Null); + REGISTER_TRACE(pOp->p2, pOut); + }else{ + VdbeBranchTaken(2,3); + if( pOp->p5 & SQLITE_JUMPIFNULL ){ + goto jump_to_p2; + } } break; } @@ -2100,14 +2111,16 @@ ** order: NE, EQ, GT, LE, LT, GE */ assert( OP_Eq==OP_Ne+1 ); assert( OP_Gt==OP_Ne+2 ); assert( OP_Le==OP_Ne+3 ); assert( OP_Lt==OP_Ne+4 ); assert( OP_Ge==OP_Ne+5 ); - if( res<0 ){ - res2 = sqlite3aLTb[pOp->opcode]; + if( res<0 ){ /* ne, eq, gt, le, lt, ge */ + static const unsigned char aLTb[] = { 1, 0, 0, 1, 1, 0 }; + res2 = aLTb[pOp->opcode - OP_Ne]; }else if( res==0 ){ - res2 = sqlite3aEQb[pOp->opcode]; + static const unsigned char aEQb[] = { 0, 1, 0, 1, 0, 1 }; + res2 = aEQb[pOp->opcode - OP_Ne]; }else{ - res2 = sqlite3aGTb[pOp->opcode]; + static const unsigned char aGTb[] = { 1, 0, 1, 0, 0, 1 }; + res2 = aGTb[pOp->opcode - OP_Ne]; } - iCompare = res; /* Undo any changes made by applyAffinity() to the input registers. */ assert( (pIn3->flags & MEM_Dyn) == (flags3 & MEM_Dyn) ); @@ -2115,39 +2128,67 @@ assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); pIn1->flags = flags1; - VdbeBranchTaken(res2!=0, (pOp->p5 & SQLITE_NULLEQ)?2:3); - if( res2 ){ - goto jump_to_p2; + if( pOp->p5 & SQLITE_STOREP2 ){ + pOut = &aMem[pOp->p2]; + iCompare = res; + if( (pOp->p5 & SQLITE_KEEPNULL)!=0 ){ + /* The KEEPNULL flag prevents OP_Eq from overwriting a NULL with 1 + ** and prevents OP_Ne from overwriting NULL with 0. This flag + ** is only used in contexts where either: + ** (1) op==OP_Eq && (r[P2]==NULL || r[P2]==0) + ** (2) op==OP_Ne && (r[P2]==NULL || r[P2]==1) + ** Therefore it is not necessary to check the content of r[P2] for + ** NULL. */ + assert( pOp->opcode==OP_Ne || pOp->opcode==OP_Eq ); + assert( res2==0 || res2==1 ); + testcase( res2==0 && pOp->opcode==OP_Eq ); + testcase( res2==1 && pOp->opcode==OP_Eq ); + testcase( res2==0 && pOp->opcode==OP_Ne ); + testcase( res2==1 && pOp->opcode==OP_Ne ); + if( (pOp->opcode==OP_Eq)==res2 ) break; + } + memAboutToChange(p, pOut); + MemSetTypeFlag(pOut, MEM_Int); + pOut->u.i = res2; + REGISTER_TRACE(pOp->p2, pOut); + }else{ + VdbeBranchTaken(res2!=0, (pOp->p5 & SQLITE_NULLEQ)?2:3); + if( res2 ){ + goto jump_to_p2; + } } break; } -/* Opcode: ElseEq * P2 * * * +/* Opcode: ElseNotEq * P2 * * * ** ** This opcode must follow an OP_Lt or OP_Gt comparison operator. There ** can be zero or more OP_ReleaseReg opcodes intervening, but no other ** opcodes are allowed to occur between this instruction and the previous -** OP_Lt or OP_Gt. +** OP_Lt or OP_Gt. Furthermore, the prior OP_Lt or OP_Gt must have the +** SQLITE_STOREP2 bit set in the P5 field. ** ** If result of an OP_Eq comparison on the same two operands as the -** prior OP_Lt or OP_Gt would have been true, then jump to P2. -** If the result of an OP_Eq comparison on the two previous -** operands would have been false or NULL, then fall through. +** prior OP_Lt or OP_Gt would have been NULL or false (0), then then +** jump to P2. If the result of an OP_Eq comparison on the two previous +** operands would have been true (1), then fall through. */ -case OP_ElseEq: { /* same as TK_ESCAPE, jump */ +case OP_ElseNotEq: { /* same as TK_ESCAPE, jump */ #ifdef SQLITE_DEBUG /* Verify the preconditions of this opcode - that it follows an OP_Lt or - ** OP_Gt with zero or more intervening OP_ReleaseReg opcodes */ + ** OP_Gt with the SQLITE_STOREP2 flag set, with zero or more intervening + ** OP_ReleaseReg opcodes */ int iAddr; for(iAddr = (int)(pOp - aOp) - 1; ALWAYS(iAddr>=0); iAddr--){ if( aOp[iAddr].opcode==OP_ReleaseReg ) continue; assert( aOp[iAddr].opcode==OP_Lt || aOp[iAddr].opcode==OP_Gt ); + assert( aOp[iAddr].p5 & SQLITE_STOREP2 ); break; } #endif /* SQLITE_DEBUG */ - VdbeBranchTaken(iCompare==0, 2); - if( iCompare==0 ) goto jump_to_p2; + VdbeBranchTaken(iCompare!=0, 2); + if( iCompare!=0 ) goto jump_to_p2; break; } @@ -2457,24 +2498,6 @@ } break; } - -/* Opcode: ZeroOrNull P1 P2 P3 * * -** Synopsis: r[P2] = 0 OR NULL -** -** If all both registers P1 and P3 are NOT NULL, then store a zero in -** register P2. If either registers P1 or P3 are NULL then put -** a NULL in register P2. -*/ -case OP_ZeroOrNull: { /* in1, in2, out2, in3 */ - if( (aMem[pOp->p1].flags & MEM_Null)!=0 - || (aMem[pOp->p3].flags & MEM_Null)!=0 - ){ - sqlite3VdbeMemSetNull(aMem + pOp->p2); - }else{ - sqlite3VdbeMemSetInt64(aMem + pOp->p2, 0); - } - break; -} /* Opcode: NotNull P1 P2 * * * ** Synopsis: if r[P1]!=NULL goto P2 diff -Nru sqlite3-3.35.0/src/where.c sqlite3-3.35.0-1/src/where.c --- sqlite3-3.35.0/src/where.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/where.c 2021-04-04 17:23:21.000000000 +0000 @@ -492,7 +492,7 @@ for(i=0; inExpr; i++){ Expr *p = sqlite3ExprSkipCollateAndLikely(pList->a[i].pExpr); if( ALWAYS(p!=0) - && (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) + && p->op==TK_COLUMN && p->iColumn==pIdx->aiColumn[iCol] && p->iTable==iBase ){ @@ -557,8 +557,7 @@ for(i=0; inExpr; i++){ Expr *p = sqlite3ExprSkipCollateAndLikely(pDistinct->a[i].pExpr); if( NEVER(p==0) ) continue; - if( p->op!=TK_COLUMN && p->op!=TK_AGG_COLUMN ) continue; - if( p->iTable==iBase && p->iColumn<0 ) return 1; + if( p->op==TK_COLUMN && p->iTable==iBase && p->iColumn<0 ) return 1; } /* Loop through all indices on the table, checking each to see if it makes @@ -3823,7 +3822,7 @@ if( MASKBIT(i) & obSat ) continue; pOBExpr = sqlite3ExprSkipCollateAndLikely(pOrderBy->a[i].pExpr); if( NEVER(pOBExpr==0) ) continue; - if( pOBExpr->op!=TK_COLUMN && pOBExpr->op!=TK_AGG_COLUMN ) continue; + if( pOBExpr->op!=TK_COLUMN ) continue; if( pOBExpr->iTable!=iCur ) continue; pTerm = sqlite3WhereFindTerm(&pWInfo->sWC, iCur, pOBExpr->iColumn, ~ready, eqOpMask, 0); @@ -3952,7 +3951,7 @@ if( NEVER(pOBExpr==0) ) continue; if( (wctrlFlags & (WHERE_GROUPBY|WHERE_DISTINCTBY))==0 ) bOnce = 0; if( iColumn>=XN_ROWID ){ - if( pOBExpr->op!=TK_COLUMN && pOBExpr->op!=TK_AGG_COLUMN ) continue; + if( pOBExpr->op!=TK_COLUMN ) continue; if( pOBExpr->iTable!=iCur ) continue; if( pOBExpr->iColumn!=iColumn ) continue; }else{ @@ -5025,9 +5024,7 @@ /* Attempt to omit tables from the join that do not affect the result. ** For a table to not affect the result, the following must be true: ** - ** 1) The query must not be an aggregate. Or it must be an aggregate - ** that contains only one aggregate function with the DISTINCT - ** qualifier. e.g. "SELECT count(DISTINCT ...) FROM". + ** 1) The query must not be an aggregate. ** 2) The table must be the RHS of a LEFT JOIN. ** 3) Either the query must be DISTINCT, or else the ON or USING clause ** must contain a constraint that limits the scan of the table to diff -Nru sqlite3-3.35.0/src/wherecode.c sqlite3-3.35.0-1/src/wherecode.c --- sqlite3-3.35.0/src/wherecode.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/src/wherecode.c 2021-04-04 17:23:21.000000000 +0000 @@ -148,8 +148,16 @@ || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX)); sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); - str.printfFlags = SQLITE_PRINTF_INTERNAL; - sqlite3_str_appendf(&str, "%s %S", isSearch ? "SEARCH" : "SCAN", pItem); + sqlite3_str_appendall(&str, isSearch ? "SEARCH" : "SCAN"); + if( pItem->pSelect ){ + sqlite3_str_appendf(&str, " SUBQUERY %u", pItem->pSelect->selId); + }else{ + sqlite3_str_appendf(&str, " TABLE %s", pItem->zName); + } + + if( pItem->zAlias ){ + sqlite3_str_appendf(&str, " AS %s", pItem->zAlias); + } if( (flags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){ const char *zFmt = 0; Index *pIdx; diff -Nru sqlite3-3.35.0/test/alterauth2.test sqlite3-3.35.0-1/test/alterauth2.test --- sqlite3-3.35.0/test/alterauth2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/alterauth2.test 2021-04-04 17:23:21.000000000 +0000 @@ -82,7 +82,6 @@ {SQLITE_ALTER_TABLE main t2 {} {}} {SQLITE_FUNCTION {} like {} {}} {SQLITE_FUNCTION {} sqlite_rename_column {} {}} - {SQLITE_FUNCTION {} sqlite_rename_quotefix {} {}} {SQLITE_FUNCTION {} sqlite_rename_test {} {}} {SQLITE_READ sqlite_master name main {}} {SQLITE_READ sqlite_master sql main {}} @@ -101,7 +100,6 @@ } { {SQLITE_FUNCTION {} like {} {}} {SQLITE_FUNCTION {} sqlite_drop_column {} {}} - {SQLITE_FUNCTION {} sqlite_rename_quotefix {} {}} {SQLITE_FUNCTION {} sqlite_rename_test {} {}} {SQLITE_READ sqlite_master name main {}} {SQLITE_READ sqlite_master sql main {}} @@ -112,7 +110,6 @@ {SQLITE_READ sqlite_temp_master type temp {}} {SQLITE_SELECT {} {} {} {}} {SQLITE_UPDATE sqlite_master sql main {}} - {SQLITE_UPDATE sqlite_temp_master sql temp {}} } finish_test diff -Nru sqlite3-3.35.0/test/altercol.test sqlite3-3.35.0-1/test/altercol.test --- sqlite3-3.35.0/test/altercol.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/altercol.test 2021-04-04 17:23:21.000000000 +0000 @@ -567,7 +567,7 @@ do_catchsql_test 13.1.7 { ALTER TABLE x1 RENAME COLUMN t TO ttt; -} {1 {error in index x1i: }} +} {1 {database disk image is malformed}} do_execsql_test 13.1.8 { DELETE FROM sqlite_master WHERE name = 'x1i'; @@ -835,29 +835,5 @@ {CREATE TABLE t2(c, othername, extra AS (c + 1))} } -#------------------------------------------------------------------------- -# -reset_db -do_execsql_test 22.0 { - CREATE TABLE t1(a, b); - CREATE INDEX x1 on t1("c"=b); - INSERT INTO t1 VALUES('a', 'a'); - INSERT INTO t1 VALUES('b', 'b'); - INSERT INTO t1 VALUES('c', 'c'); - ALTER TABLE t1 RENAME COLUMN a TO "c"; - PRAGMA integrity_check; -} {ok} - -reset_db -do_execsql_test 23.0 { - CREATE TABLE t1('a'"b",c); - CREATE INDEX i1 ON t1('a'); - INSERT INTO t1 VALUES(1,2), (3,4); - ALTER TABLE t1 RENAME COLUMN a TO x; - PRAGMA integrity_check; - SELECT sql FROM sqlite_schema WHERE name='t1'; - -} {ok {CREATE TABLE t1("x" "b",c)}} - finish_test diff -Nru sqlite3-3.35.0/test/altermalloc3.test sqlite3-3.35.0-1/test/altermalloc3.test --- sqlite3-3.35.0/test/altermalloc3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/altermalloc3.test 2021-04-04 17:23:21.000000000 +0000 @@ -22,14 +22,6 @@ } do_execsql_test 1.0 { - CREATE TABLE x1( - one, two, three, PRIMARY KEY(one), - CHECK (three!="xyz"), CHECK (two!="one") - ) WITHOUT ROWID; - CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five"; - CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN - UPDATE x1 SET two=new.three || "new" WHERE one=new.one||""; - END; CREATE TABLE t1(a, b, c, d, PRIMARY KEY(d, b)) WITHOUT ROWID; INSERT INTO t1 VALUES(1, 2, 3, 4); } @@ -45,3 +37,4 @@ finish_test + diff -Nru sqlite3-3.35.0/test/alterqf.test sqlite3-3.35.0-1/test/alterqf.test --- sqlite3-3.35.0/test/alterqf.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/alterqf.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -# 2021 March 16 -# -# The author disclaims copyright to this source code. In place of -# a legal notice, here is a blessing: -# -# May you do good and not evil. -# May you find forgiveness for yourself and forgive others. -# May you share freely, never taking more than you give. -# -#*********************************************************************** -# This file implements regression tests for SQLite library. This -# script focuses on testing internal function sqlite_rename_quotefix(). -# - - -set testdir [file dirname $argv0] -source $testdir/tester.tcl -set testprefix alterqf - -sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS db - -do_execsql_test 1.0 { - CREATE TABLE t1(a, b, c); -} - -foreach {tn before after} { - 1 {CREATE VIEW v1 AS SELECT "a", "b", "notacolumn!", "c" FROM t1} - {CREATE VIEW v1 AS SELECT "a", "b", 'notacolumn!', "c" FROM t1} - - 2 {CREATE VIEW v1 AS SELECT "a", "b", "not'a'column!", "c" FROM t1} - {CREATE VIEW v1 AS SELECT "a", "b", 'not''a''column!', "c" FROM t1} - - 3 {CREATE VIEW v1 AS SELECT "a", "b", "not""a""column!", "c" FROM t1} - {CREATE VIEW v1 AS SELECT "a", "b", 'not"a"column!', "c" FROM t1} - - 4 {CREATE VIEW v1 AS SELECT "val", count("b") FROM t1 GROUP BY "abc"} - {CREATE VIEW v1 AS SELECT 'val', count("b") FROM t1 GROUP BY 'abc'} - - 5 {CREATE TABLE xyz(a CHECK (a!="str"), b AS (a||"str"))} - {CREATE TABLE xyz(a CHECK (a!='str'), b AS (a||'str'))} - - 6 {CREATE INDEX i1 ON t1(a || "str", "b", "val")} - {CREATE INDEX i1 ON t1(a || 'str', "b", 'val')} - - 7 {CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN SELECT "abcd"; END} - {CREATE TRIGGER tr AFTER INSERT ON t1 BEGIN SELECT 'abcd'; END} - - 8 {CREATE VIEW v1 AS SELECT "string"'alias' FROM t1} - {CREATE VIEW v1 AS SELECT 'string' 'alias' FROM t1} - - 9 {CREATE INDEX i1 ON t1(a) WHERE "b"="bb"} - {CREATE INDEX i1 ON t1(a) WHERE "b"='bb'} - - 10 {CREATE TABLE t2(abc, xyz CHECK (xyz != "123"))} - {CREATE TABLE t2(abc, xyz CHECK (xyz != '123'))} - - 11 { - CREATE TRIGGER ott AFTER UPDATE ON t1 BEGIN - SELECT max("str", new."a") FROM t1 - WHERE group_concat("b", ",") OVER (ORDER BY c||"str"); - UPDATE t1 SET c= b + "str"; - DELETE FROM t1 WHERE EXISTS ( - SELECT 1 FROM t1 AS o WHERE o."a" = "o.a" AND t1.b IN("t1.b") - ); - END; - } { - CREATE TRIGGER ott AFTER UPDATE ON t1 BEGIN - SELECT max('str', new."a") FROM t1 - WHERE group_concat("b", ',') OVER (ORDER BY c||'str'); - UPDATE t1 SET c= b + 'str'; - DELETE FROM t1 WHERE EXISTS ( - SELECT 1 FROM t1 AS o WHERE o."a" = 'o.a' AND t1.b IN('t1.b') - ); - END; - } - -} { - do_execsql_test 1.$tn { - SELECT sqlite_rename_quotefix('main', $before) - } [list $after] -} - -#------------------------------------------------------------------------- -reset_db -do_execsql_test 2.0 { - CREATE TABLE x1( - one, two, three, PRIMARY KEY(one), - CHECK (three!="xyz"), CHECK (two!="one") - ) WITHOUT ROWID; - CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five"; - CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN - UPDATE x1 SET two=new.three || "new" WHERE one=new.one||""; - END; -} - -do_execsql_test 2.1 { - ALTER TABLE x1 RENAME two TO 'four'; - SELECT sql FROM sqlite_schema; - SELECT sql FROM sqlite_temp_schema; -} {{CREATE TABLE x1( - one, "four", three, PRIMARY KEY(one), - CHECK (three!='xyz'), CHECK ("four"!="one") - ) WITHOUT ROWID} - {CREATE INDEX x1i ON x1(one+"four"+'four') WHERE 'five'} - {CREATE TRIGGER AFTER INSERT ON x1 BEGIN - UPDATE x1 SET "four"=new.three || 'new' WHERE one=new.one||''; - END} -} - - -finish_test diff -Nru sqlite3-3.35.0/test/altertab.test sqlite3-3.35.0-1/test/altertab.test --- sqlite3-3.35.0/test/altertab.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/altertab.test 2021-04-04 17:23:21.000000000 +0000 @@ -738,3 +738,4 @@ finish_test + diff -Nru sqlite3-3.35.0/test/analyze3.test sqlite3-3.35.0-1/test/analyze3.test --- sqlite3-3.35.0/test/analyze3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyze3.test 2021-04-04 17:23:21.000000000 +0000 @@ -124,10 +124,10 @@ # do_eqp_test analyze3-1.1.2 { SELECT sum(y) FROM t1 WHERE x>200 AND x<300 -} {SEARCH t1 USING INDEX i1 (x>? AND x? AND x0 AND x<1100 -} {SCAN t1} +} {SCAN TABLE t1} # 2017-06-26: Verify that the SQLITE_DBCONFIG_ENABLE_QPSG setting disables # the use of bound parameters by STAT4 @@ -137,27 +137,27 @@ unset -nocomplain u do_eqp_test analyze3-1.1.3.100 { SELECT sum(y) FROM t1 WHERE x>$l AND x<$u -} {SEARCH t1 USING INDEX i1 (x>? AND x? AND x$l AND x<$u -} {SEARCH t1 USING INDEX i1 (x>? AND x? AND x$l AND x<$u -} {SCAN t1} +} {SCAN TABLE t1} db cache flush sqlite3_db_config db ENABLE_QPSG 1 do_eqp_test analyze3-1.1.3.103 { SELECT sum(y) FROM t1 WHERE x>$l AND x<$u -} {SEARCH t1 USING INDEX i1 (x>? AND x? AND x$l AND x<$u -} {SCAN t1} +} {SCAN TABLE t1} do_test analyze3-1.1.4 { sf_execsql { SELECT sum(y) FROM t1 WHERE x>200 AND x<300 } @@ -207,10 +207,10 @@ } {200 990} do_eqp_test analyze3-1.2.2 { SELECT sum(y) FROM t2 WHERE x>1 AND x<2 -} {SEARCH t2 USING INDEX i2 (x>? AND x? AND x0 AND x<99 -} {SCAN t2} +} {SCAN TABLE t2} do_test analyze3-1.2.4 { sf_execsql { SELECT sum(y) FROM t2 WHERE x>12 AND x<20 } @@ -259,10 +259,10 @@ } {99 1000} do_eqp_test analyze3-1.3.2 { SELECT sum(y) FROM t3 WHERE x>200 AND x<300 -} {SEARCH t3 USING INDEX i3 (x>? AND x? AND x0 AND x<1100 -} {SCAN t3} +} {SCAN TABLE t3} do_test analyze3-1.3.4 { sf_execsql { SELECT sum(y) FROM t3 WHERE x>200 AND x<300 } @@ -314,10 +314,10 @@ } {} do_eqp_test analyze3-2.2 { SELECT count(a) FROM t1 WHERE b LIKE 'a%' -} {SEARCH t1 USING INDEX i1 (b>? AND b? AND b 'w' AND c = 13; -} {SEARCH t1 USING INDEX i2 (c=?)} +} {SEARCH TABLE t1 USING INDEX i2 (c=?)} #----------------------------------------------------------------------------- # 2015-04-20. diff -Nru sqlite3-3.35.0/test/analyze4.test sqlite3-3.35.0-1/test/analyze4.test --- sqlite3-3.35.0/test/analyze4.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyze4.test 2021-04-04 17:23:21.000000000 +0000 @@ -38,7 +38,7 @@ # Should choose the t1a index since it is more specific than t1b. db eval {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=5 AND b IS NULL} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} # Verify that the t1b index shows that it does not narrow down the # search any at all. diff -Nru sqlite3-3.35.0/test/analyze6.test sqlite3-3.35.0-1/test/analyze6.test --- sqlite3-3.35.0/test/analyze6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyze6.test 2021-04-04 17:23:21.000000000 +0000 @@ -61,7 +61,7 @@ # do_test analyze6-1.1 { eqp {SELECT count(*) FROM ev, cat WHERE x=y} -} {/*SCAN cat USING COVERING INDEX catx*SEARCH ev USING COVERING INDEX evy (y=?)*/} +} {/*SCAN TABLE cat USING COVERING INDEX catx*SEARCH TABLE ev USING COVERING INDEX evy (y=?)*/} # The same plan is chosen regardless of the order of the tables in the # FROM clause. @@ -70,8 +70,8 @@ SELECT count(*) FROM cat, ev WHERE x=y } { QUERY PLAN - |--SCAN cat USING COVERING INDEX catx - `--SEARCH ev USING COVERING INDEX evy (y=?) + |--SCAN TABLE cat USING COVERING INDEX catx + `--SEARCH TABLE ev USING COVERING INDEX evy (y=?) } @@ -86,26 +86,26 @@ ANALYZE; } eqp {SELECT * FROM t201 WHERE z=5} -} {/*SEARCH t201 USING INDEX t201z (z=?)*/} +} {/*SEARCH TABLE t201 USING INDEX t201z (z=?)*/} do_test analyze6-2.2 { eqp {SELECT * FROM t201 WHERE y=5} -} {/*SEARCH t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/} +} {/*SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/} do_test analyze6-2.3 { eqp {SELECT * FROM t201 WHERE x=5} -} {/*SEARCH t201 USING INTEGER PRIMARY KEY (rowid=?)*/} +} {/*SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)*/} do_test analyze6-2.4 { execsql { INSERT INTO t201 VALUES(1,2,3),(2,3,4),(3,4,5); ANALYZE t201; } eqp {SELECT * FROM t201 WHERE z=5} -} {/*SEARCH t201 USING INDEX t201z (z=?)*/} +} {/*SEARCH TABLE t201 USING INDEX t201z (z=?)*/} do_test analyze6-2.5 { eqp {SELECT * FROM t201 WHERE y=5} -} {/*SEARCH t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/} +} {/*SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/} do_test analyze6-2.6 { eqp {SELECT * FROM t201 WHERE x=5} -} {/*SEARCH t201 USING INTEGER PRIMARY KEY (rowid=?)*/} +} {/*SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)*/} do_test analyze6-2.7 { execsql { INSERT INTO t201 VALUES(4,5,7); @@ -115,12 +115,12 @@ ANALYZE t201; } eqp {SELECT * FROM t201 WHERE z=5} -} {/*SEARCH t201 USING INDEX t201z (z=?)*/} +} {/*SEARCH TABLE t201 USING INDEX t201z (z=?)*/} do_test analyze6-2.8 { eqp {SELECT * FROM t201 WHERE y=5} -} {/*SEARCH t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/} +} {/*SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/} do_test analyze6-2.9 { eqp {SELECT * FROM t201 WHERE x=5} -} {/*SEARCH t201 USING INTEGER PRIMARY KEY (rowid=?)*/} +} {/*SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)*/} finish_test diff -Nru sqlite3-3.35.0/test/analyze7.test sqlite3-3.35.0-1/test/analyze7.test --- sqlite3-3.35.0/test/analyze7.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyze7.test 2021-04-04 17:23:21.000000000 +0000 @@ -37,13 +37,13 @@ WHERE value BETWEEN 1 AND 256; EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123; } -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test analyze7-1.1 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;} -} {/*SEARCH t1 USING INDEX t1b (b=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/} do_test analyze7-1.2 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} -} {/*SEARCH t1 USING INDEX t1cd (c=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/} # Run an analyze on one of the three indices. Verify that this # effects the row-count estimate on the one query that uses that @@ -53,20 +53,20 @@ execsql {ANALYZE t1a;} db cache flush execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test analyze7-2.1 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;} -} {/*SEARCH t1 USING INDEX t1b (b=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/} do_test analyze7-2.2 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} -} {/*SEARCH t1 USING INDEX t1cd (c=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/} # Verify that since the query planner now things that t1a is more # selective than t1b, it prefers to use t1a. # do_test analyze7-2.3 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} # Run an analysis on another of the three indices. Verify that this # new analysis works and does not disrupt the previous analysis. @@ -75,40 +75,40 @@ execsql {ANALYZE t1cd;} db cache flush; execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test analyze7-3.1 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;} -} {/*SEARCH t1 USING INDEX t1b (b=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/} do_test analyze7-3.2.1 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=?;} -} {/*SEARCH t1 USING INDEX t1cd (c=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/} ifcapable stat4 { # If ENABLE_STAT4 is defined, SQLite comes up with a different estimated # row count for (c=2) than it does for (c=?). do_test analyze7-3.2.2 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} - } {/*SEARCH t1 USING INDEX t1cd (c=?)*/} + } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/} } else { # If ENABLE_STAT4 is not defined, the expected row count for (c=2) is the # same as that for (c=?). do_test analyze7-3.2.3 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} - } {/*SEARCH t1 USING INDEX t1cd (c=?)*/} + } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/} } do_test analyze7-3.3 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} ifcapable {!stat4} { do_test analyze7-3.4 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND b=123} - } {/*SEARCH t1 USING INDEX t1b (b=?)*/} + } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/} do_test analyze7-3.5 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND c=123} - } {/*SEARCH t1 USING INDEX t1a (a=?)*/} + } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} } do_test analyze7-3.6 { execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND d=123 AND b=123} -} {/*SEARCH t1 USING INDEX t1cd (c=? AND d=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1cd (c=? AND d=?)*/} finish_test diff -Nru sqlite3-3.35.0/test/analyze8.test sqlite3-3.35.0-1/test/analyze8.test --- sqlite3-3.35.0/test/analyze8.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyze8.test 2021-04-04 17:23:21.000000000 +0000 @@ -61,25 +61,25 @@ # do_test 1.1 { eqp {SELECT * FROM t1 WHERE a=100 AND b=55} -} {/*SEARCH t1 USING INDEX t1b (b=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/} do_test 1.2 { eqp {SELECT * FROM t1 WHERE a=99 AND b=55} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test 1.3 { eqp {SELECT * FROM t1 WHERE a=101 AND b=55} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test 1.4 { eqp {SELECT * FROM t1 WHERE a=100 AND b=56} -} {/*SEARCH t1 USING INDEX t1b (b=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/} do_test 1.5 { eqp {SELECT * FROM t1 WHERE a=99 AND b=56} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test 1.6 { eqp {SELECT * FROM t1 WHERE a=101 AND b=56} -} {/*SEARCH t1 USING INDEX t1a (a=?)*/} +} {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/} do_test 2.1 { eqp {SELECT * FROM t1 WHERE a=100 AND b BETWEEN 50 AND 54} -} {/*SEARCH t1 USING INDEX t1b (b>? AND b? AND b? AND b? AND b? AND c? AND c? AND c? AND c? AND b? AND b=? term. Better than # (a<20) but not as good as (a<10). do_eqp_test 25.4.1 { SELECT * FROM t6 WHERE a < 10 AND (b BETWEEN ? AND 60) - } {SEARCH t6 USING INDEX aa (a? AND b? AND b25 AND z=?; -} {SEARCH t1 USING INDEX i1 (x=? AND y>?)} +} {SEARCH TABLE t1 USING INDEX i1 (x=? AND y>?)} finish_test diff -Nru sqlite3-3.35.0/test/analyzeC.test sqlite3-3.35.0-1/test/analyzeC.test --- sqlite3-3.35.0/test/analyzeC.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyzeC.test 2021-04-04 17:23:21.000000000 +0000 @@ -50,7 +50,7 @@ do_execsql_test 1.3 { EXPLAIN QUERY PLAN SELECT c FROM t1 ORDER BY a; -} {/.*SCAN t1 USING INDEX t1a.*/} +} {/.*SCAN TABLE t1 USING INDEX t1a.*/} do_execsql_test 1.3x { EXPLAIN QUERY PLAN SELECT c FROM t1 ORDER BY a; diff -Nru sqlite3-3.35.0/test/analyzeD.test sqlite3-3.35.0-1/test/analyzeD.test --- sqlite3-3.35.0/test/analyzeD.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyzeD.test 2021-04-04 17:23:21.000000000 +0000 @@ -63,7 +63,7 @@ # do_eqp_test 1.2 { SELECT * FROM t1 WHERE a=3001 AND c=150; -} {SEARCH t1 USING INDEX t1_c (c=?)} +} {SEARCH TABLE t1 USING INDEX t1_c (c=?)} do_test 1.3 { execsql { DELETE FROM sqlite_stat1 } @@ -78,7 +78,7 @@ # do_eqp_test 1.4 { SELECT * FROM t1 WHERE a=3001 AND c=150; -} {SEARCH t1 USING INDEX t1_ab (a=?)} +} {SEARCH TABLE t1 USING INDEX t1_ab (a=?)} do_test 1.5 { execsql { @@ -89,7 +89,7 @@ do_eqp_test 1.6 { SELECT * FROM t1 WHERE a=13 AND c=150; -} {SEARCH t1 USING INDEX t1_c (c=?)} +} {SEARCH TABLE t1 USING INDEX t1_c (c=?)} do_test 1.7 { execsql { DELETE FROM sqlite_stat1 } @@ -102,6 +102,6 @@ # gets this right, even without stat1 data. do_eqp_test 1.8 { SELECT * FROM t1 WHERE a=13 AND c=150; -} {SEARCH t1 USING INDEX t1_c (c=?)} +} {SEARCH TABLE t1 USING INDEX t1_c (c=?)} finish_test diff -Nru sqlite3-3.35.0/test/analyzeE.test sqlite3-3.35.0-1/test/analyzeE.test --- sqlite3-3.35.0/test/analyzeE.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyzeE.test 2021-04-04 17:23:21.000000000 +0000 @@ -36,47 +36,47 @@ do_execsql_test analyzeE-1.1 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500; -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-1.2 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000; -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.3 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750; -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.4 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.5 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.6 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<500 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.7 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>2500 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.8 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1900 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.9 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1100 -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-1.10 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1100 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-1.11 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1900 -} {/SCAN t1/} +} {/SCAN TABLE t1/} # Verify that everything works the same on a DESCENDING index. # @@ -88,47 +88,47 @@ do_execsql_test analyzeE-2.1 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500; -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-2.2 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000; -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.3 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750; -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.4 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.5 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.6 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<500 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.7 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>2500 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.8 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1900 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.9 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1100 -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-2.10 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1100 -} {/SEARCH t1 USING INDEX t1a/} +} {/SEARCH TABLE t1 USING INDEX t1a/} do_execsql_test analyzeE-2.11 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1900 -} {/SCAN t1/} +} {/SCAN TABLE t1/} # Now do a range query on the second term of an ASCENDING index # where the first term is constrained by equality. @@ -145,47 +145,47 @@ do_execsql_test analyzeE-3.1 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500 AND c=123; -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-3.2 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000 AND c=123; -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.3 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750 AND c=123; -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.4 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.5 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.6 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<500 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.7 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>2500 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.8 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1900 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.9 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1100 AND c=123 -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-3.10 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1100 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-3.11 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1900 AND c=123 -} {/SCAN t1/} +} {/SCAN TABLE t1/} # Repeat the 3.x tests using a DESCENDING index # @@ -197,46 +197,46 @@ do_execsql_test analyzeE-4.1 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 500 AND 2500 AND c=123; -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-4.2 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 2900 AND 3000 AND c=123; -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.3 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1700 AND 1750 AND c=123; -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.4 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 1 AND 500 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.5 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a BETWEEN 3000 AND 3000000 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.6 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<500 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.7 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>2500 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.8 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1900 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.9 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a>1100 AND c=123 -} {/SCAN t1/} +} {/SCAN TABLE t1/} do_execsql_test analyzeE-4.10 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1100 AND c=123 -} {/SEARCH t1 USING INDEX t1ca/} +} {/SEARCH TABLE t1 USING INDEX t1ca/} do_execsql_test analyzeE-4.11 { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a<1900 AND c=123 -} {/SCAN t1/} +} {/SCAN TABLE t1/} finish_test diff -Nru sqlite3-3.35.0/test/analyzeF.test sqlite3-3.35.0-1/test/analyzeF.test --- sqlite3-3.35.0/test/analyzeF.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyzeF.test 2021-04-04 17:23:21.000000000 +0000 @@ -62,7 +62,7 @@ 11 "x = nullif('19', 0) AND y = nullif('4', 0)" {t1y (y=?)} 12 "x = nullif('4', 0) AND y = nullif('19', 0)" {t1y (y=?)} } { - set res "SEARCH t1 USING INDEX $idx" + set res "SEARCH TABLE t1 USING INDEX $idx" do_eqp_test 1.$tn "SELECT * FROM t1 WHERE $where" $res } @@ -92,7 +92,7 @@ 3 "x = nondet4() AND y = nondet19()" {t1y (y=?)} 4 "x = nondet19() AND y = nondet4()" {t1y (y=?)} } { - set res "SEARCH t1 USING INDEX $idx" + set res "SEARCH TABLE t1 USING INDEX $idx" do_eqp_test 3.$tn "SELECT * FROM t1 WHERE $where" $res } diff -Nru sqlite3-3.35.0/test/analyzeG.test sqlite3-3.35.0-1/test/analyzeG.test --- sqlite3-3.35.0/test/analyzeG.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/analyzeG.test 2021-04-04 17:23:21.000000000 +0000 @@ -20,6 +20,16 @@ } set testprefix analyzeG +proc do_scan_order_test {tn sql expect} { + uplevel [list do_test $tn [subst -nocommands { + set res "" + db eval "explain query plan $sql" { + lappend res [set detail] + } + set res + }] [list {*}$expect]] +} + #------------------------------------------------------------------------- # Test cases 1.* seek to verify that even if an index is not used, its # stat4 data may be used by the planner to estimate the number of @@ -44,17 +54,15 @@ # know this, so it has no preference as to which order the tables are # scanned in. In practice this means that tables are scanned in the order # they are specified in in the FROM clause. -do_eqp_test 1.1.1 { +do_scan_order_test 1.1.1 { SELECT * FROM t1, t2 WHERE a=44 AND b=44; } { - + {SCAN TABLE t1} {SCAN TABLE t2} } -do_eqp_test 1.1.2 { +do_scan_order_test 1.1.2 { SELECT * FROM t2, t1 WHERE a=44 AND b=44 } { - QUERY PLAN - |--SCAN t2 - `--SCAN t1 + {SCAN TABLE t2} {SCAN TABLE t1} } do_execsql_test 1.2 { @@ -65,19 +73,15 @@ # Now, with the ANALYZE data, the planner knows that (b=44) matches a # large number of rows. So it elects to scan table "t1" first, regardless # of the order in which the tables are specified in the FROM clause. -do_eqp_test 1.3.1 { +do_scan_order_test 1.3.1 { SELECT * FROM t1, t2 WHERE a=44 AND b=44; } { - QUERY PLAN - |--SCAN t1 - `--SCAN t2 + {SCAN TABLE t1} {SCAN TABLE t2} } -do_eqp_test 1.3.2 { +do_scan_order_test 1.3.2 { SELECT * FROM t2, t1 WHERE a=44 AND b=44 } { - QUERY PLAN - |--SCAN t1 - `--SCAN t2 + {SCAN TABLE t1} {SCAN TABLE t2} } diff -Nru sqlite3-3.35.0/test/attach4.test sqlite3-3.35.0-1/test/attach4.test --- sqlite3-3.35.0/test/attach4.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/attach4.test 2021-04-04 17:23:21.000000000 +0000 @@ -135,3 +135,4 @@ } finish_test + diff -Nru sqlite3-3.35.0/test/autoindex1.test sqlite3-3.35.0-1/test/autoindex1.test --- sqlite3-3.35.0/test/autoindex1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/autoindex1.test 2021-04-04 17:23:21.000000000 +0000 @@ -183,18 +183,18 @@ WHERE t501.a IN (SELECT x FROM t502 WHERE y=?); } { QUERY PLAN - |--SEARCH t501 USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?) `--LIST SUBQUERY xxxxxx - `--SCAN t502 + `--SCAN TABLE t502 } do_eqp_test autoindex1-501 { SELECT b FROM t501 WHERE t501.a IN (SELECT x FROM t502 WHERE y=t501.b); } { QUERY PLAN - |--SCAN t501 + |--SCAN TABLE t501 `--CORRELATED LIST SUBQUERY xxxxxx - `--SEARCH t502 USING AUTOMATIC COVERING INDEX (y=?) + `--SEARCH TABLE t502 USING AUTOMATIC COVERING INDEX (y=?) } do_eqp_test autoindex1-502 { SELECT b FROM t501 @@ -202,9 +202,9 @@ AND t501.a IN (SELECT x FROM t502 WHERE y=t501.b); } { QUERY PLAN - |--SEARCH t501 USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?) `--CORRELATED LIST SUBQUERY xxxxxx - `--SCAN t502 + `--SCAN TABLE t502 } # The following code checks a performance regression reported on the @@ -277,13 +277,13 @@ ORDER BY x.registering_flock; } { QUERY PLAN - |--MATERIALIZE y - | |--SCAN s - | |--SEARCH prev USING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date? AND owner_change_date? AND owner_change_date?) -# 0|1|0|SEARCH u USING COVERING INDEX uab (ANY(a) AND b=?) +# 0|0|1|SEARCH TABLE v USING INDEX ve (e>?) +# 0|1|0|SEARCH TABLE u USING COVERING INDEX uab (ANY(a) AND b=?) # # on the basis that the real index "uab" must be better than the automatic # index. This is not right - a skip-scan is not necessarily better than an @@ -85,8 +85,8 @@ select count(*) from u, v where u.b = v.b and v.e > 34; } { QUERY PLAN - |--SEARCH v USING INDEX ve (e>?) - `--SEARCH u USING AUTOMATIC COVERING INDEX (b=?) + |--SEARCH TABLE v USING INDEX ve (e>?) + `--SEARCH TABLE u USING AUTOMATIC COVERING INDEX (b=?) } diff -Nru sqlite3-3.35.0/test/autoindex5.test sqlite3-3.35.0-1/test/autoindex5.test --- sqlite3-3.35.0/test/autoindex5.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/autoindex5.test 2021-04-04 17:23:21.000000000 +0000 @@ -102,7 +102,7 @@ AND ( sp.release = 'sid' OR sp.release = 'stretch' OR sp.release = 'jessie' OR sp.release = 'wheezy' OR sp.release = 'squeeze' ) ORDER BY sp.name, st.bug_name, sp.release, sp.subrelease; -} {SEARCH debian_cve USING AUTOMATIC COVERING INDEX (bug_name=?)} +} {SEARCH SUBQUERY * USING AUTOMATIC COVERING INDEX (bug_name=?)} #------------------------------------------------------------------------- # Test that ticket [8a2adec1] has been fixed. diff -Nru sqlite3-3.35.0/test/bestindex1.test sqlite3-3.35.0-1/test/bestindex1.test --- sqlite3-3.35.0/test/bestindex1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/bestindex1.test 2021-04-04 17:23:21.000000000 +0000 @@ -51,11 +51,11 @@ do_eqp_test 1.1 { SELECT * FROM x1 WHERE a = 'abc' -} {SCAN x1 VIRTUAL TABLE INDEX 555:eq!} +} {SCAN TABLE x1 VIRTUAL TABLE INDEX 555:eq!} do_eqp_test 1.2 { SELECT * FROM x1 WHERE a IN ('abc', 'def'); -} {SCAN x1 VIRTUAL TABLE INDEX 555:eq!} +} {SCAN TABLE x1 VIRTUAL TABLE INDEX 555:eq!} #------------------------------------------------------------------------- # @@ -141,17 +141,17 @@ set plan(use) { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%' + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%' `--USE TEMP B-TREE FOR ORDER BY } set plan(omit) { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%' + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%' `--USE TEMP B-TREE FOR ORDER BY } set plan(use2) { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x `--USE TEMP B-TREE FOR ORDER BY } diff -Nru sqlite3-3.35.0/test/bestindex2.test sqlite3-3.35.0-1/test/bestindex2.test --- sqlite3-3.35.0/test/bestindex2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/bestindex2.test 2021-04-04 17:23:21.000000000 +0000 @@ -89,40 +89,40 @@ do_eqp_test 1.1 { SELECT * FROM t1 WHERE a='abc' -} {SCAN t1 VIRTUAL TABLE INDEX 0:indexed(a=?)} +} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=?)} do_eqp_test 1.2 { SELECT * FROM t1 WHERE a='abc' AND b='def' -} {SCAN t1 VIRTUAL TABLE INDEX 0:indexed(a=? AND b=?)} +} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=? AND b=?)} do_eqp_test 1.3 { SELECT * FROM t1 WHERE a='abc' AND a='def' -} {SCAN t1 VIRTUAL TABLE INDEX 0:indexed(a=?)} +} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=?)} do_eqp_test 1.4 { SELECT * FROM t1,t2 WHERE c=a } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 0: - `--SCAN t2 VIRTUAL TABLE INDEX 0:indexed(c=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0: + `--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?) } do_eqp_test 1.5 { SELECT * FROM t1, t2 CROSS JOIN t3 WHERE t2.c = +t1.b AND t3.e=t2.d } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 0: - |--SCAN t2 VIRTUAL TABLE INDEX 0:indexed(c=?) - `--SCAN t3 VIRTUAL TABLE INDEX 0:indexed(e=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0: + |--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?) + `--SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?) } do_eqp_test 1.6 { SELECT * FROM t1, t2, t3 WHERE t2.c = +t1.b AND t3.e = t2.d } { QUERY PLAN - |--SCAN t1 VIRTUAL TABLE INDEX 0: - |--SCAN t2 VIRTUAL TABLE INDEX 0:indexed(c=?) - `--SCAN t3 VIRTUAL TABLE INDEX 0:indexed(e=?) + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0: + |--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?) + `--SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?) } do_execsql_test 1.7.1 { @@ -133,10 +133,10 @@ WHERE t1.a = t2.c AND t1.b = t3.e } { QUERY PLAN - |--SCAN x1 - |--SCAN t1 VIRTUAL TABLE INDEX 0: - |--SCAN t2 VIRTUAL TABLE INDEX 0:indexed(c=?) - `--SCAN t3 VIRTUAL TABLE INDEX 0:indexed(e=?) + |--SCAN TABLE x1 + |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0: + |--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?) + `--SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?) } finish_test diff -Nru sqlite3-3.35.0/test/bestindex3.test sqlite3-3.35.0-1/test/bestindex3.test --- sqlite3-3.35.0/test/bestindex3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/bestindex3.test 2021-04-04 17:23:21.000000000 +0000 @@ -79,11 +79,11 @@ do_eqp_test 1.1 { SELECT * FROM t1 WHERE a LIKE 'abc'; -} {SCAN t1 VIRTUAL TABLE INDEX 0:a LIKE ?} +} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?} do_eqp_test 1.2 { SELECT * FROM t1 WHERE a = 'abc'; -} {SCAN t1 VIRTUAL TABLE INDEX 0:a EQ ?} +} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?} do_eqp_test 1.3 { SELECT * FROM t1 WHERE a = 'abc' OR b = 'def'; @@ -91,9 +91,9 @@ QUERY PLAN `--MULTI-INDEX OR |--INDEX 1 - | `--SCAN t1 VIRTUAL TABLE INDEX 0:a EQ ? + | `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ? `--INDEX 2 - `--SCAN t1 VIRTUAL TABLE INDEX 0:b EQ ? + `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ? } do_eqp_test 1.4 { @@ -102,9 +102,9 @@ QUERY PLAN `--MULTI-INDEX OR |--INDEX 1 - | `--SCAN t1 VIRTUAL TABLE INDEX 0:a LIKE ? + | `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ? `--INDEX 2 - `--SCAN t1 VIRTUAL TABLE INDEX 0:b EQ ? + `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ? } do_execsql_test 1.5 { @@ -155,9 +155,9 @@ QUERY PLAN `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t2 USING INDEX t2x (x>? AND x? AND x? AND b? AND b? AND x? AND x? AND b? AND b? AND b? AND b=0} - } $use_eph - - do_execsql_test 3.$tn.2 $sql $res -} - -do_execsql_test 3.10 { - SELECT a, count(DISTINCT b) FROM t1 GROUP BY a; -} { - 1 1 2 2 3 2 4 1 5 2 -} - -#-------------------------------------------------------------------------- -reset_db -do_execsql_test 3.0 { - CREATE TABLE t1(a, b, c); - CREATE INDEX t1a ON t1(a); - CREATE INDEX t1bc ON t1(b, c); - - INSERT INTO t1 VALUES(1, 'A', 1); - INSERT INTO t1 VALUES(1, 'A', 1); - INSERT INTO t1 VALUES(2, 'A', 2); - INSERT INTO t1 VALUES(2, 'A', 2); - INSERT INTO t1 VALUES(1, 'B', 1); - INSERT INTO t1 VALUES(2, 'B', 2); - INSERT INTO t1 VALUES(3, 'B', 3); - INSERT INTO t1 VALUES(NULL, 'B', NULL); - INSERT INTO t1 VALUES(NULL, 'C', NULL); - INSERT INTO t1 VALUES('d', 'D', 'd'); - - CREATE TABLE t2(d, e, f); - CREATE INDEX t2def ON t2(d, e, f); - - INSERT INTO t2 VALUES(1, 1, 'a'); - INSERT INTO t2 VALUES(1, 1, 'a'); - INSERT INTO t2 VALUES(1, 2, 'a'); - INSERT INTO t2 VALUES(1, 2, 'a'); - INSERT INTO t2 VALUES(1, 2, 'b'); - INSERT INTO t2 VALUES(1, 3, 'b'); - INSERT INTO t2 VALUES(1, 3, 'a'); - INSERT INTO t2 VALUES(1, 3, 'b'); - INSERT INTO t2 VALUES(2, 3, 'x'); - INSERT INTO t2 VALUES(2, 3, 'y'); - INSERT INTO t2 VALUES(2, 3, 'z'); - - CREATE TABLE t3(x, y, z); - INSERT INTO t3 VALUES(1,1,1); - INSERT INTO t3 VALUES(2,2,2); -} - -foreach {tn use_eph sql res} { - 1 0 "SELECT count(DISTINCT c) FROM t1 GROUP BY b" {2 3 0 1} - 2 1 "SELECT count(DISTINCT a) FROM t1 GROUP BY b" {2 3 0 1} - 3 1 "SELECT count(DISTINCT a) FROM t1 GROUP BY b+c" {0 1 1 1 1} - - 4 0 "SELECT count(DISTINCT f) FROM t2 GROUP BY d, e" {1 2 2 3} - 5 1 "SELECT count(DISTINCT f) FROM t2 GROUP BY d" {2 3} - 6 0 "SELECT count(DISTINCT f) FROM t2 WHERE d IS 1 GROUP BY e" {1 2 2} -} { - do_test 4.$tn.1 { - set prg [db eval "EXPLAIN $sql"] - set idx [lsearch $prg OpenEphemeral] - expr {$idx>=0} - } $use_eph - - do_execsql_test 4.$tn.2 $sql $res -} - - -set t3root [db one {SELECT rootpage FROM sqlite_schema WHERE name='t3'}] -foreach {tn use_t3 sql res} { - 1 1 "SELECT count(*) FROM t3" 2 - 2 0 "SELECT count(*) FROM t1" 10 - 2 1 "SELECT count(DISTINCT a) FROM t1, t3" 4 - 3 0 "SELECT count(DISTINCT a) FROM t1 LEFT JOIN t3" 4 - 4 1 "SELECT count(DISTINCT a) FROM t1 LEFT JOIN t3 WHERE t3.x=1" 4 - 5 1 "SELECT count(DISTINCT a) FROM t1 LEFT JOIN t3 WHERE t3.x=0" 0 - 6 0 "SELECT count(DISTINCT a) FROM t1 LEFT JOIN t3 ON (t3.x=0)" 4 -} { - do_test 5.$tn.1 { - set bUse 0 - db eval "EXPLAIN $sql" a { - if {$a(opcode)=="OpenRead" && $a(p2)==$t3root} {set bUse 1} - } - set bUse - } $use_t3 - - do_execsql_test 5.$tn.2 $sql $res -} - finish_test - diff -Nru sqlite3-3.35.0/test/distinct.test sqlite3-3.35.0-1/test/distinct.test --- sqlite3-3.35.0/test/distinct.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/distinct.test 2021-04-04 17:23:21.000000000 +0000 @@ -30,11 +30,12 @@ set program1 [list] set program2 [list] db eval "EXPLAIN $sql1" { - if {$opcode != "Noop" && $opcode != "Explain"} { lappend program1 $opcode } + if {$opcode != "Noop"} { lappend program1 $opcode } } db eval "EXPLAIN $sql2" { - if {$opcode != "Noop" && $opcode != "Explain"} { lappend program2 $opcode } + if {$opcode != "Noop"} { lappend program2 $opcode } } + return [expr {$program1==$program2}] } diff -Nru sqlite3-3.35.0/test/e_createtable.test sqlite3-3.35.0-1/test/e_createtable.test --- sqlite3-3.35.0/test/e_createtable.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/e_createtable.test 2021-04-04 17:23:21.000000000 +0000 @@ -1393,13 +1393,13 @@ } do_createtable_tests 4.10 { 1 "EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b = 5" - {/*SEARCH t1 USING INDEX sqlite_autoindex_t1_1 (b=?)*/} + {/*SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (b=?)*/} 2 "EXPLAIN QUERY PLAN SELECT * FROM t2 ORDER BY b, c" - {/*SCAN t2 USING INDEX sqlite_autoindex_t2_1*/} + {/*SCAN TABLE t2 USING INDEX sqlite_autoindex_t2_1*/} 3 "EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE b=10 AND c>10" - {/*SEARCH t2 USING INDEX sqlite_autoindex_t2_1 (b=? AND c>?)*/} + {/*SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (b=? AND c>?)*/} } # EVIDENCE-OF: R-45493-35653 A CHECK constraint may be attached to a diff -Nru sqlite3-3.35.0/test/e_fkey.test sqlite3-3.35.0-1/test/e_fkey.test --- sqlite3-3.35.0/test/e_fkey.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/e_fkey.test 2021-04-04 17:23:21.000000000 +0000 @@ -992,15 +992,15 @@ EXPLAIN QUERY PLAN DELETE FROM artist WHERE 1; EXPLAIN QUERY PLAN SELECT rowid FROM track WHERE trackartist = ?; } { - {SCAN artist} - {SCAN track} + {SCAN TABLE artist} + {SCAN TABLE track} } do_detail_test e_fkey-25.3 { PRAGMA foreign_keys = ON; EXPLAIN QUERY PLAN DELETE FROM artist WHERE 1; } { - {SCAN artist} - {SCAN track} + {SCAN TABLE artist} + {SCAN TABLE track} } do_test e_fkey-25.4 { execsql { @@ -1117,15 +1117,15 @@ do_detail_test e_fkey-27.3 { EXPLAIN QUERY PLAN UPDATE artist SET artistid = ?, artistname = ? } { - {SCAN artist} - {SEARCH track USING COVERING INDEX trackindex (trackartist=?)} - {SEARCH track USING COVERING INDEX trackindex (trackartist=?)} + {SCAN TABLE artist} + {SEARCH TABLE track USING COVERING INDEX trackindex (trackartist=?)} + {SEARCH TABLE track USING COVERING INDEX trackindex (trackartist=?)} } do_detail_test e_fkey-27.4 { EXPLAIN QUERY PLAN DELETE FROM artist } { - {SCAN artist} - {SEARCH track USING COVERING INDEX trackindex (trackartist=?)} + {SCAN TABLE artist} + {SEARCH TABLE track USING COVERING INDEX trackindex (trackartist=?)} } ########################################################################### diff -Nru sqlite3-3.35.0/test/eqp.test sqlite3-3.35.0-1/test/eqp.test --- sqlite3-3.35.0/test/eqp.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/eqp.test 2021-04-04 17:23:21.000000000 +0000 @@ -46,131 +46,111 @@ QUERY PLAN |--MULTI-INDEX OR | |--INDEX 1 - | | `--SEARCH t1 USING INDEX i1 (a=?) + | | `--SEARCH TABLE t1 USING INDEX i1 (a=?) | `--INDEX 2 - | `--SEARCH t1 USING INDEX i2 (b=?) - `--SCAN t2 + | `--SEARCH TABLE t1 USING INDEX i2 (b=?) + `--SCAN TABLE t2 } do_eqp_test 1.3 { SELECT * FROM t2 CROSS JOIN t1 WHERE t1.a=1 OR t1.b=2; } { QUERY PLAN - |--SCAN t2 + |--SCAN TABLE t2 `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t1 USING INDEX i1 (a=?) + | `--SEARCH TABLE t1 USING INDEX i1 (a=?) `--INDEX 2 - `--SEARCH t1 USING INDEX i2 (b=?) + `--SEARCH TABLE t1 USING INDEX i2 (b=?) } do_eqp_test 1.3 { SELECT a FROM t1 ORDER BY a } { QUERY PLAN - `--SCAN t1 USING COVERING INDEX i1 + `--SCAN TABLE t1 USING COVERING INDEX i1 } do_eqp_test 1.4 { SELECT a FROM t1 ORDER BY +a } { QUERY PLAN - |--SCAN t1 USING COVERING INDEX i1 + |--SCAN TABLE t1 USING COVERING INDEX i1 `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test 1.5 { SELECT a FROM t1 WHERE a=4 } { QUERY PLAN - `--SEARCH t1 USING COVERING INDEX i1 (a=?) + `--SEARCH TABLE t1 USING COVERING INDEX i1 (a=?) } do_eqp_test 1.6 { SELECT DISTINCT count(*) FROM t3 GROUP BY a; } { QUERY PLAN - |--SCAN t3 + |--SCAN TABLE t3 |--USE TEMP B-TREE FOR GROUP BY `--USE TEMP B-TREE FOR DISTINCT } -do_eqp_test 1.7.1 { +do_eqp_test 1.7 { SELECT * FROM t3 JOIN (SELECT 1) } { QUERY PLAN - |--MATERIALIZE SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx | `--SCAN CONSTANT ROW |--SCAN SUBQUERY xxxxxx - `--SCAN t3 + `--SCAN TABLE t3 } -do_eqp_test 1.7.2 { - SELECT * FROM t3 JOIN (SELECT 1) AS v1 -} { - QUERY PLAN - |--MATERIALIZE v1 - | `--SCAN CONSTANT ROW - |--SCAN v1 - `--SCAN t3 -} -do_eqp_test 1.7.3 { - SELECT * FROM t3 AS xx JOIN (SELECT 1) AS yy -} { - QUERY PLAN - |--MATERIALIZE yy - | `--SCAN CONSTANT ROW - |--SCAN yy - `--SCAN xx -} - - do_eqp_test 1.8 { SELECT * FROM t3 JOIN (SELECT 1 UNION SELECT 2) } { QUERY PLAN - |--MATERIALIZE SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx | `--COMPOUND QUERY | |--LEFT-MOST SUBQUERY | | `--SCAN CONSTANT ROW | `--UNION USING TEMP B-TREE | `--SCAN CONSTANT ROW |--SCAN SUBQUERY xxxxxx - `--SCAN t3 + `--SCAN TABLE t3 } do_eqp_test 1.9 { - SELECT * FROM t3 JOIN (SELECT 1 EXCEPT SELECT a FROM t3 LIMIT 17) AS abc + SELECT * FROM t3 JOIN (SELECT 1 EXCEPT SELECT a FROM t3 LIMIT 17) } { QUERY PLAN - |--MATERIALIZE abc + |--MATERIALIZE xxxxxx | `--COMPOUND QUERY | |--LEFT-MOST SUBQUERY | | `--SCAN CONSTANT ROW | `--EXCEPT USING TEMP B-TREE - | `--SCAN t3 - |--SCAN abc - `--SCAN t3 + | `--SCAN TABLE t3 + |--SCAN SUBQUERY xxxxxx + `--SCAN TABLE t3 } do_eqp_test 1.10 { - SELECT * FROM t3 JOIN (SELECT 1 INTERSECT SELECT a FROM t3 LIMIT 17) AS abc + SELECT * FROM t3 JOIN (SELECT 1 INTERSECT SELECT a FROM t3 LIMIT 17) } { QUERY PLAN - |--MATERIALIZE abc + |--MATERIALIZE xxxxxx | `--COMPOUND QUERY | |--LEFT-MOST SUBQUERY | | `--SCAN CONSTANT ROW | `--INTERSECT USING TEMP B-TREE - | `--SCAN t3 - |--SCAN abc - `--SCAN t3 + | `--SCAN TABLE t3 + |--SCAN SUBQUERY xxxxxx + `--SCAN TABLE t3 } do_eqp_test 1.11 { - SELECT * FROM t3 JOIN (SELECT 1 UNION ALL SELECT a FROM t3 LIMIT 17) abc + SELECT * FROM t3 JOIN (SELECT 1 UNION ALL SELECT a FROM t3 LIMIT 17) } { QUERY PLAN - |--MATERIALIZE abc + |--MATERIALIZE xxxxxx | `--COMPOUND QUERY | |--LEFT-MOST SUBQUERY | | `--SCAN CONSTANT ROW | `--UNION ALL - | `--SCAN t3 - |--SCAN abc - `--SCAN t3 + | `--SCAN TABLE t3 + |--SCAN SUBQUERY xxxxxx + `--SCAN TABLE t3 } #------------------------------------------------------------------------- @@ -186,57 +166,57 @@ det 2.2.1 "SELECT DISTINCT min(x), max(x) FROM t1 GROUP BY x ORDER BY 1" { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 |--USE TEMP B-TREE FOR GROUP BY |--USE TEMP B-TREE FOR DISTINCT `--USE TEMP B-TREE FOR ORDER BY } det 2.2.2 "SELECT DISTINCT min(x), max(x) FROM t2 GROUP BY x ORDER BY 1" { QUERY PLAN - |--SCAN t2 USING COVERING INDEX t2i1 + |--SCAN TABLE t2 USING COVERING INDEX t2i1 |--USE TEMP B-TREE FOR DISTINCT `--USE TEMP B-TREE FOR ORDER BY } det 2.2.3 "SELECT DISTINCT * FROM t1" { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--USE TEMP B-TREE FOR DISTINCT } det 2.2.4 "SELECT DISTINCT * FROM t1, t2" { QUERY PLAN - |--SCAN t1 - |--SCAN t2 + |--SCAN TABLE t1 + |--SCAN TABLE t2 `--USE TEMP B-TREE FOR DISTINCT } det 2.2.5 "SELECT DISTINCT * FROM t1, t2 ORDER BY t1.x" { QUERY PLAN - |--SCAN t1 - |--SCAN t2 + |--SCAN TABLE t1 + |--SCAN TABLE t2 |--USE TEMP B-TREE FOR DISTINCT `--USE TEMP B-TREE FOR ORDER BY } det 2.2.6 "SELECT DISTINCT t2.x FROM t1, t2 ORDER BY t2.x" { QUERY PLAN - |--SCAN t2 USING COVERING INDEX t2i1 - `--SCAN t1 + |--SCAN TABLE t2 USING COVERING INDEX t2i1 + `--SCAN TABLE t1 } det 2.3.1 "SELECT max(x) FROM t2" { QUERY PLAN - `--SEARCH t2 USING COVERING INDEX t2i1 + `--SEARCH TABLE t2 USING COVERING INDEX t2i1 } det 2.3.2 "SELECT min(x) FROM t2" { QUERY PLAN - `--SEARCH t2 USING COVERING INDEX t2i1 + `--SEARCH TABLE t2 USING COVERING INDEX t2i1 } det 2.3.3 "SELECT min(x), max(x) FROM t2" { QUERY PLAN - `--SCAN t2 USING COVERING INDEX t2i1 + `--SCAN TABLE t2 USING COVERING INDEX t2i1 } det 2.4.1 "SELECT * FROM t1 WHERE rowid=?" { QUERY PLAN - `--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?) + `--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) } @@ -248,42 +228,42 @@ SELECT (SELECT x FROM t1 AS sub) FROM t1; } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--SCALAR SUBQUERY xxxxxx - `--SCAN sub + `--SCAN TABLE t1 AS sub } do_eqp_test 3.1.2 { SELECT * FROM t1 WHERE (SELECT x FROM t1 AS sub); } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--SCALAR SUBQUERY xxxxxx - `--SCAN sub + `--SCAN TABLE t1 AS sub } do_eqp_test 3.1.3 { SELECT * FROM t1 WHERE (SELECT x FROM t1 AS sub ORDER BY y); } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--SCALAR SUBQUERY xxxxxx - |--SCAN sub + |--SCAN TABLE t1 AS sub `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test 3.1.4 { SELECT * FROM t1 WHERE (SELECT x FROM t2 ORDER BY x); } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--SCALAR SUBQUERY xxxxxx - `--SCAN t2 USING COVERING INDEX t2i1 + `--SCAN TABLE t2 USING COVERING INDEX t2i1 } det 3.2.1 { SELECT * FROM (SELECT * FROM t1 ORDER BY x LIMIT 10) ORDER BY y LIMIT 5 } { QUERY PLAN - |--CO-ROUTINE SUBQUERY xxxxxx - | |--SCAN t1 + |--CO-ROUTINE xxxxxx + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY |--SCAN SUBQUERY xxxxxx `--USE TEMP B-TREE FOR ORDER BY @@ -295,13 +275,13 @@ ORDER BY x2.y LIMIT 5 } { QUERY PLAN - |--MATERIALIZE x1 - | |--SCAN t1 + |--MATERIALIZE xxxxxx + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY - |--MATERIALIZE x2 - | `--SCAN t2 USING INDEX t2i1 - |--SCAN x1 - |--SCAN x2 + |--MATERIALIZE xxxxxx + | `--SCAN TABLE t2 USING INDEX t2i1 + |--SCAN SUBQUERY xxxxxx AS x1 + |--SCAN SUBQUERY xxxxxx AS x2 `--USE TEMP B-TREE FOR ORDER BY } @@ -309,25 +289,25 @@ SELECT * FROM t1 WHERE y IN (SELECT y FROM t2) } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--LIST SUBQUERY xxxxxx - `--SCAN t2 + `--SCAN TABLE t2 } det 3.3.2 { SELECT * FROM t1 WHERE y IN (SELECT y FROM t2 WHERE t1.x!=t2.x) } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--CORRELATED LIST SUBQUERY xxxxxx - `--SCAN t2 + `--SCAN TABLE t2 } det 3.3.3 { SELECT * FROM t1 WHERE EXISTS (SELECT y FROM t2 WHERE t1.x!=t2.x) } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--CORRELATED SCALAR SUBQUERY xxxxxx - `--SCAN t2 + `--SCAN TABLE t2 } #------------------------------------------------------------------------- @@ -339,9 +319,9 @@ QUERY PLAN `--COMPOUND QUERY |--LEFT-MOST SUBQUERY - | `--SCAN t1 + | `--SCAN TABLE t1 `--UNION ALL - `--SCAN t2 + `--SCAN TABLE t2 } do_eqp_test 4.1.2 { SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY 2 @@ -349,10 +329,10 @@ QUERY PLAN `--MERGE (UNION ALL) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 + |--SCAN TABLE t2 `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test 4.1.3 { @@ -361,10 +341,10 @@ QUERY PLAN `--MERGE (UNION) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 + |--SCAN TABLE t2 `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test 4.1.4 { @@ -373,10 +353,10 @@ QUERY PLAN `--MERGE (INTERSECT) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 + |--SCAN TABLE t2 `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test 4.1.5 { @@ -385,10 +365,10 @@ QUERY PLAN `--MERGE (EXCEPT) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 + |--SCAN TABLE t2 `--USE TEMP B-TREE FOR ORDER BY } @@ -398,10 +378,10 @@ QUERY PLAN `--MERGE (UNION ALL) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - `--SCAN t2 USING INDEX t2i1 + `--SCAN TABLE t2 USING INDEX t2i1 } do_eqp_test 4.2.3 { SELECT * FROM t1 UNION SELECT * FROM t2 ORDER BY 1 @@ -409,10 +389,10 @@ QUERY PLAN `--MERGE (UNION) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 USING INDEX t2i1 + |--SCAN TABLE t2 USING INDEX t2i1 `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY } do_eqp_test 4.2.4 { @@ -421,10 +401,10 @@ QUERY PLAN `--MERGE (INTERSECT) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 USING INDEX t2i1 + |--SCAN TABLE t2 USING INDEX t2i1 `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY } do_eqp_test 4.2.5 { @@ -433,10 +413,10 @@ QUERY PLAN `--MERGE (EXCEPT) |--LEFT - | |--SCAN t1 + | |--SCAN TABLE t1 | `--USE TEMP B-TREE FOR ORDER BY `--RIGHT - |--SCAN t2 USING INDEX t2i1 + |--SCAN TABLE t2 USING INDEX t2i1 `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY } @@ -446,9 +426,9 @@ QUERY PLAN `--COMPOUND QUERY |--LEFT-MOST SUBQUERY - | `--SCAN t1 + | `--SCAN TABLE t1 `--UNION USING TEMP B-TREE - `--SCAN t2 USING COVERING INDEX t2i1 + `--SCAN TABLE t2 USING COVERING INDEX t2i1 } do_eqp_test 4.3.2 { @@ -457,11 +437,11 @@ QUERY PLAN `--COMPOUND QUERY |--LEFT-MOST SUBQUERY - | `--SCAN t1 + | `--SCAN TABLE t1 |--UNION USING TEMP B-TREE - | `--SCAN t2 USING COVERING INDEX t2i1 + | `--SCAN TABLE t2 USING COVERING INDEX t2i1 `--UNION USING TEMP B-TREE - `--SCAN t1 + `--SCAN TABLE t1 } do_eqp_test 4.3.3 { SELECT x FROM t1 UNION SELECT x FROM t2 UNION SELECT x FROM t1 ORDER BY 1 @@ -471,12 +451,12 @@ |--LEFT | `--MERGE (UNION) | |--LEFT - | | |--SCAN t1 + | | |--SCAN TABLE t1 | | `--USE TEMP B-TREE FOR ORDER BY | `--RIGHT - | `--SCAN t2 USING COVERING INDEX t2i1 + | `--SCAN TABLE t2 USING COVERING INDEX t2i1 `--RIGHT - |--SCAN t1 + |--SCAN TABLE t1 `--USE TEMP B-TREE FOR ORDER BY } @@ -489,145 +469,145 @@ # XVIDENCE-OF: R-47779-47605 sqlite> EXPLAIN QUERY PLAN SELECT a, b # FROM t1 WHERE a=1; -# 0|0|0|SCAN t1 +# 0|0|0|SCAN TABLE t1 # do_execsql_test 5.1.0 { CREATE TABLE t1(a INT, b INT, ex TEXT) } det 5.1.1 "SELECT a, b FROM t1 WHERE a=1" { - 0 0 0 {SCAN t1} + 0 0 0 {SCAN TABLE t1} } # XVIDENCE-OF: R-55852-17599 sqlite> CREATE INDEX i1 ON t1(a); # sqlite> EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1; -# 0|0|0|SEARCH t1 USING INDEX i1 +# 0|0|0|SEARCH TABLE t1 USING INDEX i1 # do_execsql_test 5.2.0 { CREATE INDEX i1 ON t1(a) } det 5.2.1 "SELECT a, b FROM t1 WHERE a=1" { - 0 0 0 {SEARCH t1 USING INDEX i1 (a=?)} + 0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)} } # XVIDENCE-OF: R-21179-11011 sqlite> CREATE INDEX i2 ON t1(a, b); # sqlite> EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1; -# 0|0|0|SEARCH t1 USING COVERING INDEX i2 (a=?) +# 0|0|0|SEARCH TABLE t1 USING COVERING INDEX i2 (a=?) # do_execsql_test 5.3.0 { CREATE INDEX i2 ON t1(a, b) } det 5.3.1 "SELECT a, b FROM t1 WHERE a=1" { - 0 0 0 {SEARCH t1 USING COVERING INDEX i2 (a=?)} + 0 0 0 {SEARCH TABLE t1 USING COVERING INDEX i2 (a=?)} } # XVIDENCE-OF: R-09991-48941 sqlite> EXPLAIN QUERY PLAN # SELECT t1.*, t2.* FROM t1, t2 WHERE t1.a=1 AND t1.b>2; -# 0|0|0|SEARCH t1 USING COVERING INDEX i2 (a=? AND b>?) -# 0|1|1|SCAN t2 +# 0|0|0|SEARCH TABLE t1 USING COVERING INDEX i2 (a=? AND b>?) +# 0|1|1|SCAN TABLE t2 # do_execsql_test 5.4.0 {CREATE TABLE t2(c INT, d INT, ex TEXT)} det 5.4.1 "SELECT t1.a, t2.c FROM t1, t2 WHERE t1.a=1 AND t1.b>2" { - 0 0 0 {SEARCH t1 USING COVERING INDEX i2 (a=? AND b>?)} - 0 1 1 {SCAN t2} + 0 0 0 {SEARCH TABLE t1 USING COVERING INDEX i2 (a=? AND b>?)} + 0 1 1 {SCAN TABLE t2} } # XVIDENCE-OF: R-33626-61085 sqlite> EXPLAIN QUERY PLAN # SELECT t1.*, t2.* FROM t2, t1 WHERE t1.a=1 AND t1.b>2; -# 0|0|1|SEARCH t1 USING COVERING INDEX i2 (a=? AND b>?) -# 0|1|0|SCAN t2 +# 0|0|1|SEARCH TABLE t1 USING COVERING INDEX i2 (a=? AND b>?) +# 0|1|0|SCAN TABLE t2 # det 5.5 "SELECT t1.a, t2.c FROM t2, t1 WHERE t1.a=1 AND t1.b>2" { - 0 0 1 {SEARCH t1 USING COVERING INDEX i2 (a=? AND b>?)} - 0 1 0 {SCAN t2} + 0 0 1 {SEARCH TABLE t1 USING COVERING INDEX i2 (a=? AND b>?)} + 0 1 0 {SCAN TABLE t2} } # XVIDENCE-OF: R-04002-25654 sqlite> CREATE INDEX i3 ON t1(b); # sqlite> EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=1 OR b=2; -# 0|0|0|SEARCH t1 USING COVERING INDEX i2 (a=?) -# 0|0|0|SEARCH t1 USING INDEX i3 (b=?) +# 0|0|0|SEARCH TABLE t1 USING COVERING INDEX i2 (a=?) +# 0|0|0|SEARCH TABLE t1 USING INDEX i3 (b=?) # do_execsql_test 5.5.0 {CREATE INDEX i3 ON t1(b)} det 5.6.1 "SELECT a, b FROM t1 WHERE a=1 OR b=2" { - 0 0 0 {SEARCH t1 USING COVERING INDEX i2 (a=?)} - 0 0 0 {SEARCH t1 USING INDEX i3 (b=?)} + 0 0 0 {SEARCH TABLE t1 USING COVERING INDEX i2 (a=?)} + 0 0 0 {SEARCH TABLE t1 USING INDEX i3 (b=?)} } # XVIDENCE-OF: R-24577-38891 sqlite> EXPLAIN QUERY PLAN # SELECT c, d FROM t2 ORDER BY c; -# 0|0|0|SCAN t2 +# 0|0|0|SCAN TABLE t2 # 0|0|0|USE TEMP B-TREE FOR ORDER BY # det 5.7 "SELECT c, d FROM t2 ORDER BY c" { - 0 0 0 {SCAN t2} + 0 0 0 {SCAN TABLE t2} 0 0 0 {USE TEMP B-TREE FOR ORDER BY} } # XVIDENCE-OF: R-58157-12355 sqlite> CREATE INDEX i4 ON t2(c); # sqlite> EXPLAIN QUERY PLAN SELECT c, d FROM t2 ORDER BY c; -# 0|0|0|SCAN t2 USING INDEX i4 +# 0|0|0|SCAN TABLE t2 USING INDEX i4 # do_execsql_test 5.8.0 {CREATE INDEX i4 ON t2(c)} det 5.8.1 "SELECT c, d FROM t2 ORDER BY c" { - 0 0 0 {SCAN t2 USING INDEX i4} + 0 0 0 {SCAN TABLE t2 USING INDEX i4} } # XVIDENCE-OF: R-13931-10421 sqlite> EXPLAIN QUERY PLAN SELECT # (SELECT b FROM t1 WHERE a=0), (SELECT a FROM t1 WHERE b=t2.c) FROM t2; -# 0|0|0|SCAN t2 +# 0|0|0|SCAN TABLE t2 # 0|0|0|EXECUTE SCALAR SUBQUERY 1 -# 1|0|0|SEARCH t1 USING COVERING INDEX i2 (a=?) +# 1|0|0|SEARCH TABLE t1 USING COVERING INDEX i2 (a=?) # 0|0|0|EXECUTE CORRELATED SCALAR SUBQUERY 2 -# 2|0|0|SEARCH t1 USING INDEX i3 (b=?) +# 2|0|0|SEARCH TABLE t1 USING INDEX i3 (b=?) # det 5.9 { SELECT (SELECT b FROM t1 WHERE a=0), (SELECT a FROM t1 WHERE b=t2.c) FROM t2 } { - 0 0 0 {SCAN t2 USING COVERING INDEX i4} + 0 0 0 {SCAN TABLE t2 USING COVERING INDEX i4} 0 0 0 {EXECUTE SCALAR SUBQUERY 1} - 1 0 0 {SEARCH t1 USING COVERING INDEX i2 (a=?)} + 1 0 0 {SEARCH TABLE t1 USING COVERING INDEX i2 (a=?)} 0 0 0 {EXECUTE CORRELATED SCALAR SUBQUERY 2} - 2 0 0 {SEARCH t1 USING INDEX i3 (b=?)} + 2 0 0 {SEARCH TABLE t1 USING INDEX i3 (b=?)} } # XVIDENCE-OF: R-50892-45943 sqlite> EXPLAIN QUERY PLAN # SELECT count(*) FROM (SELECT max(b) AS x FROM t1 GROUP BY a) GROUP BY x; -# 1|0|0|SCAN t1 USING COVERING INDEX i2 +# 1|0|0|SCAN TABLE t1 USING COVERING INDEX i2 # 0|0|0|SCAN SUBQUERY 1 # 0|0|0|USE TEMP B-TREE FOR GROUP BY # det 5.10 { SELECT count(*) FROM (SELECT max(b) AS x FROM t1 GROUP BY a) GROUP BY x } { - 1 0 0 {SCAN t1 USING COVERING INDEX i2} + 1 0 0 {SCAN TABLE t1 USING COVERING INDEX i2} 0 0 0 {SCAN SUBQUERY 1} 0 0 0 {USE TEMP B-TREE FOR GROUP BY} } # XVIDENCE-OF: R-46219-33846 sqlite> EXPLAIN QUERY PLAN # SELECT * FROM (SELECT * FROM t2 WHERE c=1), t1; -# 0|0|0|SEARCH t2 USING INDEX i4 (c=?) -# 0|1|1|SCAN t1 +# 0|0|0|SEARCH TABLE t2 USING INDEX i4 (c=?) +# 0|1|1|SCAN TABLE t1 # det 5.11 "SELECT a, b FROM (SELECT * FROM t2 WHERE c=1), t1" { - 0 0 0 {SEARCH t2 USING INDEX i4 (c=?)} - 0 1 1 {SCAN t1 USING COVERING INDEX i2} + 0 0 0 {SEARCH TABLE t2 USING INDEX i4 (c=?)} + 0 1 1 {SCAN TABLE t1 USING COVERING INDEX i2} } # XVIDENCE-OF: R-37879-39987 sqlite> EXPLAIN QUERY PLAN # SELECT a FROM t1 UNION SELECT c FROM t2; -# 1|0|0|SCAN t1 -# 2|0|0|SCAN t2 +# 1|0|0|SCAN TABLE t1 +# 2|0|0|SCAN TABLE t2 # 0|0|0|COMPOUND SUBQUERIES 1 AND 2 USING TEMP B-TREE (UNION) # det 5.12 "SELECT a,b FROM t1 UNION SELECT c, 99 FROM t2" { - 1 0 0 {SCAN t1 USING COVERING INDEX i2} - 2 0 0 {SCAN t2 USING COVERING INDEX i4} + 1 0 0 {SCAN TABLE t1 USING COVERING INDEX i2} + 2 0 0 {SCAN TABLE t2 USING COVERING INDEX i4} 0 0 0 {COMPOUND SUBQUERIES 1 AND 2 USING TEMP B-TREE (UNION)} } # XVIDENCE-OF: R-44864-63011 sqlite> EXPLAIN QUERY PLAN # SELECT a FROM t1 EXCEPT SELECT d FROM t2 ORDER BY 1; -# 1|0|0|SCAN t1 USING COVERING INDEX i2 -# 2|0|0|SCAN t2 2|0|0|USE TEMP B-TREE FOR ORDER BY +# 1|0|0|SCAN TABLE t1 USING COVERING INDEX i2 +# 2|0|0|SCAN TABLE t2 2|0|0|USE TEMP B-TREE FOR ORDER BY # 0|0|0|COMPOUND SUBQUERIES 1 AND 2 (EXCEPT) # det 5.13 "SELECT a FROM t1 EXCEPT SELECT d FROM t2 ORDER BY 1" { - 1 0 0 {SCAN t1 USING COVERING INDEX i1} - 2 0 0 {SCAN t2} + 1 0 0 {SCAN TABLE t1 USING COVERING INDEX i1} + 2 0 0 {SCAN TABLE t2} 2 0 0 {USE TEMP B-TREE FOR ORDER BY} 0 0 0 {COMPOUND SUBQUERIES 1 AND 2 (EXCEPT)} } @@ -667,8 +647,8 @@ do_peqp_test 6.1 { SELECT a, b FROM t1 EXCEPT SELECT d, 99 FROM t2 ORDER BY 1 } [string trimleft { -1 0 0 SCAN t1 USING COVERING INDEX i2 -2 0 0 SCAN t2 +1 0 0 SCAN TABLE t1 USING COVERING INDEX i2 +2 0 0 SCAN TABLE t2 2 0 0 USE TEMP B-TREE FOR ORDER BY 0 0 0 COMPOUND SUBQUERIES 1 AND 2 (EXCEPT) }] @@ -689,12 +669,12 @@ det 7.1 "SELECT count(*) FROM t1" { QUERY PLAN - `--SCAN t1 + `--SCAN TABLE t1 } det 7.2 "SELECT count(*) FROM t2" { QUERY PLAN - `--SCAN t2 USING COVERING INDEX i1 + `--SCAN TABLE t2 USING COVERING INDEX i1 } do_execsql_test 7.3 { @@ -713,12 +693,12 @@ det 7.4 "SELECT count(*) FROM t1" { QUERY PLAN - `--SCAN t1 + `--SCAN TABLE t1 } det 7.5 "SELECT count(*) FROM t2" { QUERY PLAN - `--SCAN t2 USING COVERING INDEX i1 + `--SCAN TABLE t2 USING COVERING INDEX i1 } #------------------------------------------------------------------------- @@ -734,37 +714,37 @@ det 8.1.1 "SELECT * FROM t2" { QUERY PLAN - `--SCAN t2 + `--SCAN TABLE t2 } det 8.1.2 "SELECT * FROM t2 WHERE rowid=?" { QUERY PLAN - `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) + `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) } det 8.1.3 "SELECT count(*) FROM t2" { QUERY PLAN - `--SCAN t2 + `--SCAN TABLE t2 } det 8.2.1 "SELECT * FROM t1" { QUERY PLAN - `--SCAN t1 + `--SCAN TABLE t1 } det 8.2.2 "SELECT * FROM t1 WHERE b=?" { QUERY PLAN - `--SEARCH t1 USING PRIMARY KEY (b=?) + `--SEARCH TABLE t1 USING PRIMARY KEY (b=?) } det 8.2.3 "SELECT * FROM t1 WHERE b=? AND c=?" { QUERY PLAN - `--SEARCH t1 USING PRIMARY KEY (b=? AND c=?) + `--SEARCH TABLE t1 USING PRIMARY KEY (b=? AND c=?) } det 8.2.4 "SELECT count(*) FROM t1" { QUERY PLAN - `--SCAN t1 + `--SCAN TABLE t1 } # 2018-08-16: While working on Fossil I discovered that EXPLAIN QUERY PLAN @@ -834,16 +814,16 @@ ORDER BY 1; } { QUERY PLAN - |--MATERIALIZE thread - | |--SCAN x USING INDEX forumthread + |--MATERIALIZE xxxxxx + | |--SCAN TABLE forumpost AS x USING INDEX forumthread | |--USING ROWID SEARCH ON TABLE private FOR IN-OPERATOR | |--CORRELATED SCALAR SUBQUERY xxxxxx - | | |--SEARCH forumpost USING COVERING INDEX forumthread (froot=?) + | | |--SEARCH TABLE forumpost USING COVERING INDEX forumthread (froot=?) | | `--USING ROWID SEARCH ON TABLE private FOR IN-OPERATOR | `--USE TEMP B-TREE FOR ORDER BY - |--SCAN thread - |--SEARCH blob USING INTEGER PRIMARY KEY (rowid=?) - |--SEARCH event USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN SUBQUERY xxxxxx + |--SEARCH TABLE blob USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE event USING INTEGER PRIMARY KEY (rowid=?) `--USE TEMP B-TREE FOR ORDER BY } diff -Nru sqlite3-3.35.0/test/exists2.test sqlite3-3.35.0-1/test/exists2.test --- sqlite3-3.35.0/test/exists2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/exists2.test 2021-04-04 17:23:21.000000000 +0000 @@ -50,7 +50,7 @@ do_execsql_eqp_test 1.2 { SELECT t1.* FROM t1 WHERE EXISTS(SELECT * FROM t2 WHERE t2.c=t1.a); } { - SEARCH t1 USING INTEGER PRIMARY KEY + SEARCH TABLE t1 USING INTEGER PRIMARY KEY } { 1 one 3 three 5 five 7 seven } @@ -58,7 +58,7 @@ do_execsql_eqp_test 1.3 { SELECT t1.* FROM t1 WHERE EXISTS(SELECT * FROM t2 WHERE t2.c+1=t1.a); } { - SEARCH t1 USING INTEGER PRIMARY KEY + SEARCH TABLE t1 USING INTEGER PRIMARY KEY } { 2 two 4 four 6 six } @@ -66,7 +66,7 @@ do_execsql_eqp_test 1.4 { SELECT t1.* FROM t1 WHERE EXISTS(SELECT * FROM t2 WHERE t2.c+1=t1.a+1); } { - SCAN t1 + SCAN TABLE t1 } { 1 one 3 three 5 five 7 seven } @@ -76,7 +76,7 @@ SELECT * FROM t2 WHERE t1.a=t2.c AND d IN (1, 2, 3) ); } { - SEARCH t1 USING INTEGER PRIMARY KEY + SEARCH TABLE t1 USING INTEGER PRIMARY KEY } { 1 one 3 three 5 five } @@ -86,7 +86,7 @@ SELECT * FROM t2 WHERE d IN (1, 2, 3)AND t1.a=t2.c ); } { - SEARCH t1 USING INTEGER PRIMARY KEY + SEARCH TABLE t1 USING INTEGER PRIMARY KEY } { 1 one 3 three 5 five } @@ -96,7 +96,7 @@ SELECT * FROM t2 WHERE d IN (1, 2, 3)AND t1.a=t2.c ); } { - SEARCH t1 USING INTEGER PRIMARY KEY + SEARCH TABLE t1 USING INTEGER PRIMARY KEY } { 1 one 3 three 5 five } @@ -123,7 +123,7 @@ do_execsql_eqp_test 2.3 { SELECT a FROM t3 WHERE EXISTS (SELECT 1 FROM t4 WHERE a=c) } { - SEARCH t3 USING PRIMARY KEY + SEARCH TABLE t3 USING PRIMARY KEY } { four one } @@ -131,7 +131,7 @@ do_execsql_eqp_test 2.4 { SELECT a FROM t3 WHERE EXISTS (SELECT 1 FROM t4 WHERE c=a) } { - SCAN t3 + SCAN TABLE t3 } { five four one two } @@ -143,7 +143,7 @@ do_execsql_eqp_test 2.6 { SELECT a FROM t3 WHERE EXISTS (SELECT 1 FROM t4 WHERE c=a) } { - SEARCH t3 USING COVERING INDEX t3anc + SEARCH TABLE t3 USING COVERING INDEX t3anc } { five four one two } @@ -154,7 +154,7 @@ do_execsql_eqp_test 2.7 { SELECT a FROM t3 WHERE EXISTS (SELECT 1 FROM t4 WHERE a=c) } { - SEARCH t3 USING PRIMARY KEY + SEARCH TABLE t3 USING PRIMARY KEY } { four one } diff -Nru sqlite3-3.35.0/test/existsfault.test sqlite3-3.35.0-1/test/existsfault.test --- sqlite3-3.35.0/test/existsfault.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/existsfault.test 2021-04-04 17:23:21.000000000 +0000 @@ -49,3 +49,4 @@ finish_test + diff -Nru sqlite3-3.35.0/test/external_reader.test sqlite3-3.35.0-1/test/external_reader.test --- sqlite3-3.35.0/test/external_reader.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/external_reader.test 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -# 2021 April 2 -# -# The author disclaims copyright to this source code. In place of -# a legal notice, here is a blessing: -# -# May you do good and not evil. -# May you find forgiveness for yourself and forgive others. -# May you share freely, never taking more than you give. -# -#*********************************************************************** -# - -set testdir [file dirname $argv0] -source $testdir/tester.tcl -source $testdir/lock_common.tcl -set testprefix external_reader - -ifcapable !wal { - finish_test - return -} -if {$::tcl_platform(platform)!="unix"} { - finish_test - return -} - -do_multiclient_test tn { - - set bExternal 1 - if {[info commands db3]!=""} { set bExternal 0 } - - do_test 1.$tn.0 { - sql1 { - PRAGMA journal_mode = wal; - CREATE TABLE t1(a, b); - INSERT INTO t1 VALUES(1, 2); - } - } {wal} - - do_test 1.$tn.1 { - sql2 { SELECT * FROM t1 } - } {1 2} - - do_test 1.$tn.2 { - code1 { - file_control_external_reader db - } - } {0} - - do_test 1.$tn.3 { - sql2 { - BEGIN; - SELECT * FROM t1; - } - } {1 2} - - do_test 1.$tn.4 { - code1 { - file_control_external_reader db - } - } $bExternal - - do_test 1.$tn.5 { - sql2 { COMMIT } - } {} - - do_test 1.$tn.6 { - code1 { file_control_external_reader db } - } 0 - -} - - -finish_test diff -Nru sqlite3-3.35.0/test/fts3aux1.test sqlite3-3.35.0-1/test/fts3aux1.test --- sqlite3-3.35.0/test/fts3aux1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/fts3aux1.test 2021-04-04 17:23:21.000000000 +0000 @@ -105,10 +105,10 @@ # do_execsql_test 2.1.1.1 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term='braid' -} {/*SCAN terms VIRTUAL TABLE INDEX 1:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 1:*/} do_execsql_test 2.1.1.2 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term='braid' -} {/*SCAN terms VIRTUAL TABLE INDEX 0:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/} # Now show that using "term='braid'" means the virtual table returns # only 1 row to SQLite, but "+term='braid'" means all 19 are returned. @@ -154,24 +154,24 @@ do_execsql_test 2.2.1.1 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term>'brain' -} {/*SCAN terms VIRTUAL TABLE INDEX 2:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 2:*/} do_execsql_test 2.2.1.2 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term>'brain' -} {/*SCAN terms VIRTUAL TABLE INDEX 0:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/} do_execsql_test 2.2.1.3 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term<'brain' -} {/*SCAN terms VIRTUAL TABLE INDEX 4:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 4:*/} do_execsql_test 2.2.1.4 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term<'brain' -} {/*SCAN terms VIRTUAL TABLE INDEX 0:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/} do_execsql_test 2.2.1.5 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term BETWEEN 'brags' AND 'brain' -} {/*SCAN terms VIRTUAL TABLE INDEX 6:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 6:*/} do_execsql_test 2.2.1.6 { EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term BETWEEN 'brags' AND 'brain' -} {/*SCAN terms VIRTUAL TABLE INDEX 0:*/} +} {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/} do_test 2.2.2.1 { set cnt 0 @@ -335,7 +335,7 @@ 9 1 "ORDER BY occurrences DESC" } { - set res {SCAN terms VIRTUAL TABLE INDEX 0:} + set res {SCAN TABLE terms VIRTUAL TABLE INDEX 0:} if {$sort} { append res {*USE TEMP B-TREE FOR ORDER BY} } set res "/*$res*/" @@ -413,8 +413,8 @@ SELECT y FROM x2, terms WHERE y = term AND col = '*' } { QUERY PLAN - |--SCAN x2 - `--SCAN terms VIRTUAL TABLE INDEX 1: + |--SCAN TABLE x2 + `--SCAN TABLE terms VIRTUAL TABLE INDEX 1: } { a b c d e f g h i j k l } @@ -423,8 +423,8 @@ SELECT y FROM terms, x2 WHERE y = term AND col = '*' } { QUERY PLAN - |--SCAN x2 - `--SCAN terms VIRTUAL TABLE INDEX 1: + |--SCAN TABLE x2 + `--SCAN TABLE terms VIRTUAL TABLE INDEX 1: } { a b c d e f g h i j k l } @@ -433,8 +433,8 @@ SELECT y FROM x3, terms WHERE y = term AND col = '*' } { QUERY PLAN - |--SCAN terms VIRTUAL TABLE INDEX 0: - `--SEARCH x3 USING COVERING INDEX i1 (y=?) + |--SCAN TABLE terms VIRTUAL TABLE INDEX 0: + `--SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) } { a b c d e f g h i j k l } @@ -443,8 +443,8 @@ SELECT y FROM terms, x3 WHERE y = term AND occurrences>1 AND col = '*' } { QUERY PLAN - |--SCAN terms VIRTUAL TABLE INDEX 0: - `--SEARCH x3 USING COVERING INDEX i1 (y=?) + |--SCAN TABLE terms VIRTUAL TABLE INDEX 0: + `--SEARCH TABLE x3 USING COVERING INDEX i1 (y=?) } { a k l } diff -Nru sqlite3-3.35.0/test/fts3corrupt6.test sqlite3-3.35.0-1/test/fts3corrupt6.test --- sqlite3-3.35.0/test/fts3corrupt6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/fts3corrupt6.test 2021-04-04 17:23:21.000000000 +0000 @@ -64,3 +64,5 @@ set sqlite_fts3_enable_parentheses $saved_sqlite_fts3_enable_parentheses finish_test + + diff -Nru sqlite3-3.35.0/test/fts3join.test sqlite3-3.35.0-1/test/fts3join.test --- sqlite3-3.35.0/test/fts3join.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/fts3join.test 2021-04-04 17:23:21.000000000 +0000 @@ -97,10 +97,10 @@ WHERE t4.y = ?; } { QUERY PLAN - |--MATERIALIZE rr - | `--SCAN ft4 VIRTUAL TABLE INDEX 3: - |--SCAN t4 - `--SEARCH rr USING AUTOMATIC COVERING INDEX (docid=?) + |--MATERIALIZE xxxxxx + | `--SCAN TABLE ft4 VIRTUAL TABLE INDEX 3: + |--SCAN TABLE t4 + `--SEARCH SUBQUERY xxxxxx AS rr USING AUTOMATIC COVERING INDEX (docid=?) } finish_test diff -Nru sqlite3-3.35.0/test/fts3query.test sqlite3-3.35.0-1/test/fts3query.test --- sqlite3-3.35.0/test/fts3query.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/fts3query.test 2021-04-04 17:23:21.000000000 +0000 @@ -119,29 +119,29 @@ SELECT t1.number FROM t1, ft WHERE t1.number=ft.rowid ORDER BY t1.date } { QUERY PLAN - |--SCAN t1 USING COVERING INDEX i1 - `--SCAN ft VIRTUAL TABLE INDEX 1: + |--SCAN TABLE t1 USING COVERING INDEX i1 + `--SCAN TABLE ft VIRTUAL TABLE INDEX 1: } do_eqp_test fts3query-4.3 { SELECT t1.number FROM ft, t1 WHERE t1.number=ft.rowid ORDER BY t1.date } { QUERY PLAN - |--SCAN t1 USING COVERING INDEX i1 - `--SCAN ft VIRTUAL TABLE INDEX 1: + |--SCAN TABLE t1 USING COVERING INDEX i1 + `--SCAN TABLE ft VIRTUAL TABLE INDEX 1: } do_eqp_test fts3query-4.4 { SELECT t1.number FROM t1, bt WHERE t1.number=bt.rowid ORDER BY t1.date } { QUERY PLAN - |--SCAN t1 USING COVERING INDEX i1 - `--SEARCH bt USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 USING COVERING INDEX i1 + `--SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test fts3query-4.5 { SELECT t1.number FROM bt, t1 WHERE t1.number=bt.rowid ORDER BY t1.date } { QUERY PLAN - |--SCAN t1 USING COVERING INDEX i1 - `--SEARCH bt USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 USING COVERING INDEX i1 + `--SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?) } diff -Nru sqlite3-3.35.0/test/fts3snippet2.test sqlite3-3.35.0-1/test/fts3snippet2.test --- sqlite3-3.35.0/test/fts3snippet2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/fts3snippet2.test 2021-04-04 17:23:21.000000000 +0000 @@ -57,3 +57,4 @@ set sqlite_fts3_enable_parentheses 0 finish_test + diff -Nru sqlite3-3.35.0/test/fts4upfrom.test sqlite3-3.35.0-1/test/fts4upfrom.test --- sqlite3-3.35.0/test/fts4upfrom.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/fts4upfrom.test 2021-04-04 17:23:21.000000000 +0000 @@ -137,3 +137,4 @@ } finish_test + diff -Nru sqlite3-3.35.0/test/hook.test sqlite3-3.35.0-1/test/hook.test --- sqlite3-3.35.0/test/hook.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/hook.test 2021-04-04 17:23:22.000000000 +0000 @@ -1015,3 +1015,4 @@ } {1 {UNIQUE constraint failed: t4.a}} finish_test + diff -Nru sqlite3-3.35.0/test/in4.test sqlite3-3.35.0-1/test/in4.test --- sqlite3-3.35.0/test/in4.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/in4.test 2021-04-04 17:23:22.000000000 +0000 @@ -330,7 +330,7 @@ do_execsql_test in4-6.1-eqp { EXPLAIN QUERY PLAN SELECT * FROM t6a, t6b WHERE a=3 AND b IN (c); -} {~/SCAN t6a/} +} {~/SCAN TABLE t6a/} do_execsql_test in4-6.2 { SELECT * FROM t6a, t6b WHERE a=3 AND c IN (b); } {3 4 4 44} diff -Nru sqlite3-3.35.0/test/index6.test sqlite3-3.35.0-1/test/index6.test --- sqlite3-3.35.0/test/index6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/index6.test 2021-04-04 17:23:22.000000000 +0000 @@ -158,7 +158,7 @@ EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a=5; } -} {/(SEARCH|SCAN) t2 USING INDEX t2a1 /} +} {/.* TABLE t2 USING INDEX t2a1 .*/} ifcapable stat4 { execsql ANALYZE do_test index6-2.3stat4 { @@ -166,21 +166,21 @@ EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a IS NOT NULL; } - } {/(SEARCH|SCAN) t2 USING INDEX t2a1 /} + } {/.* TABLE t2 USING INDEX t2a1 .*/} } else { do_test index6-2.3stat4 { execsql { EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a IS NOT NULL AND a>0; } - } {/(SEARCH|SCANE) t2 USING INDEX t2a1 /} + } {/.* TABLE t2 USING INDEX t2a1 .*/} } do_test index6-2.4 { execsql { EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a IS NULL; } -} {~/INDEX t2a1/} +} {~/.*INDEX t2a1.*/} do_execsql_test index6-2.101 { DROP INDEX t2a1; @@ -319,8 +319,8 @@ SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a) } { QUERY PLAN - |--SCAN t8a - `--SEARCH t8b USING INDEX i8c (y=?) + |--SCAN TABLE t8a + `--SEARCH TABLE t8b USING INDEX i8c (y=?) } do_execsql_test index6-8.2 { diff -Nru sqlite3-3.35.0/test/index7.test sqlite3-3.35.0-1/test/index7.test --- sqlite3-3.35.0/test/index7.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/index7.test 2021-04-04 17:23:22.000000000 +0000 @@ -113,7 +113,7 @@ do_execsql_test index7-1.7eqp { EXPLAIN QUERY PLAN SELECT b FROM t1 WHERE a NOT LIKE 'abc%' AND a=7 ORDER BY +b; -} {/SEARCH t1 USING COVERING INDEX bad1 /} +} {/SEARCH TABLE t1 USING COVERING INDEX bad1 /} do_execsql_test index7-1.8 { DELETE FROM t1 WHERE c>=101; DROP INDEX IF EXISTS bad1; @@ -202,28 +202,28 @@ EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a=5; } -} {/(SCAN|SEARCH) t2 USING COVERING INDEX t2a1 /} +} {/.* TABLE t2 USING COVERING INDEX t2a1 .*/} ifcapable stat4 { do_test index7-2.3stat4 { execsql { EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a IS NOT NULL; } - } {/(SCAN|SEARCH) t2 USING COVERING INDEX t2a1 /} + } {/.* TABLE t2 USING COVERING INDEX t2a1 .*/} } else { do_test index7-2.3stat4 { execsql { EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a IS NOT NULL AND a>0; } - } {/(SCAN|SEARCH) t2 USING COVERING INDEX t2a1 /} + } {/.* TABLE t2 USING COVERING INDEX t2a1 .*/} } do_test index7-2.4 { execsql { EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE a IS NULL; } -} {~/INDEX t2a1/} +} {~/.*INDEX t2a1.*/} do_execsql_test index7-2.101 { DROP INDEX t2a1; @@ -321,7 +321,7 @@ } do_eqp_test index7-6.4 { SELECT * FROM v4 WHERE d='xyz' AND c='def' -} {SEARCH t4 USING INDEX i4 (c=?)} +} {SEARCH TABLE t4 USING INDEX i4 (c=?)} do_catchsql_test index7-6.5 { CREATE INDEX t5a ON t5(a) WHERE a=#1; @@ -349,7 +349,7 @@ INSERT INTO t1(x) VALUES(1),(2); ANALYZE; EXPLAIN QUERY PLAN SELECT 1 FROM t1 WHERE y=5; -} {/SEARCH t1 USING COVERING INDEX t1y/} +} {/SEARCH TABLE t1 USING COVERING INDEX t1y/} finish_test diff -Nru sqlite3-3.35.0/test/index8.test sqlite3-3.35.0-1/test/index8.test --- sqlite3-3.35.0/test/index8.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/index8.test 2021-04-04 17:23:22.000000000 +0000 @@ -41,7 +41,7 @@ do_execsql_test 1.0eqp { EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=4 ORDER BY a, b LIMIT 2; -} {/SCAN t1 USING INDEX t1abc/} +} {/SCAN TABLE t1 USING INDEX t1abc/} # If we change the index so that it no longer covers the WHERE clause, # then we should (correctly) revert to using a table scan. diff -Nru sqlite3-3.35.0/test/indexedby.test sqlite3-3.35.0-1/test/indexedby.test --- sqlite3-3.35.0/test/indexedby.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/indexedby.test 2021-04-04 17:23:22.000000000 +0000 @@ -42,16 +42,16 @@ # do_eqp_test indexedby-1.2 { select * from t1 WHERE a = 10; -} {SEARCH t1 USING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING INDEX i1 (a=?)} do_eqp_test indexedby-1.3 { select * from t1 ; -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test indexedby-1.4 { select * from t1, t2 WHERE c = 10; } { QUERY PLAN - |--SEARCH t2 USING INDEX i3 (c=?) - `--SCAN t1 + |--SEARCH TABLE t2 USING INDEX i3 (c=?) + `--SCAN TABLE t1 } # Parser tests. Test that an INDEXED BY or NOT INDEX clause can be @@ -118,21 +118,21 @@ # do_eqp_test indexedby-3.1 { SELECT * FROM t1 WHERE a = 'one' AND b = 'two' -} {/SEARCH t1 USING INDEX/} +} {/SEARCH TABLE t1 USING INDEX/} do_eqp_test indexedby-3.1.1 { SELECT * FROM t1 NOT INDEXED WHERE a = 'one' AND b = 'two' -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test indexedby-3.1.2 { SELECT * FROM t1 NOT INDEXED WHERE rowid=1 -} {/SEARCH t1 USING INTEGER PRIMARY KEY .rowid=/} +} {/SEARCH TABLE t1 USING INTEGER PRIMARY KEY .rowid=/} do_eqp_test indexedby-3.2 { SELECT * FROM t1 INDEXED BY i1 WHERE a = 'one' AND b = 'two' -} {SEARCH t1 USING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING INDEX i1 (a=?)} do_eqp_test indexedby-3.3 { SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' AND b = 'two' -} {SEARCH t1 USING INDEX i2 (b=?)} +} {SEARCH TABLE t1 USING INDEX i2 (b=?)} do_test indexedby-3.4 { catchsql { SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' } } {0 {}} @@ -148,10 +148,10 @@ do_eqp_test indexedby-3.8 { SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 ORDER BY e -} {SCAN t3 USING INDEX sqlite_autoindex_t3_1} +} {SCAN TABLE t3 USING INDEX sqlite_autoindex_t3_1} do_eqp_test indexedby-3.9 { SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE e = 10 -} {SEARCH t3 USING INDEX sqlite_autoindex_t3_1 (e=?)} +} {SEARCH TABLE t3 USING INDEX sqlite_autoindex_t3_1 (e=?)} do_test indexedby-3.10 { catchsql { SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE f = 10 } } {0 {}} @@ -165,15 +165,15 @@ SELECT * FROM t1, t2 WHERE a = c } { QUERY PLAN - |--SCAN t1 - `--SEARCH t2 USING INDEX i3 (c=?) + |--SCAN TABLE t1 + `--SEARCH TABLE t2 USING INDEX i3 (c=?) } do_eqp_test indexedby-4.2 { SELECT * FROM t1 INDEXED BY i1, t2 WHERE a = c } { QUERY PLAN - |--SCAN t1 USING INDEX i1 - `--SEARCH t2 USING INDEX i3 (c=?) + |--SCAN TABLE t1 USING INDEX i1 + `--SEARCH TABLE t2 USING INDEX i3 (c=?) } do_test indexedby-4.3 { catchsql { @@ -193,10 +193,10 @@ do_execsql_test indexedby-5.1 { CREATE VIEW v2 AS SELECT * FROM t1 INDEXED BY i1 WHERE a > 5; EXPLAIN QUERY PLAN SELECT * FROM v2 -} {/*SEARCH t1 USING INDEX i1 (a>?)*/} +} {/*SEARCH TABLE t1 USING INDEX i1 (a>?)*/} do_execsql_test indexedby-5.2 { EXPLAIN QUERY PLAN SELECT * FROM v2 WHERE b = 10 -} {/*SEARCH t1 USING INDEX i1 (a>?)*/} +} {/*SEARCH TABLE t1 USING INDEX i1 (a>?)*/} do_test indexedby-5.3 { execsql { DROP INDEX i1 } catchsql { SELECT * FROM v2 } @@ -217,10 +217,10 @@ # do_eqp_test indexedby-6.1 { SELECT * FROM t1 WHERE b = 10 ORDER BY rowid -} {SEARCH t1 USING INDEX i2 (b=?)} +} {SEARCH TABLE t1 USING INDEX i2 (b=?)} do_eqp_test indexedby-6.2 { SELECT * FROM t1 NOT INDEXED WHERE b = 10 ORDER BY rowid -} {SCAN t1} +} {SCAN TABLE t1} # EVIDENCE-OF: R-40297-14464 The INDEXED BY phrase forces the SQLite # query planner to use a particular named index on a DELETE, SELECT, or @@ -230,19 +230,19 @@ # do_eqp_test indexedby-7.1 { DELETE FROM t1 WHERE a = 5 -} {SEARCH t1 USING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING INDEX i1 (a=?)} do_eqp_test indexedby-7.2 { DELETE FROM t1 NOT INDEXED WHERE a = 5 -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test indexedby-7.3 { DELETE FROM t1 INDEXED BY i1 WHERE a = 5 -} {SEARCH t1 USING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING INDEX i1 (a=?)} do_eqp_test indexedby-7.4 { DELETE FROM t1 INDEXED BY i1 WHERE a = 5 AND b = 10 -} {SEARCH t1 USING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING INDEX i1 (a=?)} do_eqp_test indexedby-7.5 { DELETE FROM t1 INDEXED BY i2 WHERE a = 5 AND b = 10 -} {SEARCH t1 USING INDEX i2 (b=?)} +} {SEARCH TABLE t1 USING INDEX i2 (b=?)} do_test indexedby-7.6 { catchsql { DELETE FROM t1 INDEXED BY i2 WHERE a = 5} } {0 {}} @@ -251,19 +251,19 @@ # do_eqp_test indexedby-8.1 { UPDATE t1 SET rowid=rowid+1 WHERE a = 5 -} {SEARCH t1 USING COVERING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING COVERING INDEX i1 (a=?)} do_eqp_test indexedby-8.2 { UPDATE t1 NOT INDEXED SET rowid=rowid+1 WHERE a = 5 -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test indexedby-8.3 { UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 -} {SEARCH t1 USING COVERING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING COVERING INDEX i1 (a=?)} do_eqp_test indexedby-8.4 { UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 AND b = 10 -} {SEARCH t1 USING INDEX i1 (a=?)} +} {SEARCH TABLE t1 USING INDEX i1 (a=?)} do_eqp_test indexedby-8.5 { UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5 AND b = 10 -} {SEARCH t1 USING INDEX i2 (b=?)} +} {SEARCH TABLE t1 USING INDEX i2 (b=?)} do_test indexedby-8.6 { catchsql { UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5} } {0 {}} @@ -338,7 +338,7 @@ } {1 1 3} do_eqp_test 11.5 { SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid='3.0'; -} {SEARCH x1 USING COVERING INDEX x1i (a=? AND b=? AND rowid=?)} +} {SEARCH TABLE x1 USING COVERING INDEX x1i (a=? AND b=? AND rowid=?)} do_execsql_test 11.6 { CREATE TABLE x2(c INTEGER PRIMARY KEY, a, b TEXT); @@ -359,7 +359,7 @@ } {1 1 3} do_eqp_test 11.10 { SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c='3.0'; -} {SEARCH x2 USING COVERING INDEX x2i (a=? AND b=? AND rowid=?)} +} {SEARCH TABLE x2 USING COVERING INDEX x2i (a=? AND b=? AND rowid=?)} #------------------------------------------------------------------------- # Check INDEXED BY works (throws an exception) with partial indexes that diff -Nru sqlite3-3.35.0/test/indexexpr1.test sqlite3-3.35.0-1/test/indexexpr1.test --- sqlite3-3.35.0/test/indexexpr1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/indexexpr1.test 2021-04-04 17:23:22.000000000 +0000 @@ -97,14 +97,14 @@ do_execsql_test indexexpr1-170eqp { EXPLAIN QUERY PLAN SELECT length(a) FROM t1 ORDER BY length(a); -} {/SCAN t1 USING INDEX t1alen/} +} {/SCAN TABLE t1 USING INDEX t1alen/} do_execsql_test indexexpr1-171 { SELECT length(a) FROM t1 ORDER BY length(a) DESC; } {52 38 29 27 25 20} do_execsql_test indexexpr1-171eqp { EXPLAIN QUERY PLAN SELECT length(a) FROM t1 ORDER BY length(a) DESC; -} {/SCAN t1 USING INDEX t1alen/} +} {/SCAN TABLE t1 USING INDEX t1alen/} do_execsql_test indexexpr1-200 { DROP TABLE t1; diff -Nru sqlite3-3.35.0/test/indexexpr2.test sqlite3-3.35.0-1/test/indexexpr2.test --- sqlite3-3.35.0/test/indexexpr2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/indexexpr2.test 2021-04-04 17:23:22.000000000 +0000 @@ -93,7 +93,7 @@ ORDER BY json_extract(x, '$.b') COLLATE nocase; } [string map {"\n " \n} { QUERY PLAN - |--SCAN t2 + |--SCAN TABLE t2 `--USE TEMP B-TREE FOR GROUP BY }] @@ -108,7 +108,7 @@ ORDER BY json_extract(x, '$.b') COLLATE nocase; } [string map {"\n " \n} { QUERY PLAN - |--SEARCH t3 USING INDEX i3 (=?) + |--SEARCH TABLE t3 USING INDEX i3 (=?) `--USE TEMP B-TREE FOR GROUP BY }] } @@ -154,7 +154,7 @@ do_execsql_test 3.4.5eqp { EXPLAIN QUERY PLAN SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE nocase; -} {/SCAN t4 USING INDEX i4/} +} {/SCAN TABLE t4 USING INDEX i4/} do_execsql_test 3.4.6 { SELECT * FROM t4 ORDER BY Substr(a,-2) COLLATE binary; } {.ABC1 1 .ABC3 3 .abc2 2 .abc4 4} @@ -265,7 +265,7 @@ } {1 123 2 123 3 123abc 4 123.0} do_eqp_test 6.1.3 { SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123; -} {SEARCH x1 USING INDEX x1i (=?)} +} {SEARCH TABLE x1 USING INDEX x1i (=?)} do_execsql_test 6.2.1 { SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123; @@ -276,7 +276,7 @@ } {1 123 2 123} do_eqp_test 6.2.3 { SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123; -} {SEARCH x1 USING INDEX x1i2 (=?)} +} {SEARCH TABLE x1 USING INDEX x1i2 (=?)} do_execsql_test 7.0 { CREATE TABLE IF NOT EXISTS t0(c0); diff -Nru sqlite3-3.35.0/test/intpkey.test sqlite3-3.35.0-1/test/intpkey.test --- sqlite3-3.35.0/test/intpkey.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/intpkey.test 2021-04-04 17:23:22.000000000 +0000 @@ -129,7 +129,7 @@ EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a==4; } -} {/SEARCH t1 /} +} {/SEARCH TABLE t1 /} # Try to insert a non-integer value into the primary key field. This # should result in a data type mismatch. diff -Nru sqlite3-3.35.0/test/join2.test sqlite3-3.35.0-1/test/join2.test --- sqlite3-3.35.0/test/join2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/join2.test 2021-04-04 17:23:22.000000000 +0000 @@ -113,16 +113,16 @@ SELECT v2 FROM t1 LEFT JOIN t2 USING (k2) LEFT JOIN t3_1 USING (k3); } { QUERY PLAN - |--SCAN t1 - `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 + `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test 3.2 { SELECT v2 FROM t1 LEFT JOIN t2 USING (k2) LEFT JOIN t3_2 USING (k3); } { QUERY PLAN - |--SCAN t1 - `--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t1 + `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) } #------------------------------------------------------------------------- @@ -161,16 +161,16 @@ SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2); } { QUERY PLAN - |--SCAN c1 - |--SEARCH c2 USING INTEGER PRIMARY KEY (rowid=?) - `--SEARCH c3 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE c1 + |--SEARCH TABLE c2 USING INTEGER PRIMARY KEY (rowid=?) + `--SEARCH TABLE c3 USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test 4.1.6 { SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1); } { QUERY PLAN - |--SCAN c1 - `--SEARCH c3 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE c1 + `--SEARCH TABLE c3 USING INTEGER PRIMARY KEY (rowid=?) } do_execsql_test 4.2.0 { @@ -208,16 +208,16 @@ SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2); } { QUERY PLAN - |--SCAN c1 - |--SEARCH c2 USING INDEX sqlite_autoindex_c2_1 (k=?) - `--SEARCH c3 USING INDEX sqlite_autoindex_c3_1 (k=?) + |--SCAN TABLE c1 + |--SEARCH TABLE c2 USING INDEX sqlite_autoindex_c2_1 (k=?) + `--SEARCH TABLE c3 USING INDEX sqlite_autoindex_c3_1 (k=?) } do_eqp_test 4.2.6 { SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1); } { QUERY PLAN - |--SCAN c1 - `--SEARCH c3 USING INDEX sqlite_autoindex_c3_1 (k=?) + |--SCAN TABLE c1 + `--SEARCH TABLE c3 USING INDEX sqlite_autoindex_c3_1 (k=?) } # 2017-11-23 (Thanksgiving day) @@ -251,11 +251,11 @@ } do_eqp_test 5.1 { SELECT s1.a FROM s1 left join s2 using (a); -} {SCAN s1} +} {SCAN TABLE s1} do_eqp_test 5.2 { SELECT s1.a FROM s1 left join s3 using (a); -} {SCAN s1} +} {SCAN TABLE s1} do_execsql_test 6.0 { CREATE TABLE u1(a INTEGER PRIMARY KEY, b, c); @@ -264,7 +264,7 @@ } do_eqp_test 6.1 { SELECT u2.* FROM u2 LEFT JOIN u1 ON( u1.a=u2.a AND u1.b=u2.b AND u1.c=u2.c ); -} {SCAN u2} +} {SCAN TABLE u2} db close sqlite3 db :memory: diff -Nru sqlite3-3.35.0/test/join5.test sqlite3-3.35.0-1/test/join5.test --- sqlite3-3.35.0/test/join5.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/join5.test 2021-04-04 17:23:22.000000000 +0000 @@ -277,12 +277,12 @@ ); } { QUERY PLAN - |--SCAN t1 + |--SCAN TABLE t1 `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t2 USING INDEX t2xy (x=? AND y=?) + | `--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?) `--INDEX 2 - `--SEARCH t2 USING INDEX t2xy (x=? AND y=?) + `--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?) } do_execsql_test 7.3 { @@ -302,8 +302,8 @@ SELECT * FROM t3 LEFT JOIN t4 ON (t4.x = t3.x) WHERE (t4.y = ? OR t4.z = ?); } { QUERY PLAN - |--SCAN t3 - `--SEARCH t4 USING INDEX t4xz (x=?) + |--SCAN TABLE t3 + `--SEARCH TABLE t4 USING INDEX t4xz (x=?) } reset_db diff -Nru sqlite3-3.35.0/test/like3.test sqlite3-3.35.0-1/test/like3.test --- sqlite3-3.35.0/test/like3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/like3.test 2021-04-04 17:23:22.000000000 +0000 @@ -125,7 +125,7 @@ SELECT x FROM t5a WHERE x LIKE '/%'; } { QUERY PLAN - `--SCAN t5a + `--SCAN TABLE t5a } do_execsql_test like3-5.110 { SELECT x FROM t5a WHERE x LIKE '/a%'; @@ -135,7 +135,7 @@ SELECT x FROM t5a WHERE x LIKE '/a%'; } { QUERY PLAN - `--SEARCH t5a USING COVERING INDEX sqlite_autoindex_t5a_1 (x>? AND x? AND x? AND x? AND x? AND path? AND path? AND path? AND path? AND path? AND path? AND path? AND path? AND path? AND path? AND path? AND path? AND b? AND b'd' AND c=2 } \ - {SEARCH c1 USING INDEX c1cd (c=?)} + {SEARCH TABLE c1 USING INDEX c1cd (c=?)} do_eqp_test 3.1.3 { SELECT * FROM c1 WHERE a=1 AND b>'l' AND c=2 } \ - {SEARCH c1 USING INDEX c1ab (a=? AND b>?)} + {SEARCH TABLE c1 USING INDEX c1ab (a=? AND b>?)} do_eqp_test 3.2.1 { SELECT * FROM c1 WHERE a=1 AND c>1 } \ - {SEARCH c1 USING INDEX c1cd (c>?)} + {SEARCH TABLE c1 USING INDEX c1cd (c>?)} do_eqp_test 3.2.2 { SELECT * FROM c1 WHERE a=1 AND c>0 } \ - {SEARCH c1 USING INDEX c1ab (a=?)} + {SEARCH TABLE c1 USING INDEX c1ab (a=?)} do_eqp_test 3.2.3 { SELECT * FROM c1 WHERE a=1 AND c>=1 } \ - {SEARCH c1 USING INDEX c1ab (a=?)} + {SEARCH TABLE c1 USING INDEX c1ab (a=?)} do_eqp_test 3.2.4 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'c') } \ - {SEARCH c1 USING INDEX c1ab (a=?)} + {SEARCH TABLE c1 USING INDEX c1ab (a=?)} do_eqp_test 3.2.5 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'o') } \ - {SEARCH c1 USING INDEX c1cd ((c,d)>(?,?))} + {SEARCH TABLE c1 USING INDEX c1cd ((c,d)>(?,?))} do_eqp_test 3.2.6 { SELECT * FROM c1 WHERE a=1 AND (c, +b)>(1, 'c') } \ - {SEARCH c1 USING INDEX c1ab (a=?)} + {SEARCH TABLE c1 USING INDEX c1ab (a=?)} } @@ -234,11 +234,11 @@ (c) IN (SELECT y FROM d1) } { QUERY PLAN - |--SEARCH d2 USING INDEX d2ab (a=? AND b=?) + |--SEARCH TABLE d2 USING INDEX d2ab (a=? AND b=?) |--LIST SUBQUERY xxxxxx - | `--SCAN d1 + | `--SCAN TABLE d1 `--LIST SUBQUERY xxxxxx - `--SCAN d1 + `--SCAN TABLE d1 } do_execsql_test 6.0 { @@ -249,23 +249,23 @@ do_eqp_test 6.1 { SELECT * FROM e1 WHERE (a, b) > (?, ?) -} {SEARCH e1 USING INDEX e1ab ((a,b)>(?,?))} +} {SEARCH TABLE e1 USING INDEX e1ab ((a,b)>(?,?))} do_eqp_test 6.2 { SELECT * FROM e1 WHERE (a, b) < (?, ?) -} {SEARCH e1 USING INDEX e1ab ((a,b)<(?,?))} +} {SEARCH TABLE e1 USING INDEX e1ab ((a,b)<(?,?))} do_eqp_test 6.3 { SELECT * FROM e1 WHERE c = ? AND (d, e) > (?, ?) -} {SEARCH e1 USING INDEX e1cde (c=? AND (d,e)>(?,?))} +} {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)>(?,?))} do_eqp_test 6.4 { SELECT * FROM e1 WHERE c = ? AND (d, e) < (?, ?) -} {SEARCH e1 USING INDEX e1cde (c=? AND (d,e)<(?,?))} +} {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)<(?,?))} do_eqp_test 6.5 { SELECT * FROM e1 WHERE (d, e) BETWEEN (?, ?) AND (?, ?) AND c = ? -} {SEARCH e1 USING INDEX e1cde (c=? AND (d,e)>(?,?) AND (d,e)<(?,?))} +} {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)>(?,?) AND (d,e)<(?,?))} #------------------------------------------------------------------------- diff -Nru sqlite3-3.35.0/test/rowvalue.test sqlite3-3.35.0-1/test/rowvalue.test --- sqlite3-3.35.0/test/rowvalue.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/rowvalue.test 2021-04-04 17:23:22.000000000 +0000 @@ -175,19 +175,19 @@ foreach {tn sql res eqp} { 1 "SELECT * FROM xy WHERE (i, j) IS (2, 2)" {2 2 2} - "SEARCH xy USING INTEGER PRIMARY KEY (rowid=?)" + "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid=?)" 2 "SELECT * FROM xy WHERE (k, j) < (2, 3)" {1 1 1 2 2 2} - "SCAN xy" + "SCAN TABLE xy" 3 "SELECT * FROM xy WHERE (i, j) < (2, 3)" {1 1 1 2 2 2} - "SEARCH xy USING INTEGER PRIMARY KEY (rowid (2, 1)" {2 2 2 3 3 3 4 4 4} - "SEARCH xy USING INTEGER PRIMARY KEY (rowid>?)" + "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)" 5 "SELECT * FROM xy WHERE (i, j) > ('2', 1)" {2 2 2 3 3 3 4 4 4} - "SEARCH xy USING INTEGER PRIMARY KEY (rowid>?)" + "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)" } { do_eqp_test 7.$tn.1 $sql $eqp diff -Nru sqlite3-3.35.0/test/scanstatus.test sqlite3-3.35.0-1/test/scanstatus.test --- sqlite3-3.35.0/test/scanstatus.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/scanstatus.test 2021-04-04 17:23:22.000000000 +0000 @@ -45,8 +45,8 @@ do_execsql_test 1.1 { SELECT count(*) FROM t1, t2; } 6 do_scanstatus_test 1.2 { - nLoop 1 nVisit 2 nEst 1048576.0 zName t1 zExplain {SCAN t1} - nLoop 2 nVisit 6 nEst 1048576.0 zName t2 zExplain {SCAN t2} + nLoop 1 nVisit 2 nEst 1048576.0 zName t1 zExplain {SCAN TABLE t1} + nLoop 2 nVisit 6 nEst 1048576.0 zName t2 zExplain {SCAN TABLE t2} } do_execsql_test 1.3 { @@ -54,8 +54,8 @@ SELECT count(*) FROM t1, t2; } 6 do_scanstatus_test 1.4 { - nLoop 1 nVisit 2 nEst 2.0 zName t1 zExplain {SCAN t1} - nLoop 2 nVisit 6 nEst 3.0 zName t2 zExplain {SCAN t2} + nLoop 1 nVisit 2 nEst 2.0 zName t1 zExplain {SCAN TABLE t1} + nLoop 2 nVisit 6 nEst 3.0 zName t2 zExplain {SCAN TABLE t2} } do_execsql_test 1.5 { ANALYZE } @@ -64,8 +64,8 @@ } 4 do_scanstatus_test 1.7 { nLoop 1 nVisit 2 nEst 2.0 zName t2 zExplain - {SEARCH t2 USING INTEGER PRIMARY KEY (rowid>?)} - nLoop 2 nVisit 4 nEst 2.0 zName t1 zExplain {SCAN t1} + {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid>?)} + nLoop 2 nVisit 4 nEst 2.0 zName t1 zExplain {SCAN TABLE t1} } do_execsql_test 1.8 { @@ -74,8 +74,8 @@ do_scanstatus_test 1.9 { nLoop 2 nVisit 4 nEst 2.0 zName t2 zExplain - {SEARCH t2 USING INTEGER PRIMARY KEY (rowid>?)} - nLoop 4 nVisit 8 nEst 2.0 zName t1 zExplain {SCAN t1} + {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid>?)} + nLoop 4 nVisit 8 nEst 2.0 zName t1 zExplain {SCAN TABLE t1} } do_test 1.9 { @@ -84,8 +84,8 @@ do_scanstatus_test 1.10 { nLoop 0 nVisit 0 nEst 2.0 zName t2 zExplain - {SEARCH t2 USING INTEGER PRIMARY KEY (rowid>?)} - nLoop 0 nVisit 0 nEst 2.0 zName t1 zExplain {SCAN t1} + {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid>?)} + nLoop 0 nVisit 0 nEst 2.0 zName t1 zExplain {SCAN TABLE t1} } #------------------------------------------------------------------------- @@ -105,7 +105,7 @@ do_scanstatus_test 2.2 { nLoop 1 nVisit 1 nEst 1.0 zName x1 - zExplain {SEARCH x1 USING INTEGER PRIMARY KEY (rowid=?)} + zExplain {SEARCH TABLE x1 USING INTEGER PRIMARY KEY (rowid=?)} } do_execsql_test 2.3.1 { @@ -113,7 +113,7 @@ } {2 two} do_scanstatus_test 2.3.2 { nLoop 1 nVisit 1 nEst 10.0 zName x1j - zExplain {SEARCH x1 USING COVERING INDEX x1j (j=?)} + zExplain {SEARCH TABLE x1 USING COVERING INDEX x1j (j=?)} } do_execsql_test 2.4.1 { @@ -121,7 +121,7 @@ } {4 four 1 one 3 three} do_scanstatus_test 2.4.2 { nLoop 1 nVisit 3 nEst 262144.0 zName x1j - zExplain {SEARCH x1 USING COVERING INDEX x1j (j?)} + zExplain {SEARCH TABLE x1 USING COVERING INDEX x1j (j>?)} } do_execsql_test 2.6.1 { @@ -137,7 +137,7 @@ } {3 three 2 two} do_scanstatus_test 2.6.2 { nLoop 1 nVisit 2 nEst 16384.0 zName x1j - zExplain {SEARCH x1 USING COVERING INDEX x1j (j>? AND j? AND j? AND j? AND j? AND a? AND a? AND b? AND b? AND b? AND b? AND a? AND a5 GROUP BY x1.d) AS x2 ON t41.b=x2.d; -} {/SEARCH x2 USING AUTOMATIC/} +} {/*SEARCH SUBQUERY * AS x2 USING AUTOMATIC*/} finish_test diff -Nru sqlite3-3.35.0/test/skipscan1.test sqlite3-3.35.0-1/test/skipscan1.test --- sqlite3-3.35.0/test/skipscan1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/skipscan1.test 2021-04-04 17:23:22.000000000 +0000 @@ -341,7 +341,7 @@ do_execsql_test skipscan1-9.3 { EXPLAIN QUERY PLAN SELECT * FROM t9a WHERE b IN (SELECT x FROM t9b WHERE y!=5); -} {/{SCAN t9a}/} +} {/{SCAN TABLE t9a}/} optimization_control db skip-scan 1 do_execsql_test skipscan1-2.1 { @@ -394,7 +394,7 @@ FROM t1 WHERE t1.c3 = 1; } { QUERY PLAN - |--SEARCH t1 USING INDEX sqlite_autoindex_t1_1 (ANY(c4) AND c3=?) + |--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (ANY(c4) AND c3=?) `--USE TEMP B-TREE FOR DISTINCT } diff -Nru sqlite3-3.35.0/test/skipscan2.test sqlite3-3.35.0-1/test/skipscan2.test --- sqlite3-3.35.0/test/skipscan2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/skipscan2.test 2021-04-04 17:23:22.000000000 +0000 @@ -199,7 +199,7 @@ } {} do_eqp_test skipscan2-3.3eqp { SELECT * FROM t3 WHERE b=42; -} {SEARCH t3 USING PRIMARY KEY (ANY(a) AND b=?)} +} {SEARCH TABLE t3 USING PRIMARY KEY (ANY(a) AND b=?)} diff -Nru sqlite3-3.35.0/test/skipscan5.test sqlite3-3.35.0-1/test/skipscan5.test --- sqlite3-3.35.0/test/skipscan5.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/skipscan5.test 2021-04-04 17:23:22.000000000 +0000 @@ -41,20 +41,20 @@ foreach {tn q res} { 1 "b = 5" {/*ANY(a) AND b=?*/} 2 "b > 12 AND b < 16" {/*ANY(a) AND b>? AND b 2 AND b < 16" {/*SCAN t1*/} + 3 "b > 2 AND b < 16" {/*SCAN TABLE t1*/} 4 "b > 18 AND b < 25" {/*ANY(a) AND b>? AND b 16" {/*ANY(a) AND b>?*/} - 6 "b > 5" {/*SCAN t1*/} - 7 "b < 15" {/*SCAN t1*/} + 6 "b > 5" {/*SCAN TABLE t1*/} + 7 "b < 15" {/*SCAN TABLE t1*/} 8 "b < 5" {/*ANY(a) AND b b" {/*ANY(a) AND b '12' AND b < '16'" {/*ANY(a) AND b>? AND b '2' AND b < '16'" {/*SCAN t1*/} + 12 "b > '2' AND b < '16'" {/*SCAN TABLE t1*/} 13 "b > '18' AND b < '25'" {/*ANY(a) AND b>? AND b '16'" {/*ANY(a) AND b>?*/} - 15 "b > '5'" {/*SCAN t1*/} - 16 "b < '15'" {/*SCAN t1*/} + 15 "b > '5'" {/*SCAN TABLE t1*/} + 16 "b < '15'" {/*SCAN TABLE t1*/} 17 "b < '5'" {/*ANY(a) AND b b" {/*ANY(a) AND b? AND c 'q' } {/*ANY(a) AND ANY(b) AND c>?*/} - 4 { c > 'e' } {/*SCAN t2*/} - 5 { c < 'q' } {/*SCAN t2*/} + 4 { c > 'e' } {/*SCAN TABLE t2*/} + 5 { c < 'q' } {/*SCAN TABLE t2*/} 6 { c < 'b' } {/*ANY(a) AND ANY(b) AND c? AND b X'5555'" {/*ANY(a) AND b>?*/} 5 "b > 'zzz'" {/*ANY(a) AND b>?*/} - 6 "b < 'zzz'" {/*SCAN t3*/} + 6 "b < 'zzz'" {/*SCAN TABLE t3*/} } { set sql "EXPLAIN QUERY PLAN SELECT * FROM t3 WHERE $q" do_execsql_test 3.3.$tn $sql $res diff -Nru sqlite3-3.35.0/test/skipscan6.test sqlite3-3.35.0-1/test/skipscan6.test --- sqlite3-3.35.0/test/skipscan6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/skipscan6.test 2021-04-04 17:23:22.000000000 +0000 @@ -179,13 +179,13 @@ # do_eqp_test 3.1 { SELECT * FROM t3 WHERE a = ? AND c = ? -} {SEARCH t3 USING INDEX t3_a (a=?)} +} {SEARCH TABLE t3 USING INDEX t3_a (a=?)} # The same query on table t2. This should use index "t2_a", for the # same reason. At one point though, it was mistakenly using a skip-scan. # do_eqp_test 3.2 { SELECT * FROM t2 WHERE a = ? AND c = ? -} {SEARCH t2 USING INDEX t2_a (a=?)} +} {SEARCH TABLE t2 USING INDEX t2_a (a=?)} finish_test diff -Nru sqlite3-3.35.0/test/tkt3442.test sqlite3-3.35.0-1/test/tkt3442.test --- sqlite3-3.35.0/test/tkt3442.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/tkt3442.test 2021-04-04 17:23:22.000000000 +0000 @@ -40,17 +40,17 @@ # do_eqp_test tkt3442-1.2 { SELECT node FROM listhash WHERE id='5000' LIMIT 1; -} {SEARCH listhash USING INDEX ididx (id=?)} +} {SEARCH TABLE listhash USING INDEX ididx (id=?)} do_eqp_test tkt3442-1.3 { SELECT node FROM listhash WHERE id="5000" LIMIT 1; -} {SEARCH listhash USING INDEX ididx (id=?)} +} {SEARCH TABLE listhash USING INDEX ididx (id=?)} # Some extra tests testing other permutations of 5000. # do_eqp_test tkt3442-1.4 { SELECT node FROM listhash WHERE id=5000 LIMIT 1; -} {SEARCH listhash USING INDEX ididx (id=?)} +} {SEARCH TABLE listhash USING INDEX ididx (id=?)} do_test tkt3442-1.5 { catchsql { diff -Nru sqlite3-3.35.0/test/tkt-385a5b56b9.test sqlite3-3.35.0-1/test/tkt-385a5b56b9.test --- sqlite3-3.35.0/test/tkt-385a5b56b9.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/tkt-385a5b56b9.test 2021-04-04 17:23:22.000000000 +0000 @@ -35,16 +35,16 @@ } do_eqp_test 2.1 { SELECT DISTINCT x FROM t2 } \ - {SCAN t2 USING COVERING INDEX t2x} + {SCAN TABLE t2 USING COVERING INDEX t2x} do_eqp_test 2.2 { SELECT DISTINCT y FROM t2 } \ - {SCAN t2 USING COVERING INDEX t2y} + {SCAN TABLE t2 USING COVERING INDEX t2y} do_eqp_test 2.3 { SELECT DISTINCT x, y FROM t2 WHERE y=10 } \ - {SEARCH t2 USING INDEX t2y (y=?)} + {SEARCH TABLE t2 USING INDEX t2y (y=?)} do_eqp_test 2.4 { SELECT DISTINCT x, y FROM t2 WHERE x=10 } \ - {SEARCH t2 USING INDEX t2x (x=?)} + {SEARCH TABLE t2 USING INDEX t2x (x=?)} finish_test diff -Nru sqlite3-3.35.0/test/tkt-78e04e52ea.test sqlite3-3.35.0-1/test/tkt-78e04e52ea.test --- sqlite3-3.35.0/test/tkt-78e04e52ea.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/tkt-78e04e52ea.test 2021-04-04 17:23:22.000000000 +0000 @@ -42,7 +42,7 @@ } {} do_test tkt-78e04-1.4 { db eval {EXPLAIN QUERY PLAN SELECT "" FROM "" WHERE "" LIKE '1e5%';} -} {/*SCAN USING COVERING INDEX i1*/} +} {/*SCAN TABLE USING COVERING INDEX i1*/} do_test tkt-78e04-1.5 { execsql { DROP TABLE ""; @@ -55,12 +55,12 @@ CREATE INDEX "" ON t2(x); EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=5; } -} {/*SEARCH t2 USING COVERING INDEX (x=?)*/} +} {/*SEARCH TABLE t2 USING COVERING INDEX (x=?)*/} do_test tkt-78e04-2.2 { execsql { DROP INDEX ""; EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=2; } -} {/*SCAN t2*/} +} {/*SCAN TABLE t2*/} finish_test diff -Nru sqlite3-3.35.0/test/tkt-b75a9ca6b0.test sqlite3-3.35.0-1/test/tkt-b75a9ca6b0.test --- sqlite3-3.35.0/test/tkt-b75a9ca6b0.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/tkt-b75a9ca6b0.test 2021-04-04 17:23:22.000000000 +0000 @@ -32,8 +32,8 @@ CREATE INDEX i1 ON t1(x, y); } -set idxscan {SCAN t1 USING COVERING INDEX i1} -set tblscan {SCAN t1} +set idxscan {SCAN TABLE t1 USING COVERING INDEX i1} +set tblscan {SCAN TABLE t1} set grpsort {USE TEMP B-TREE FOR GROUP BY} set sort {USE TEMP B-TREE FOR ORDER BY} diff -Nru sqlite3-3.35.0/test/tpch01.test sqlite3-3.35.0-1/test/tpch01.test --- sqlite3-3.35.0/test/tpch01.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/tpch01.test 2021-04-04 17:23:22.000000000 +0000 @@ -165,13 +165,13 @@ order by o_year;}] set ::eqpres -} {/*SEARCH part USING INDEX bootleg_pti *SEARCH lineitem USING INDEX lpki2*/} +} {/*SEARCH TABLE part USING INDEX bootleg_pti *SEARCH TABLE lineitem USING INDEX lpki2*/} do_test tpch01-1.1b { set ::eqpres -} {/.* customer .* n1 .*/} +} {/.* customer .* nation AS n1 .*/} do_test tpch01-1.1c { set ::eqpres -} {/.* supplier .* n2 .*/} +} {/.* supplier .* nation AS n2 .*/} do_eqp_test tpch01-1.2 { select @@ -189,10 +189,10 @@ revenue desc; } { QUERY PLAN - |--SEARCH orders USING INDEX odi (O_ORDERDATE>? AND O_ORDERDATE? AND O_ORDERDATE 100" - {SEARCH t1 USING INDEX i1 (a>?)} - {SCAN t1} + {SEARCH TABLE t1 USING INDEX i1 (a>?)} + {SCAN TABLE t1} 3 "SELECT * FROM t1 WHERE a = ? ORDER BY rowid" - {SEARCH t1 USING INDEX i1 (a=?)} - {SEARCH t1 USING INDEX i1 (a=?)*USE TEMP B-TREE FOR ORDER BY} + {SEARCH TABLE t1 USING INDEX i1 (a=?)} + {SEARCH TABLE t1 USING INDEX i1 (a=?)*USE TEMP B-TREE FOR ORDER BY} 4 "SELECT max(a) FROM t1" - {SEARCH t1 USING COVERING INDEX i1} - {SEARCH t1} + {SEARCH TABLE t1 USING COVERING INDEX i1} + {SEARCH TABLE t1} 5 "SELECT group_concat(b) FROM t1 GROUP BY a" - {SCAN t1 USING INDEX i1} - {SCAN t1*USE TEMP B-TREE FOR GROUP BY} + {SCAN TABLE t1 USING INDEX i1} + {SCAN TABLE t1*USE TEMP B-TREE FOR GROUP BY} 6 "SELECT * FROM t1 WHERE a = ?" - {SEARCH t1 USING INDEX i1 (a=?)} - {SEARCH t1 USING INDEX i1 (a=?)} + {SEARCH TABLE t1 USING INDEX i1 (a=?)} + {SEARCH TABLE t1 USING INDEX i1 (a=?)} 7 "SELECT count(*) FROM t1" - {SCAN t1 USING COVERING INDEX i1} - {SCAN t1} + {SCAN TABLE t1 USING COVERING INDEX i1} + {SCAN TABLE t1} } { do_eqp_test 1.$idxmode.$tn $sql $r($idxmode) } diff -Nru sqlite3-3.35.0/test/upfrom2.test sqlite3-3.35.0-1/test/upfrom2.test --- sqlite3-3.35.0/test/upfrom2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/upfrom2.test 2021-04-04 17:23:22.000000000 +0000 @@ -367,3 +367,5 @@ finish_test + + diff -Nru sqlite3-3.35.0/test/upfrom3.test sqlite3-3.35.0-1/test/upfrom3.test --- sqlite3-3.35.0/test/upfrom3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/upfrom3.test 2021-04-04 17:23:22.000000000 +0000 @@ -259,3 +259,4 @@ } finish_test + diff -Nru sqlite3-3.35.0/test/upfromfault.test sqlite3-3.35.0-1/test/upfromfault.test --- sqlite3-3.35.0/test/upfromfault.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/upfromfault.test 2021-04-04 17:23:22.000000000 +0000 @@ -137,3 +137,4 @@ finish_test + diff -Nru sqlite3-3.35.0/test/walsetlk.test sqlite3-3.35.0-1/test/walsetlk.test --- sqlite3-3.35.0/test/walsetlk.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/walsetlk.test 2021-04-04 17:23:22.000000000 +0000 @@ -195,3 +195,4 @@ } {1 {database is locked}} finish_test + diff -Nru sqlite3-3.35.0/test/where2.test sqlite3-3.35.0-1/test/where2.test --- sqlite3-3.35.0/test/where2.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/where2.test 2021-04-04 17:23:22.000000000 +0000 @@ -76,12 +76,10 @@ set eqp [execsql "EXPLAIN QUERY PLAN $sql"] # puts eqp=$eqp foreach {a b c x} $eqp { - if {[regexp {SCAN CONSTANT} $x]} { - # noop - } elseif {[regexp {(SCAN|SEARCH) (\w+ AS )?(\w+) USING.* INDEX (\w+)\y} \ - $x all ss as tab idx]} { + if {[regexp { TABLE (\w+ AS )?(\w+) USING.* INDEX (\w+)\y} \ + $x all as tab idx]} { lappend data $tab $idx - } elseif {[regexp {(SCAN|SEARCH) (\w+ AS )?(\w+)\y} $x all ss as tab]} { + } elseif {[regexp { TABLE (\w+ AS )?(\w+)\y} $x all as tab]} { lappend data $tab * } } @@ -755,7 +753,7 @@ SELECT a.x, b.x FROM t12 AS a JOIN t12 AS b ON a.y=b.x WHERE (b.x=$abc OR b.y=$abc); -} {/SEARCH b .*SEARCH b /} +} {/.*SEARCH TABLE t12 AS b .*SEARCH TABLE t12 AS b .*/} } # Verify that all necessary OP_OpenRead opcodes occur in the OR optimization. diff -Nru sqlite3-3.35.0/test/where3.test sqlite3-3.35.0-1/test/where3.test --- sqlite3-3.35.0/test/where3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/where3.test 2021-04-04 17:23:22.000000000 +0000 @@ -111,12 +111,10 @@ set eqp [execsql "EXPLAIN QUERY PLAN $sql"] # puts eqp=$eqp foreach {a b c x} $eqp { - if {[regexp {SCAN CONSTANT} $x]} { - # noop - } elseif {[regexp {(SCAN|SEARCH) (\w+ AS )?(\w+) USING.* INDEX (\w+)\y} \ - $x all ss as tab idx]} { + if {[regexp { TABLE (\w+ AS )?(\w+) USING.* INDEX (\w+)\y} \ + $x all as tab idx]} { lappend data $tab $idx - } elseif {[regexp {(SCAN|SEARCH) (\w+ AS )?(\w+)\y} $x all ss as tab]} { + } elseif {[regexp { TABLE (\w+ AS )?(\w+)\y} $x all as tab]} { lappend data $tab * } } @@ -242,15 +240,15 @@ SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y; } { QUERY PLAN - |--SCAN t302 - `--SEARCH t301 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t302 + `--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) } do_eqp_test where3-3.1 { SELECT * FROM t301, t302 WHERE t302.x=5 AND t301.a=t302.y; } { QUERY PLAN - |--SCAN t302 - `--SEARCH t301 USING INTEGER PRIMARY KEY (rowid=?) + |--SCAN TABLE t302 + `--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) } do_execsql_test where3-3.2 { SELECT * FROM t301 WHERE c=3 AND a IS NULL; @@ -271,25 +269,25 @@ EXPLAIN QUERY PLAN SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*'; } { - 0 0 2 {SCAN t402} - 0 1 0 {SCAN t400} - 0 2 1 {SCAN t401} + 0 0 2 {SCAN TABLE t402} + 0 1 0 {SCAN TABLE t400} + 0 2 1 {SCAN TABLE t401} } do_execsql_test where3-4.1 { EXPLAIN QUERY PLAN SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*'; } { - 0 0 1 {SCAN t401} - 0 1 0 {SCAN t400} - 0 2 2 {SCAN t402} + 0 0 1 {SCAN TABLE t401} + 0 1 0 {SCAN TABLE t400} + 0 2 2 {SCAN TABLE t402} } do_execsql_test where3-4.2 { EXPLAIN QUERY PLAN SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*'; } { - 0 0 0 {SCAN t400} - 0 1 1 {SCAN t401} - 0 2 2 {SCAN t402} + 0 0 0 {SCAN TABLE t400} + 0 1 1 {SCAN TABLE t401} + 0 2 2 {SCAN TABLE t402} } } ;# endif @@ -323,8 +321,8 @@ ORDER BY bbb.title COLLATE NOCASE ASC; } { QUERY PLAN - |--SEARCH aaa USING INDEX aaa_333 (fk=?) - |--SEARCH bbb USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) + |--SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?) `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test where3-5.1 { @@ -336,8 +334,8 @@ ORDER BY bbb.title COLLATE NOCASE ASC; } { QUERY PLAN - |--SEARCH aaa USING INDEX aaa_333 (fk=?) - |--SEARCH bbb USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) + |--SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?) `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test where3-5.2 { @@ -349,8 +347,8 @@ ORDER BY bbb.title COLLATE NOCASE ASC; } { QUERY PLAN - |--SEARCH aaa USING INDEX aaa_333 (fk=?) - |--SEARCH bbb USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) + |--SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?) `--USE TEMP B-TREE FOR ORDER BY } do_eqp_test where3-5.3 { @@ -362,8 +360,8 @@ ORDER BY bbb.title COLLATE NOCASE ASC; } { QUERY PLAN - |--SEARCH aaa USING INDEX aaa_333 (fk=?) - |--SEARCH bbb USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?) + |--SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?) `--USE TEMP B-TREE FOR ORDER BY } diff -Nru sqlite3-3.35.0/test/where7.test sqlite3-3.35.0-1/test/where7.test --- sqlite3-3.35.0/test/where7.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/where7.test 2021-04-04 17:23:22.000000000 +0000 @@ -23354,10 +23354,10 @@ QUERY PLAN |--MULTI-INDEX OR | |--INDEX 1 - | | `--SEARCH t301 USING COVERING INDEX t301_c4 (c4=?) + | | `--SEARCH TABLE t301 USING COVERING INDEX t301_c4 (c4=?) | `--INDEX 2 - | `--SEARCH t301 USING INTEGER PRIMARY KEY (rowid=?) - |--SEARCH t302 USING INDEX t302_c8_c3 (c8=? AND c3>?) + | `--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE t302 USING INDEX t302_c8_c3 (c8=? AND c3>?) `--USE TEMP B-TREE FOR ORDER BY } diff -Nru sqlite3-3.35.0/test/where9.test sqlite3-3.35.0-1/test/where9.test --- sqlite3-3.35.0/test/where9.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/where9.test 2021-04-04 17:23:22.000000000 +0000 @@ -362,12 +362,12 @@ WHERE t1.a=80 AND ((t1.c=t2.c AND t1.d=t2.d) OR t1.f=t2.f) } [string map {"\n " \n} { QUERY PLAN - |--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t2 USING INDEX t2d (d=?) + | `--SEARCH TABLE t2 USING INDEX t2d (d=?) `--INDEX 3 - `--SEARCH t2 USING COVERING INDEX t2f (f=?) + `--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?) }] do_eqp_test where9-3.2 { SELECT coalesce(t2.a,9999) @@ -375,12 +375,12 @@ WHERE t1.a=80 } [string map {"\n " \n} { QUERY PLAN - |--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?) + |--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t2 USING INDEX t2d (d=?) + | `--SEARCH TABLE t2 USING INDEX t2d (d=?) `--INDEX 2 - `--SEARCH t2 USING COVERING INDEX t2f (f=?) + `--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?) }] } @@ -461,23 +461,23 @@ QUERY PLAN `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t1 USING INDEX t1c (c=?) + | `--SEARCH TABLE t1 USING INDEX t1c (c=?) `--INDEX 2 - `--SEARCH t1 USING INDEX t1d (d=?) + `--SEARCH TABLE t1 USING INDEX t1d (d=?) } # In contrast, b=1000 is preferred over any OR-clause. # do_eqp_test where9-5.2 { SELECT a FROM t1 WHERE b=1000 AND (c=31031 OR d IS NULL) -} {SEARCH t1 USING INDEX t1b (b=?)} +} {SEARCH TABLE t1 USING INDEX t1b (b=?)} # Likewise, inequalities in an AND are preferred over inequalities in # an OR. # do_eqp_test where9-5.3 { SELECT a FROM t1 WHERE b>1000 AND (c>=31031 OR d IS NULL) -} {SEARCH t1 USING INDEX t1b (b>?)} +} {SEARCH TABLE t1 USING INDEX t1b (b>?)} ############################################################################ # Make sure OR-clauses work correctly on UPDATE and DELETE statements. diff -Nru sqlite3-3.35.0/test/whereE.test sqlite3-3.35.0-1/test/whereE.test --- sqlite3-3.35.0/test/whereE.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/whereE.test 2021-04-04 17:23:22.000000000 +0000 @@ -47,16 +47,16 @@ CREATE UNIQUE INDEX t2zx ON t2(z,x); EXPLAIN QUERY PLAN SELECT x FROM t1, t2 WHERE a=z AND c=x; -} {/.*SCAN t1.*SEARCH t2.*/} +} {/.*SCAN TABLE t1.*SEARCH TABLE t2.*/} do_execsql_test 1.2 { EXPLAIN QUERY PLAN SELECT x FROM t2, t1 WHERE a=z AND c=x; -} {/.*SCAN t1.*SEARCH t2.*/} +} {/.*SCAN TABLE t1.*SEARCH TABLE t2.*/} do_execsql_test 1.3 { ANALYZE; EXPLAIN QUERY PLAN SELECT x FROM t1, t2 WHERE a=z AND c=x; -} {/.*SCAN t1.*SEARCH t2.*/} +} {/.*SCAN TABLE t1.*SEARCH TABLE t2.*/} do_execsql_test 1.4 { EXPLAIN QUERY PLAN SELECT x FROM t2, t1 WHERE a=z AND c=x; -} {/.*SCAN t1.*SEARCH t2.*/} +} {/.*SCAN TABLE t1.*SEARCH TABLE t2.*/} finish_test diff -Nru sqlite3-3.35.0/test/whereF.test sqlite3-3.35.0-1/test/whereF.test --- sqlite3-3.35.0/test/whereF.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/whereF.test 2021-04-04 17:23:22.000000000 +0000 @@ -63,7 +63,7 @@ } { do_test 1.$tn { db eval "EXPLAIN QUERY PLAN $sql" - } {/.*SCAN t2\y.*SEARCH t1\y.*/} + } {/.*SCAN TABLE t2\y.*SEARCH TABLE t1\y.*/} } do_execsql_test 2.0 { @@ -84,7 +84,7 @@ } { do_test 2.$tn { db eval "EXPLAIN QUERY PLAN $sql" - } {/.*SCAN t2\y.*SEARCH t1\y.*/} + } {/.*SCAN TABLE t2\y.*SEARCH TABLE t1\y.*/} } do_execsql_test 3.0 { @@ -109,7 +109,7 @@ } { do_test 3.$tn { db eval "EXPLAIN QUERY PLAN $sql" - } {/.*SCAN t2\y.*SEARCH t1\y.*/} + } {/.*SCAN TABLE t2\y.*SEARCH TABLE t1\y.*/} } do_execsql_test 4.0 { diff -Nru sqlite3-3.35.0/test/whereG.test sqlite3-3.35.0-1/test/whereG.test --- sqlite3-3.35.0/test/whereG.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/whereG.test 2021-04-04 17:23:22.000000000 +0000 @@ -156,16 +156,16 @@ } {} do_eqp_test whereG-3.1 { SELECT * FROM a, b WHERE b1=a1 AND a2=5; -} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} +} {/.*SCAN TABLE a.*SEARCH TABLE b USING INDEX .*b_1 .b1=..*/} do_eqp_test whereG-3.2 { SELECT * FROM a, b WHERE a1=b1 AND a2=5; -} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} +} {/.*SCAN TABLE a.*SEARCH TABLE b USING INDEX .*b_1 .b1=..*/} do_eqp_test whereG-3.3 { SELECT * FROM a, b WHERE a2=5 AND b1=a1; -} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} +} {/.*SCAN TABLE a.*SEARCH TABLE b USING INDEX .*b_1 .b1=..*/} do_eqp_test whereG-3.4 { SELECT * FROM a, b WHERE a2=5 AND a1=b1; -} {/.*SCAN a.*SEARCH b USING INDEX .*b_1 .b1=..*/} +} {/.*SCAN TABLE a.*SEARCH TABLE b USING INDEX .*b_1 .b1=..*/} # Ticket [1e64dd782a126f48d78c43a664844a41d0e6334e]: # Incorrect result in a nested GROUP BY/DISTINCT due to the use of an OP_SCopy @@ -195,13 +195,13 @@ } do_eqp_test 5.1.2 { SELECT * FROM t1 WHERE a>? -} {SEARCH t1 USING INDEX i1 (a>?)} +} {SEARCH TABLE t1 USING INDEX i1 (a>?)} do_eqp_test 5.1.3 { SELECT * FROM t1 WHERE likelihood(a>?, 0.9) -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test 5.1.4 { SELECT * FROM t1 WHERE likely(a>?) -} {SCAN t1} +} {SCAN TABLE t1} do_test 5.2 { for {set i 0} {$i < 100} {incr i} { @@ -212,29 +212,29 @@ } {} do_eqp_test 5.2.2 { SELECT * FROM t1 WHERE likelihood(b>?, 0.01) -} {SEARCH t1 USING INDEX i1 (ANY(a) AND b>?)} +} {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>?)} do_eqp_test 5.2.3 { SELECT * FROM t1 WHERE likelihood(b>?, 0.9) -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test 5.2.4 { SELECT * FROM t1 WHERE likely(b>?) -} {SCAN t1} +} {SCAN TABLE t1} ifcapable stat4 { do_eqp_test 5.3.1.stat4 { SELECT * FROM t1 WHERE a=? - } {SCAN t1} + } {SCAN TABLE t1} } else { do_eqp_test 5.3.1 { SELECT * FROM t1 WHERE a=? - } {SEARCH t1 USING INDEX i1} + } {SEARCH TABLE t1 USING INDEX i1} } do_eqp_test 5.3.2 { SELECT * FROM t1 WHERE likelihood(a=?, 0.9) -} {SCAN t1} +} {SCAN TABLE t1} do_eqp_test 5.3.3 { SELECT * FROM t1 WHERE likely(a=?) -} {SCAN t1} +} {SCAN TABLE t1} # 2015-06-18 # Ticket [https://www.sqlite.org/see/tktview/472f0742a1868fb58862bc588ed70] diff -Nru sqlite3-3.35.0/test/whereI.test sqlite3-3.35.0-1/test/whereI.test --- sqlite3-3.35.0/test/whereI.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/whereI.test 2021-04-04 17:23:22.000000000 +0000 @@ -32,9 +32,9 @@ QUERY PLAN `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t1 USING INDEX i1 (b=?) + | `--SEARCH TABLE t1 USING INDEX i1 (b=?) `--INDEX 2 - `--SEARCH t1 USING INDEX i2 (c=?) + `--SEARCH TABLE t1 USING INDEX i2 (c=?) } do_execsql_test 1.2 { @@ -64,9 +64,9 @@ QUERY PLAN `--MULTI-INDEX OR |--INDEX 1 - | `--SEARCH t2 USING INDEX i3 (b=?) + | `--SEARCH TABLE t2 USING INDEX i3 (b=?) `--INDEX 2 - `--SEARCH t2 USING INDEX i4 (c=?) + `--SEARCH TABLE t2 USING INDEX i4 (c=?) } do_execsql_test 2.2 { diff -Nru sqlite3-3.35.0/test/whereJ.test sqlite3-3.35.0-1/test/whereJ.test --- sqlite3-3.35.0/test/whereJ.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/whereJ.test 2021-04-04 17:23:22.000000000 +0000 @@ -402,7 +402,7 @@ a = 4 AND b BETWEEN 20 AND 80 -- Matches 80 rows AND c BETWEEN 150 AND 160 -- Matches 10 rows -} {SEARCH t1 USING INDEX idx_c (c>? AND c? AND c? AND b? AND b9 OR b=9 ORDER BY +a; -} {/SEARCH t1 USING INDEX t1bc/} +} {/SEARCH TABLE t1 USING INDEX t1bc/} do_execsql_test 1.2 { SELECT a FROM t1 WHERE b>8 OR (b=8 AND c>7) ORDER BY +a; @@ -41,7 +41,7 @@ do_execsql_test 1.2eqp { EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>8 OR (b=8 AND c>7) ORDER BY +a; -} {/SEARCH t1 USING INDEX t1bc/} +} {/SEARCH TABLE t1 USING INDEX t1bc/} do_execsql_test 1.3 { SELECT a FROM t1 WHERE (b=8 AND c>7) OR b>8 ORDER BY +a; @@ -49,7 +49,7 @@ do_execsql_test 1.3eqp { EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE (b=8 AND c>7) OR b>8 ORDER BY +a; -} {/SEARCH t1 USING INDEX t1bc/} +} {/SEARCH TABLE t1 USING INDEX t1bc/} do_execsql_test 1.4 { SELECT a FROM t1 WHERE (b=8 AND c>7) OR 87) OR 87) OR (b>8 AND c NOT IN (4,5,6)) @@ -67,6 +67,6 @@ EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE (b=8 AND c>7) OR (b>8 AND c NOT IN (4,5,6)) ORDER BY +a; -} {/SEARCH t1 USING INDEX t1bc/} +} {/SEARCH TABLE t1 USING INDEX t1bc/} finish_test diff -Nru sqlite3-3.35.0/test/wherelimit.test sqlite3-3.35.0-1/test/wherelimit.test --- sqlite3-3.35.0/test/wherelimit.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/wherelimit.test 2021-04-04 17:23:22.000000000 +0000 @@ -237,8 +237,8 @@ } {11} create_test_data 6 do_test wherelimit-3.2 { - execsql {UPDATE t1 SET y=1 WHERE x=1 RETURNING x, old.y, '|' LIMIT 5} - } {1 1 | 1 2 | 1 3 | 1 4 | 1 5 |} + execsql {UPDATE t1 SET y=1 WHERE x=1 RETURNING x, y, '|' LIMIT 5} + } {1 1 | 1 1 | 1 1 | 1 1 | 1 1 |} do_test wherelimit-3.2cnt { execsql {SELECT count(*) FROM t1 WHERE y=1} } {10} diff -Nru sqlite3-3.35.0/test/whereL.test sqlite3-3.35.0-1/test/whereL.test --- sqlite3-3.35.0/test/whereL.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/whereL.test 2021-04-04 17:23:22.000000000 +0000 @@ -28,11 +28,11 @@ QUERY PLAN `--COMPOUND QUERY |--LEFT-MOST SUBQUERY - | |--SEARCH t2 USING INDEX sqlite_autoindex_t2_1 (a=?) - | `--SEARCH t1 USING INDEX sqlite_autoindex_t1_1 (a=?) + | |--SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (a=?) + | `--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (a=?) `--UNION ALL - |--SEARCH t3 USING INDEX sqlite_autoindex_t3_1 (a=?) - `--SEARCH t1 USING INDEX sqlite_autoindex_t1_1 (a=?) + |--SEARCH TABLE t3 USING INDEX sqlite_autoindex_t3_1 (a=?) + `--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (a=?) } # The scan of the t1 table goes first since that enables the ORDER BY @@ -45,9 +45,9 @@ ORDER BY t1.a; } { QUERY PLAN - |--SEARCH t1 USING INDEX sqlite_autoindex_t1_1 (a=?) - |--SEARCH t2 USING INDEX sqlite_autoindex_t2_1 (a=?) - `--SCAN t3 + |--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (a=?) + |--SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (a=?) + `--SCAN TABLE t3 } # Constant propagation in the face of collating sequences: diff -Nru sqlite3-3.35.0/test/where.test sqlite3-3.35.0-1/test/where.test --- sqlite3-3.35.0/test/where.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/where.test 2021-04-04 17:23:22.000000000 +0000 @@ -70,10 +70,10 @@ } {3 121 10 3} do_eqp_test where-1.1.2 { SELECT x, y, w FROM t1 WHERE w=10 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_eqp_test where-1.1.2b { SELECT x, y, w FROM t1 WHERE w IS 10 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_test where-1.1.3 { db status step } {0} @@ -85,13 +85,13 @@ } {99} do_eqp_test where-1.1.6 { SELECT x, y, w FROM t1 WHERE +w=10 -} {*SCAN t1*} +} {*SCAN TABLE t1*} do_test where-1.1.7 { count {SELECT x, y, w AS abc FROM t1 WHERE abc=10} } {3 121 10 3} do_eqp_test where-1.1.8 { SELECT x, y, w AS abc FROM t1 WHERE abc=10 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_test where-1.1.9 { db status step } {0} @@ -118,22 +118,22 @@ } {11 3 144 3} do_eqp_test where-1.4.2 { SELECT w, x, y FROM t1 WHERE 11=w AND x>2 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_eqp_test where-1.4.2b { SELECT w, x, y FROM t1 WHERE 11 IS w AND x>2 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_test where-1.4.3 { count {SELECT w AS a, x AS b, y FROM t1 WHERE 11=a AND b>2} } {11 3 144 3} do_eqp_test where-1.4.4 { SELECT w AS a, x AS b, y FROM t1 WHERE 11=a AND b>2 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_test where-1.5 { count {SELECT x, y FROM t1 WHERE y<200 AND w=11 AND x>2} } {3 144 3} do_eqp_test where-1.5.2 { SELECT x, y FROM t1 WHERE y<200 AND w=11 AND x>2 -} {*SEARCH t1 USING INDEX i1w (w=?)*} +} {*SEARCH TABLE t1 USING INDEX i1w (w=?)*} do_test where-1.6 { count {SELECT x, y FROM t1 WHERE y<200 AND x>2 AND w=11} } {3 144 3} @@ -145,10 +145,10 @@ } {3 144 3} do_eqp_test where-1.8.2 { SELECT x, y FROM t1 WHERE w>10 AND y=144 AND x=3 -} {*SEARCH t1 USING INDEX i1xy (x=? AND y=?)*} +} {*SEARCH TABLE t1 USING INDEX i1xy (x=? AND y=?)*} do_eqp_test where-1.8.3 { SELECT x, y FROM t1 WHERE y=144 AND x=3 -} {*SEARCH t1 USING COVERING INDEX i1xy (x=? AND y=?)*} +} {*SEARCH TABLE t1 USING COVERING INDEX i1xy (x=? AND y=?)*} do_test where-1.9 { count {SELECT x, y FROM t1 WHERE y=144 AND w>10 AND x=3} } {3 144 3} diff -Nru sqlite3-3.35.0/test/windowpushd.test sqlite3-3.35.0-1/test/windowpushd.test --- sqlite3-3.35.0/test/windowpushd.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/windowpushd.test 2021-04-04 17:23:22.000000000 +0000 @@ -51,7 +51,7 @@ do_eqp_test 1.4 { SELECT * FROM lll WHERE grp_id=2 -} {SEARCH t1 USING COVERING INDEX i1 (grp_id=?)} +} {SEARCH TABLE t1 USING COVERING INDEX i1 (grp_id=?)} #------------------------------------------------------------------------- reset_db @@ -158,10 +158,10 @@ if {$tn==1} { do_eqp_test 2.$tn.3.3 { SELECT * FROM v3 WHERE b='E' - } {SEARCH t1 USING INDEX i2 (b=?)} + } {SEARCH TABLE t1 USING INDEX i2 (b=?)} do_eqp_test 2.$tn.3.4 { SELECT * FROM v3 WHERE b>'C' - } {SEARCH t1 USING INDEX i2 (b>?)} + } {SEARCH TABLE t1 USING INDEX i2 (b>?)} } do_execsql_test 2.$tn.3.5 { SELECT * FROM v3 WHERE d<0.55; } { @@ -172,7 +172,7 @@ if {$tn==1} { do_eqp_test 2.$tn.3.6 { SELECT * FROM v3 WHERE d<0.55 - } {SCAN t1 USING INDEX i2} + } {SCAN TABLE t1 USING INDEX i2} } do_execsql_test 2.$tn.4.1 { @@ -234,3 +234,4 @@ finish_test + diff -Nru sqlite3-3.35.0/test/with1.test sqlite3-3.35.0-1/test/with1.test --- sqlite3-3.35.0/test/with1.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/with1.test 2021-04-04 17:23:22.000000000 +0000 @@ -1025,10 +1025,10 @@ SELECT * FROM t1; } { QUERY PLAN - |--MATERIALIZE x1 + |--MATERIALIZE xxxxxx | `--SCAN CONSTANT ROW - |--SCAN x1 - `--SCAN x1 + |--SCAN SUBQUERY xxxxxx + `--SCAN SUBQUERY xxxxxx } # 2017-10-28. diff -Nru sqlite3-3.35.0/test/with3.test sqlite3-3.35.0-1/test/with3.test --- sqlite3-3.35.0/test/with3.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/with3.test 2021-04-04 17:23:22.000000000 +0000 @@ -89,13 +89,13 @@ SELECT * FROM cnt, y1 WHERE i=a } [string map {"\n " \n} { QUERY PLAN - |--MATERIALIZE cnt + |--MATERIALIZE xxxxxx | |--SETUP | | `--SCAN CONSTANT ROW | `--RECURSIVE STEP - | `--SCAN cnt - |--SCAN cnt - `--SEARCH y1 USING INDEX y1a (a=?) + | `--SCAN TABLE cnt + |--SCAN SUBQUERY xxxxxx + `--SEARCH TABLE y1 USING INDEX y1a (a=?) }] do_eqp_test 3.1.3 { @@ -103,13 +103,13 @@ SELECT * FROM cnt, y1 WHERE i=a } [string map {"\n " \n} { QUERY PLAN - |--MATERIALIZE cnt + |--MATERIALIZE xxxxxx | |--SETUP | | `--SCAN CONSTANT ROW | `--RECURSIVE STEP - | `--SCAN cnt - |--SCAN y1 - `--SEARCH cnt USING AUTOMATIC COVERING INDEX (i=?) + | `--SCAN TABLE cnt + |--SCAN TABLE y1 + `--SEARCH SUBQUERY xxxxxx USING AUTOMATIC COVERING INDEX (i=?) }] } @@ -125,17 +125,17 @@ WHERE c.id=w2.pk AND c.id=w1.pk; } { QUERY PLAN - |--MATERIALIZE c + |--MATERIALIZE xxxxxx | |--SETUP | | |--SCAN CONSTANT ROW | | `--SCALAR SUBQUERY xxxxxx - | | `--SCAN w2 + | | `--SCAN TABLE w2 | `--RECURSIVE STEP - | |--SCAN w1 - | `--SCAN c - |--SCAN c - |--SEARCH w2 USING INTEGER PRIMARY KEY (rowid=?) - `--SEARCH w1 USING INTEGER PRIMARY KEY (rowid=?) + | |--SCAN TABLE w1 + | `--SCAN TABLE c + |--SCAN SUBQUERY xxxxxx + |--SEARCH TABLE w2 USING INTEGER PRIMARY KEY (rowid=?) + `--SEARCH TABLE w1 USING INTEGER PRIMARY KEY (rowid=?) } do_execsql_test 4.0 { @@ -207,15 +207,15 @@ ORDER BY 1; } { QUERY PLAN - |--MATERIALIZE c + |--MATERIALIZE xxxxxx | |--SETUP | | `--SCAN CONSTANT ROW | `--RECURSIVE STEP - | `--SCAN c - |--SCAN x1 - |--SCAN x2 - |--SCAN x3 - |--SCAN x4 + | `--SCAN TABLE c + |--SCAN SUBQUERY xxxxxx AS x1 + |--SCAN SUBQUERY xxxxxx AS x2 + |--SCAN SUBQUERY xxxxxx AS x3 + |--SCAN SUBQUERY xxxxxx AS x4 `--USE TEMP B-TREE FOR ORDER BY } do_execsql_test 5.2 { diff -Nru sqlite3-3.35.0/test/with6.test sqlite3-3.35.0-1/test/with6.test --- sqlite3-3.35.0/test/with6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/with6.test 2021-04-04 17:23:22.000000000 +0000 @@ -30,11 +30,11 @@ SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; } { QUERY PLAN - |--MATERIALIZE c + |--MATERIALIZE xxxxxx | `--SCAN 2 CONSTANT ROWS - |--SCAN c1 - |--SCAN c2 - `--SCAN c3 + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + `--SCAN SUBQUERY xxxxxx AS c3 } do_execsql_test 110 { @@ -46,11 +46,11 @@ SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; } { QUERY PLAN - |--MATERIALIZE c + |--MATERIALIZE xxxxxx | `--SCAN 2 CONSTANT ROWS - |--SCAN c1 - |--SCAN c2 - `--SCAN c3 + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + `--SCAN SUBQUERY xxxxxx AS c3 } # Even though the CTE is not materialized, the self-join optimization @@ -65,11 +65,11 @@ SELECT c1.x||c2.x||c3.x FROM c c1, c c2, c c3; } { QUERY PLAN - |--MATERIALIZE c + |--MATERIALIZE xxxxxx | `--SCAN 2 CONSTANT ROWS - |--SCAN c1 - |--SCAN c2 - `--SCAN c3 + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + `--SCAN SUBQUERY xxxxxx AS c3 } do_execsql_test 130 { @@ -87,21 +87,21 @@ (SELECT x FROM c LIMIT 5) AS c3; } { QUERY PLAN - |--MATERIALIZE c1 - | |--CO-ROUTINE c + |--MATERIALIZE xxxxxx + | |--CO-ROUTINE xxxxxx | | `--SCAN 2 CONSTANT ROWS - | `--SCAN c - |--MATERIALIZE c2 - | |--CO-ROUTINE c + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | |--CO-ROUTINE xxxxxx | | `--SCAN 2 CONSTANT ROWS - | `--SCAN c - |--MATERIALIZE c3 - | |--CO-ROUTINE c + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | |--CO-ROUTINE xxxxxx | | `--SCAN 2 CONSTANT ROWS - | `--SCAN c - |--SCAN c1 - |--SCAN c2 - `--SCAN c3 + | `--SCAN SUBQUERY xxxxxx + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + `--SCAN SUBQUERY xxxxxx AS c3 } # The (SELECT x FROM c LIMIT N) subqueries get materialized once each. @@ -123,17 +123,17 @@ (SELECT x FROM c LIMIT 7) AS c3; } { QUERY PLAN - |--MATERIALIZE c1 - | |--MATERIALIZE c + |--MATERIALIZE xxxxxx + | |--MATERIALIZE xxxxxx | | `--SCAN 2 CONSTANT ROWS - | `--SCAN c - |--MATERIALIZE c2 - | `--SCAN c - |--MATERIALIZE c3 - | `--SCAN c - |--SCAN c1 - |--SCAN c2 - `--SCAN c3 + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | `--SCAN SUBQUERY xxxxxx + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + `--SCAN SUBQUERY xxxxxx AS c3 } do_execsql_test 150 { @@ -151,17 +151,17 @@ (SELECT x FROM c LIMIT 7) AS c3; } { QUERY PLAN - |--MATERIALIZE c1 - | |--MATERIALIZE c + |--MATERIALIZE xxxxxx + | |--MATERIALIZE xxxxxx | | `--SCAN 2 CONSTANT ROWS - | `--SCAN c - |--MATERIALIZE c2 - | `--SCAN c - |--MATERIALIZE c3 - | `--SCAN c - |--SCAN c1 - |--SCAN c2 - `--SCAN c3 + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | `--SCAN SUBQUERY xxxxxx + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + `--SCAN SUBQUERY xxxxxx AS c3 } do_execsql_test 160 { @@ -175,11 +175,11 @@ FROM c AS c2 WHERE c2.x<10; } { QUERY PLAN - |--MATERIALIZE c + |--MATERIALIZE xxxxxx | `--SCAN 2 CONSTANT ROWS - |--SCAN c2 + |--SCAN SUBQUERY xxxxxx AS c2 `--CORRELATED SCALAR SUBQUERY xxxxxx - `--SCAN c + `--SCAN SUBQUERY xxxxxx } do_execsql_test 170 { @@ -193,13 +193,13 @@ FROM c AS c2 WHERE c2.x<10; } { QUERY PLAN - |--CO-ROUTINE c + |--CO-ROUTINE xxxxxx | `--SCAN 2 CONSTANT ROWS - |--SCAN c2 + |--SCAN SUBQUERY xxxxxx AS c2 `--CORRELATED SCALAR SUBQUERY xxxxxx - |--CO-ROUTINE c + |--CO-ROUTINE xxxxxx | `--SCAN 2 CONSTANT ROWS - `--SCAN c + `--SCAN SUBQUERY xxxxxx } @@ -228,15 +228,15 @@ SELECT y FROM t2 ORDER BY y; } { QUERY PLAN - |--MATERIALIZE c1 - | |--MATERIALIZE c + |--MATERIALIZE xxxxxx + | |--MATERIALIZE xxxxxx | | `--SCAN 3 CONSTANT ROWS - | `--SCAN c - |--MATERIALIZE c2 - | `--SCAN c - |--SCAN c1 - |--SCAN c2 - |--SCAN t1 + | `--SCAN SUBQUERY xxxxxx + |--MATERIALIZE xxxxxx + | `--SCAN SUBQUERY xxxxxx + |--SCAN SUBQUERY xxxxxx AS c1 + |--SCAN SUBQUERY xxxxxx AS c2 + |--SCAN TABLE t1 `--USE TEMP B-TREE FOR ORDER BY } do_execsql_test 220 { diff -Nru sqlite3-3.35.0/test/without_rowid6.test sqlite3-3.35.0-1/test/without_rowid6.test --- sqlite3-3.35.0/test/without_rowid6.test 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/test/without_rowid6.test 2021-04-04 17:23:22.000000000 +0000 @@ -64,7 +64,7 @@ do_execsql_test without_rowid6-210 { EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>3 ORDER BY b; -} {/SEARCH t1 USING PRIMARY KEY .b>../} +} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} do_execsql_test without_rowid6-220 { PRAGMA index_list(t1); } {/sqlite_autoindex_t1_2 1 pk/} @@ -83,7 +83,7 @@ do_execsql_test without_rowid6-310 { EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>3 ORDER BY b; -} {/SEARCH t1 USING PRIMARY KEY .b>../} +} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} do_execsql_test without_rowid6-320 { PRAGMA index_list(t1); } {/sqlite_autoindex_t1_2 1 pk/} @@ -101,7 +101,7 @@ do_execsql_test without_rowid6-410 { EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>3 ORDER BY b; -} {/SEARCH t1 USING PRIMARY KEY .b>../} +} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} do_execsql_test without_rowid6-420 { PRAGMA index_list(t1); } {/sqlite_autoindex_t1_2 1 pk/} @@ -121,7 +121,7 @@ do_execsql_test without_rowid6-510 { EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>3 ORDER BY b; -} {/SEARCH t1 USING PRIMARY KEY .b>../} +} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../} do_execsql_test without_rowid6-520 { PRAGMA index_list(t1); } {/sqlite_autoindex_t1_1 1 pk/} diff -Nru sqlite3-3.35.0/tool/lemon.c sqlite3-3.35.0-1/tool/lemon.c --- sqlite3-3.35.0/tool/lemon.c 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/tool/lemon.c 2021-04-04 17:23:22.000000000 +0000 @@ -2708,7 +2708,7 @@ ** in order to control their assigned integer number. The number for ** each token is assigned when it is first seen. So by including ** - ** %token ONE TWO THREE. + ** %token ONE TWO THREE ** ** early in the grammar file, that assigns small consecutive values ** to each of the tokens ONE TWO and THREE. diff -Nru sqlite3-3.35.0/VERSION sqlite3-3.35.0-1/VERSION --- sqlite3-3.35.0/VERSION 2021-04-03 14:56:48.000000000 +0000 +++ sqlite3-3.35.0-1/VERSION 2021-04-04 17:23:21.000000000 +0000 @@ -1 +1 @@ -3.36.0 +3.35.4