1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

More test case updates. Tests are all running now.

FossilOrigin-Name: dab5e5294813891469660cceb211ac1a1e526715bb57dcdbb1ab90321e6a4dad
This commit is contained in:
drh
2018-05-02 19:42:33 +00:00
parent b3f0276b9e
commit cdf88760da
20 changed files with 307 additions and 268 deletions

View File

@ -95,7 +95,7 @@ do_setup_rec_test $tn.1 { CREATE TABLE t1(a, b, c) } {
SELECT * FROM t1 SELECT * FROM t1
} { } {
(no new indexes) (no new indexes)
0|0|0|SCAN TABLE t1 SCAN TABLE t1
} }
do_setup_rec_test $tn.2 { do_setup_rec_test $tn.2 {
@ -104,7 +104,7 @@ do_setup_rec_test $tn.2 {
SELECT * FROM t1 WHERE b>?; SELECT * FROM t1 WHERE b>?;
} { } {
CREATE INDEX t1_idx_00000062 ON t1(b); CREATE INDEX t1_idx_00000062 ON t1(b);
0|0|0|SEARCH TABLE t1 USING INDEX t1_idx_00000062 (b>?) SEARCH TABLE t1 USING INDEX t1_idx_00000062 (b>?)
} }
do_setup_rec_test $tn.3 { do_setup_rec_test $tn.3 {
@ -113,7 +113,7 @@ do_setup_rec_test $tn.3 {
SELECT * FROM t1 WHERE b COLLATE nocase BETWEEN ? AND ? SELECT * FROM t1 WHERE b COLLATE nocase BETWEEN ? AND ?
} { } {
CREATE INDEX t1_idx_3e094c27 ON t1(b COLLATE NOCASE); CREATE INDEX t1_idx_3e094c27 ON t1(b COLLATE NOCASE);
0|0|0|SEARCH TABLE t1 USING INDEX t1_idx_3e094c27 (b>? AND b<?) SEARCH TABLE t1 USING INDEX t1_idx_3e094c27 (b>? AND b<?)
} }
do_setup_rec_test $tn.4 { do_setup_rec_test $tn.4 {
@ -122,7 +122,7 @@ do_setup_rec_test $tn.4 {
SELECT a FROM t1 ORDER BY b; SELECT a FROM t1 ORDER BY b;
} { } {
CREATE INDEX t1_idx_00000062 ON t1(b); CREATE INDEX t1_idx_00000062 ON t1(b);
0|0|0|SCAN TABLE t1 USING INDEX t1_idx_00000062 SCAN TABLE t1 USING INDEX t1_idx_00000062
} }
do_setup_rec_test $tn.5 { do_setup_rec_test $tn.5 {
@ -131,7 +131,7 @@ do_setup_rec_test $tn.5 {
SELECT a FROM t1 WHERE a=? ORDER BY b; SELECT a FROM t1 WHERE a=? ORDER BY b;
} { } {
CREATE INDEX t1_idx_000123a7 ON t1(a, b); CREATE INDEX t1_idx_000123a7 ON t1(a, b);
0|0|0|SEARCH TABLE t1 USING COVERING INDEX t1_idx_000123a7 (a=?) SEARCH TABLE t1 USING COVERING INDEX t1_idx_000123a7 (a=?)
} }
do_setup_rec_test $tn.6 { do_setup_rec_test $tn.6 {
@ -140,7 +140,7 @@ do_setup_rec_test $tn.6 {
SELECT min(a) FROM t1 SELECT min(a) FROM t1
} { } {
CREATE INDEX t1_idx_00000061 ON t1(a); CREATE INDEX t1_idx_00000061 ON t1(a);
0|0|0|SEARCH TABLE t1 USING COVERING INDEX t1_idx_00000061 SEARCH TABLE t1 USING COVERING INDEX t1_idx_00000061
} }
do_setup_rec_test $tn.7 { do_setup_rec_test $tn.7 {
@ -149,7 +149,7 @@ do_setup_rec_test $tn.7 {
SELECT * FROM t1 ORDER BY a, b, c; SELECT * FROM t1 ORDER BY a, b, c;
} { } {
CREATE INDEX t1_idx_033e95fe ON t1(a, b, c); CREATE INDEX t1_idx_033e95fe ON t1(a, b, c);
0|0|0|SCAN TABLE t1 USING COVERING INDEX t1_idx_033e95fe SCAN TABLE t1 USING COVERING INDEX t1_idx_033e95fe
} }
#do_setup_rec_test $tn.1.8 { #do_setup_rec_test $tn.1.8 {
@ -167,7 +167,7 @@ do_setup_rec_test $tn.8.1 {
SELECT * FROM t1 WHERE a=? SELECT * FROM t1 WHERE a=?
} { } {
CREATE INDEX t1_idx_00000061 ON t1(a); CREATE INDEX t1_idx_00000061 ON t1(a);
0|0|0|SEARCH TABLE t1 USING INDEX t1_idx_00000061 (a=?) SEARCH TABLE t1 USING INDEX t1_idx_00000061 (a=?)
} }
do_setup_rec_test $tn.8.2 { do_setup_rec_test $tn.8.2 {
CREATE TABLE t1(a, b COLLATE nocase, c); CREATE TABLE t1(a, b COLLATE nocase, c);
@ -175,7 +175,7 @@ do_setup_rec_test $tn.8.2 {
SELECT * FROM t1 ORDER BY a ASC, b DESC, c ASC; SELECT * FROM t1 ORDER BY a ASC, b DESC, c ASC;
} { } {
CREATE INDEX t1_idx_5cb97285 ON t1(a, b DESC, c); CREATE INDEX t1_idx_5cb97285 ON t1(a, b DESC, c);
0|0|0|SCAN TABLE t1 USING COVERING INDEX t1_idx_5cb97285 SCAN TABLE t1 USING COVERING INDEX t1_idx_5cb97285
} }
@ -187,7 +187,7 @@ do_setup_rec_test $tn.9.1 {
SELECT * FROM "t t" WHERE a=? SELECT * FROM "t t" WHERE a=?
} { } {
CREATE INDEX 't t_idx_00000061' ON 't t'(a); CREATE INDEX 't t_idx_00000061' ON 't t'(a);
0|0|0|SEARCH TABLE t t USING INDEX t t_idx_00000061 (a=?) SEARCH TABLE t t USING INDEX t t_idx_00000061 (a=?)
} }
do_setup_rec_test $tn.9.2 { do_setup_rec_test $tn.9.2 {
@ -196,7 +196,7 @@ do_setup_rec_test $tn.9.2 {
SELECT * FROM "t t" WHERE b BETWEEN ? AND ? SELECT * FROM "t t" WHERE b BETWEEN ? AND ?
} { } {
CREATE INDEX 't t_idx_00000062' ON 't t'(b); CREATE INDEX 't t_idx_00000062' ON 't t'(b);
0|0|0|SEARCH TABLE t t USING INDEX t t_idx_00000062 (b>? AND b<?) SEARCH TABLE t t USING INDEX t t_idx_00000062 (b>? AND b<?)
} }
# Columns with names that require quotes. # Columns with names that require quotes.
@ -207,7 +207,7 @@ do_setup_rec_test $tn.10.1 {
SELECT * FROM t3 WHERE "b b" = ? SELECT * FROM t3 WHERE "b b" = ?
} { } {
CREATE INDEX t3_idx_00050c52 ON t3('b b'); CREATE INDEX t3_idx_00050c52 ON t3('b b');
0|0|0|SEARCH TABLE t3 USING INDEX t3_idx_00050c52 (b b=?) SEARCH TABLE t3 USING INDEX t3_idx_00050c52 (b b=?)
} }
do_setup_rec_test $tn.10.2 { do_setup_rec_test $tn.10.2 {
@ -216,7 +216,7 @@ do_setup_rec_test $tn.10.2 {
SELECT * FROM t3 ORDER BY "b b" SELECT * FROM t3 ORDER BY "b b"
} { } {
CREATE INDEX t3_idx_00050c52 ON t3('b b'); CREATE INDEX t3_idx_00050c52 ON t3('b b');
0|0|0|SCAN TABLE t3 USING INDEX t3_idx_00050c52 SCAN TABLE t3 USING INDEX t3_idx_00050c52
} }
# Transitive constraints # Transitive constraints
@ -229,8 +229,8 @@ do_setup_rec_test $tn.11.1 {
} { } {
CREATE INDEX t5_idx_000123a7 ON t5(a, b); CREATE INDEX t5_idx_000123a7 ON t5(a, b);
CREATE INDEX t6_idx_00000063 ON t6(c); CREATE INDEX t6_idx_00000063 ON t6(c);
0|0|1|SEARCH TABLE t6 USING INDEX t6_idx_00000063 (c=?) SEARCH TABLE t6 USING INDEX t6_idx_00000063 (c=?)
0|1|0|SEARCH TABLE t5 USING COVERING INDEX t5_idx_000123a7 (a=? AND b=?) SEARCH TABLE t5 USING COVERING INDEX t5_idx_000123a7 (a=? AND b=?)
} }
# OR terms. # OR terms.
@ -242,8 +242,8 @@ do_setup_rec_test $tn.12.1 {
} { } {
CREATE INDEX t7_idx_00000062 ON t7(b); CREATE INDEX t7_idx_00000062 ON t7(b);
CREATE INDEX t7_idx_00000061 ON t7(a); CREATE INDEX t7_idx_00000061 ON t7(a);
0|0|0|SEARCH TABLE t7 USING INDEX t7_idx_00000061 (a=?) SEARCH TABLE t7 USING INDEX t7_idx_00000061 (a=?)
0|0|0|SEARCH TABLE t7 USING INDEX t7_idx_00000062 (b=?) SEARCH TABLE t7 USING INDEX t7_idx_00000062 (b=?)
} }
# rowid terms. # rowid terms.
@ -254,7 +254,7 @@ do_setup_rec_test $tn.13.1 {
SELECT * FROM t8 WHERE rowid=? SELECT * FROM t8 WHERE rowid=?
} { } {
(no new indexes) (no new indexes)
0|0|0|SEARCH TABLE t8 USING INTEGER PRIMARY KEY (rowid=?) SEARCH TABLE t8 USING INTEGER PRIMARY KEY (rowid=?)
} }
do_setup_rec_test $tn.13.2 { do_setup_rec_test $tn.13.2 {
CREATE TABLE t8(a, b); CREATE TABLE t8(a, b);
@ -262,7 +262,7 @@ do_setup_rec_test $tn.13.2 {
SELECT * FROM t8 ORDER BY rowid SELECT * FROM t8 ORDER BY rowid
} { } {
(no new indexes) (no new indexes)
0|0|0|SCAN TABLE t8 SCAN TABLE t8
} }
do_setup_rec_test $tn.13.3 { do_setup_rec_test $tn.13.3 {
CREATE TABLE t8(a, b); CREATE TABLE t8(a, b);
@ -270,7 +270,7 @@ do_setup_rec_test $tn.13.3 {
SELECT * FROM t8 WHERE a=? ORDER BY rowid SELECT * FROM t8 WHERE a=? ORDER BY rowid
} { } {
CREATE INDEX t8_idx_00000061 ON t8(a); CREATE INDEX t8_idx_00000061 ON t8(a);
0|0|0|SEARCH TABLE t8 USING INDEX t8_idx_00000061 (a=?) SEARCH TABLE t8 USING INDEX t8_idx_00000061 (a=?)
} }
# Triggers # Triggers
@ -285,8 +285,8 @@ do_setup_rec_test $tn.14 {
INSERT INTO t9 VALUES(?, ?, ?); INSERT INTO t9 VALUES(?, ?, ?);
} { } {
CREATE INDEX t10_idx_00000062 ON t10(b); CREATE INDEX t10_idx_00000062 ON t10(b);
0|1|0|-- TRIGGER t9t -- TRIGGER t9t
0|0|0|SEARCH TABLE t10 USING INDEX t10_idx_00000062 (b=?) SEARCH TABLE t10 USING INDEX t10_idx_00000062 (b=?)
} }
do_setup_rec_test $tn.15 { do_setup_rec_test $tn.15 {
@ -302,8 +302,8 @@ do_setup_rec_test $tn.15 {
SELECT * FROM t2, t1 WHERE b=? AND d=? AND t2.rowid=t1.rowid SELECT * FROM t2, t1 WHERE b=? AND d=? AND t2.rowid=t1.rowid
} { } {
CREATE INDEX t2_idx_00000064 ON t2(d); CREATE INDEX t2_idx_00000064 ON t2(d);
0|0|0|SEARCH TABLE t2 USING INDEX t2_idx_00000064 (d=?) SEARCH TABLE t2 USING INDEX t2_idx_00000064 (d=?)
0|1|1|SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?)
} }
do_setup_rec_test $tn.16 { do_setup_rec_test $tn.16 {
@ -312,7 +312,7 @@ do_setup_rec_test $tn.16 {
SELECT * FROM t1 WHERE b IS NOT NULL; SELECT * FROM t1 WHERE b IS NOT NULL;
} { } {
(no new indexes) (no new indexes)
0|0|0|SCAN TABLE t1 SCAN TABLE t1
} }
} }

View File

@ -1123,9 +1123,9 @@ int idxFindIndexes(
"EXPLAIN QUERY PLAN %s", pStmt->zSql "EXPLAIN QUERY PLAN %s", pStmt->zSql
); );
while( rc==SQLITE_OK && sqlite3_step(pExplain)==SQLITE_ROW ){ while( rc==SQLITE_OK && sqlite3_step(pExplain)==SQLITE_ROW ){
int iSelectid = sqlite3_column_int(pExplain, 0); /* int iId = sqlite3_column_int(pExplain, 0); */
int iOrder = sqlite3_column_int(pExplain, 1); /* int iParent = sqlite3_column_int(pExplain, 1); */
int iFrom = sqlite3_column_int(pExplain, 2); /* int iNotUsed = sqlite3_column_int(pExplain, 2); */
const char *zDetail = (const char*)sqlite3_column_text(pExplain, 3); const char *zDetail = (const char*)sqlite3_column_text(pExplain, 3);
int nDetail = STRLEN(zDetail); int nDetail = STRLEN(zDetail);
int i; int i;
@ -1152,9 +1152,7 @@ int idxFindIndexes(
} }
} }
pStmt->zEQP = idxAppendText(&rc, pStmt->zEQP, "%d|%d|%d|%s\n", pStmt->zEQP = idxAppendText(&rc, pStmt->zEQP, "%s\n", zDetail);
iSelectid, iOrder, iFrom, zDetail
);
} }
for(pEntry=hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ for(pEntry=hIdx.pFirst; pEntry; pEntry=pEntry->pNext){

View File

@ -60,6 +60,6 @@ do_eqp_test 1.4 {
do_eqp_test 1.5 { do_eqp_test 1.5 {
SELECT * FROM f1 WHERE rank MATCH ? SELECT * FROM f1 WHERE rank MATCH ?
} {SCAN TABLE f1 VIRTUAL TABLE INDEX 2: } {SCAN TABLE f1 VIRTUAL TABLE INDEX 2:}
finish_test finish_test

View File

@ -74,42 +74,48 @@ do_test rtree6-1.5 {
do_eqp_test rtree6.2.1 { do_eqp_test rtree6.2.1 {
SELECT * FROM t1,t2 WHERE k=+ii AND x1<10 SELECT * FROM t1,t2 WHERE k=+ii AND x1<10
} { } {
0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0} QUERY PLAN
0 1 1 {SEARCH TABLE 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 { do_eqp_test rtree6.2.2 {
SELECT * FROM t1,t2 WHERE k=ii AND x1<10 SELECT * FROM t1,t2 WHERE k=ii AND x1<10
} { } {
0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0} QUERY PLAN
0 1 1 {SEARCH TABLE 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 { do_eqp_test rtree6.2.3 {
SELECT * FROM t1,t2 WHERE k=ii SELECT * FROM t1,t2 WHERE k=ii
} { } {
0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:} QUERY PLAN
0 1 1 {SEARCH TABLE 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 { do_eqp_test rtree6.2.4.1 {
SELECT * FROM t1,t2 WHERE v=+ii and x1<10 and x2>10 SELECT * FROM t1,t2 WHERE v=+ii and x1<10 and x2>10
} { } {
0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0E1} QUERY PLAN
0 1 1 {SEARCH TABLE 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 { do_eqp_test rtree6.2.4.2 {
SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10 SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10
} { } {
0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:C0E1} QUERY PLAN
0 1 1 {SEARCH TABLE 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 { do_eqp_test rtree6.2.5 {
SELECT * FROM t1,t2 WHERE k=ii AND x1<v SELECT * FROM t1,t2 WHERE k=ii AND x1<v
} { } {
0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:} QUERY PLAN
0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?)} |--SCAN TABLE t1 VIRTUAL TABLE INDEX 2:
`--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?)
} }
do_execsql_test rtree6-3.1 { do_execsql_test rtree6-3.1 {

View File

@ -29,31 +29,35 @@ do_eqp_test 1.1 {
SELECT * FROM r_tree, t SELECT * FROM r_tree, t
WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y
} { } {
0 0 1 {SCAN TABLE t} QUERY PLAN
0 1 0 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0} |--SCAN TABLE t
`--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0
} }
do_eqp_test 1.2 { do_eqp_test 1.2 {
SELECT * FROM t, r_tree SELECT * FROM t, r_tree
WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y
} { } {
0 0 0 {SCAN TABLE t} QUERY PLAN
0 1 1 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0} |--SCAN TABLE t
`--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0
} }
do_eqp_test 1.3 { do_eqp_test 1.3 {
SELECT * FROM t, r_tree SELECT * FROM t, r_tree
WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND ?<=max_y WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND ?<=max_y
} { } {
0 0 0 {SCAN TABLE t} QUERY PLAN
0 1 1 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0} |--SCAN TABLE t
`--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0
} }
do_eqp_test 1.5 { do_eqp_test 1.5 {
SELECT * FROM t, r_tree SELECT * FROM t, r_tree
} { } {
0 0 1 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:} QUERY PLAN
0 1 0 {SCAN TABLE t} |--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:
`--SCAN TABLE t
} }
do_execsql_test 2.0 { do_execsql_test 2.0 {
@ -82,31 +86,35 @@ do_eqp_test 2.1 {
SELECT * FROM r_tree, t SELECT * FROM r_tree, t
WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y
} { } {
0 0 1 {SCAN TABLE t} QUERY PLAN
0 1 0 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0} |--SCAN TABLE t
`--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0
} }
do_eqp_test 2.2 { do_eqp_test 2.2 {
SELECT * FROM t, r_tree SELECT * FROM t, r_tree
WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND t.x<=max_y
} { } {
0 0 0 {SCAN TABLE t} QUERY PLAN
0 1 1 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0} |--SCAN TABLE t
`--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0
} }
do_eqp_test 2.3 { do_eqp_test 2.3 {
SELECT * FROM t, r_tree SELECT * FROM t, r_tree
WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND ?<=max_y WHERE t.x>=min_x AND t.x<=max_x AND t.y>=min_y AND ?<=max_y
} { } {
0 0 0 {SCAN TABLE t} QUERY PLAN
0 1 1 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0} |--SCAN TABLE t
`--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:D3B2D1B0
} }
do_eqp_test 2.5 { do_eqp_test 2.5 {
SELECT * FROM t, r_tree SELECT * FROM t, r_tree
} { } {
0 0 1 {SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:} QUERY PLAN
0 1 0 {SCAN TABLE t} |--SCAN TABLE r_tree VIRTUAL TABLE INDEX 2:
`--SCAN TABLE t
} }
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -119,20 +127,25 @@ do_execsql_test 3.1 {
} }
do_eqp_test 3.2.1 { SELECT * FROM t1 CROSS JOIN t2 } { do_eqp_test 3.2.1 { SELECT * FROM t1 CROSS JOIN t2 } {
0 0 0 {SCAN TABLE t1} QUERY PLAN
0 1 1 {SCAN TABLE t2} |--SCAN TABLE t1
`--SCAN TABLE t2
} }
do_eqp_test 3.2.2 { SELECT * FROM t2 CROSS JOIN t1 } { do_eqp_test 3.2.2 { SELECT * FROM t2 CROSS JOIN t1 } {
0 0 0 {SCAN TABLE t2} 0 1 1 {SCAN TABLE t1} QUERY PLAN
|--SCAN TABLE t2
`--SCAN TABLE t1
} }
do_eqp_test 3.3.1 { SELECT * FROM t1 CROSS JOIN t3 } { do_eqp_test 3.3.1 { SELECT * FROM t1 CROSS JOIN t3 } {
0 0 0 {SCAN TABLE t1} QUERY PLAN
0 1 1 {SCAN TABLE 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 } { do_eqp_test 3.3.2 { SELECT * FROM t3 CROSS JOIN t1 } {
0 0 0 {SCAN TABLE t3 VIRTUAL TABLE INDEX 2:} QUERY PLAN
0 1 1 {SCAN TABLE t1} |--SCAN TABLE t3 VIRTUAL TABLE INDEX 2:
`--SCAN TABLE t1
} }
#-------------------------------------------------------------------- #--------------------------------------------------------------------
@ -189,8 +202,9 @@ do_rtree_integrity_test 5.1.1 rt
do_eqp_test 5.2 { do_eqp_test 5.2 {
SELECT * FROM t1, rt WHERE x==id; SELECT * FROM t1, rt WHERE x==id;
} { } {
0 0 0 {SCAN TABLE t1} QUERY PLAN
0 1 1 {SCAN TABLE 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" # Now create enough ANALYZE data to tell SQLite that virtual table "rt"
@ -205,8 +219,9 @@ sqlite3 db test.db
do_eqp_test 5.4 { do_eqp_test 5.4 {
SELECT * FROM t1, rt WHERE x==id; SELECT * FROM t1, rt WHERE x==id;
} { } {
0 0 1 {SCAN TABLE rt VIRTUAL TABLE INDEX 2:} QUERY PLAN
0 1 0 {SEARCH TABLE 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. # Delete the ANALYZE data. "t1" should be the outer loop again.
@ -217,8 +232,9 @@ sqlite3 db test.db
do_eqp_test 5.6 { do_eqp_test 5.6 {
SELECT * FROM t1, rt WHERE x==id; SELECT * FROM t1, rt WHERE x==id;
} { } {
0 0 0 {SCAN TABLE t1} QUERY PLAN
0 1 1 {SCAN TABLE 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 # This time create and attach a database that contains ANALYZE data for
@ -241,8 +257,9 @@ do_test 5.7 {
do_eqp_test 5.8 { do_eqp_test 5.8 {
SELECT * FROM t1, rt WHERE x==id; SELECT * FROM t1, rt WHERE x==id;
} { } {
0 0 0 {SCAN TABLE t1} QUERY PLAN
0 1 1 {SCAN TABLE rt VIRTUAL TABLE INDEX 1:} |--SCAN TABLE t1
`--SCAN TABLE rt VIRTUAL TABLE INDEX 1:
} }
#-------------------------------------------------------------------- #--------------------------------------------------------------------
@ -299,9 +316,9 @@ do_execsql_test 7.0 {
} }
proc do_eqp_execsql_test {tn sql res} { proc do_eqp_execsql_test {tn sql res1 res2} {
set query "EXPLAIN QUERY PLAN $sql ; $sql " do_eqp_test $tn.1 $sql $res1
uplevel [list do_execsql_test $tn $query $res] do_execsql_test $tn.2 $sql $res2
} }
do_eqp_execsql_test 7.1 { do_eqp_execsql_test 7.1 {
@ -309,9 +326,11 @@ do_eqp_execsql_test 7.1 {
ON (y1 BETWEEN ymin AND ymax) ON (y1 BETWEEN ymin AND ymax)
WHERE (x1 BETWEEN xmin AND xmax); WHERE (x1 BETWEEN xmin AND xmax);
} { } {
0 0 0 {SCAN TABLE xdir} QUERY PLAN
0 1 2 {SCAN TABLE ydir} |--SCAN TABLE xdir
0 2 1 {SCAN TABLE rt VIRTUAL TABLE INDEX 2:B2D3B0D1} |--SCAN TABLE ydir
`--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B2D3B0D1
} {
2 4 2 4
} }
@ -320,10 +339,11 @@ do_eqp_execsql_test 7.2 {
ON (y1 BETWEEN ymin AND ymax) ON (y1 BETWEEN ymin AND ymax)
WHERE (x1 BETWEEN xmin AND xmax); WHERE (x1 BETWEEN xmin AND xmax);
} { } {
0 0 0 {SCAN TABLE xdir} QUERY PLAN
0 1 1 {SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1} |--SCAN TABLE xdir
0 2 2 {SCAN TABLE ydir} |--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1
`--SCAN TABLE ydir
} {
5 1 2 7 12 14 {} 5 1 2 7 12 14 {}
5 2 2 7 8 12 10 5 2 2 7 8 12 10
5 4 5 5 10 10 10 5 4 5 5 10 10 10
@ -334,9 +354,11 @@ do_eqp_execsql_test 7.3 {
ON (y1 BETWEEN ymin AND ymax) ON (y1 BETWEEN ymin AND ymax)
WHERE (x1 BETWEEN xmin AND xmax); WHERE (x1 BETWEEN xmin AND xmax);
} { } {
0 0 0 {SCAN TABLE xdir} QUERY PLAN
0 1 1 {SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1} |--SCAN TABLE xdir
0 2 2 {SCAN TABLE ydir} |--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1
`--SCAN TABLE ydir
} {
2 4 2 4
} }
@ -345,9 +367,11 @@ do_eqp_execsql_test 7.4 {
ON (y1 BETWEEN ymin AND ymax) ON (y1 BETWEEN ymin AND ymax)
WHERE (x1 BETWEEN xmin AND xmax); WHERE (x1 BETWEEN xmin AND xmax);
} { } {
0 0 1 {SCAN TABLE xdir} QUERY PLAN
0 1 0 {SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1} |--SCAN TABLE xdir
0 2 2 {SCAN TABLE ydir} |--SCAN TABLE rt VIRTUAL TABLE INDEX 2:B0D1
`--SCAN TABLE ydir
} {
2 4 2 4
} }

View File

@ -1,5 +1,5 @@
C Fix\stest\scases\sso\sthat\sthey\swork\swith\sthe\snew\sEXPLAIN\sQUERY\sPLAN\soutput\nformat.\s\sOnly\ssome\sof\sthe\scases\shave\sbeen\sfixed.\s\sThis\sis\san\sincremental\ncheck-in. C More\stest\scase\supdates.\s\sTests\sare\sall\srunning\snow.
D 2018-05-02T18:00:17.259 D 2018-05-02T19:42:33.079
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439 F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
@ -44,8 +44,8 @@ F ext/async/sqlite3async.c 0f3070cc3f5ede78f2b9361fb3b629ce200d7d74
F ext/async/sqlite3async.h f489b080af7e72aec0e1ee6f1d98ab6cf2e4dcef F ext/async/sqlite3async.h f489b080af7e72aec0e1ee6f1d98ab6cf2e4dcef
F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3 F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3
F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4 F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4
F ext/expert/expert1.test 00fb67256755a5194dab3d462f8ed3ad4640b4731fe465e5e28cea42c59ce05e F ext/expert/expert1.test 81c8834822181d009c08b18d2afb3b0fce8167a8bbbf23496a0e598d2b21623d
F ext/expert/sqlite3expert.c 1dfa561e64dc0f89d56b96e6afda87468c34b43604c2df50c47e3f4362778fb2 F ext/expert/sqlite3expert.c 95fdee74be2912d962951d984f1123e55d3f44bd643da7a48ff6ea9426a47f69
F ext/expert/sqlite3expert.h af6354f8ee5c9e025024e63fec3bd640a802afcc3099a44d804752cf0791d811 F ext/expert/sqlite3expert.h af6354f8ee5c9e025024e63fec3bd640a802afcc3099a44d804752cf0791d811
F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72 F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72
F ext/fts1/README.txt 20ac73b006a70bcfd80069bdaf59214b6cf1db5e F ext/fts1/README.txt 20ac73b006a70bcfd80069bdaf59214b6cf1db5e
@ -187,7 +187,7 @@ F ext/fts5/test/fts5near.test 211477940142d733ac04fad97cb24095513ab2507073a99c27
F ext/fts5/test/fts5onepass.test f9b7d9b2c334900c6542a869760290e2ab5382af8fbd618834bf1fcc3e7b84da F ext/fts5/test/fts5onepass.test f9b7d9b2c334900c6542a869760290e2ab5382af8fbd618834bf1fcc3e7b84da
F ext/fts5/test/fts5optimize.test 36a752d24c818792032e4ff502936fc9cc5ef938721696396fdc79214b2717f1 F ext/fts5/test/fts5optimize.test 36a752d24c818792032e4ff502936fc9cc5ef938721696396fdc79214b2717f1
F ext/fts5/test/fts5phrase.test 13e5d8e9083077b3d9c74315b3c92ec723cc6eb37c8155e0bfe1bba00559f07b F ext/fts5/test/fts5phrase.test 13e5d8e9083077b3d9c74315b3c92ec723cc6eb37c8155e0bfe1bba00559f07b
F ext/fts5/test/fts5plan.test b932afb6248a21d2eb1696d2dc40eeb580ea1da79b383adb1a4f7d613fbdd4ec F ext/fts5/test/fts5plan.test 00dc4c974938b509db7cb3680407f068ee6e9cc824f492f68cb741a7b679fe41
F ext/fts5/test/fts5porter.test 8d08010c28527db66bc3feebd2b8767504aaeb9b101a986342fa7833d49d0d15 F ext/fts5/test/fts5porter.test 8d08010c28527db66bc3feebd2b8767504aaeb9b101a986342fa7833d49d0d15
F ext/fts5/test/fts5porter2.test 0d251a673f02fa13ca7f011654873b3add20745f7402f108600a23e52d8c7457 F ext/fts5/test/fts5porter2.test 0d251a673f02fa13ca7f011654873b3add20745f7402f108600a23e52d8c7457
F ext/fts5/test/fts5prefix.test a0fa67b06650f2deaa7bf27745899d94e0fb547ad9ecbd08bfad98c04912c056 F ext/fts5/test/fts5prefix.test a0fa67b06650f2deaa7bf27745899d94e0fb547ad9ecbd08bfad98c04912c056
@ -362,13 +362,13 @@ F ext/rtree/rtree2.test 5f25b01acd03470067a2d52783b2eb0a50bf836803d4342d20ca39e5
F ext/rtree/rtree3.test 2cafe8265d1ff28f206fce88d114f208349df482 F ext/rtree/rtree3.test 2cafe8265d1ff28f206fce88d114f208349df482
F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd73452c4b F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd73452c4b
F ext/rtree/rtree5.test 49c9041d713d54560b315c2c7ef7207ee287eba1b20f8266968a06f2e55d3142 F ext/rtree/rtree5.test 49c9041d713d54560b315c2c7ef7207ee287eba1b20f8266968a06f2e55d3142
F ext/rtree/rtree6.test 916a641d2beac01b9880871ff07612d56c1e466190a27c82ab36ffd58be03b9f F ext/rtree/rtree6.test 593e0d36510d5ac1d1fb39b018274ff17604fe8fdca8cf1f8e16559cea1477f4
F ext/rtree/rtree7.test c8fb2e555b128dd0f0bdb520c61380014f497f8a23c40f2e820acc9f9e4fdce5 F ext/rtree/rtree7.test c8fb2e555b128dd0f0bdb520c61380014f497f8a23c40f2e820acc9f9e4fdce5
F ext/rtree/rtree8.test 649f5a37ec656028a4a32674b9b1183104285a7625a09d2a8f52a1cef72c93f2 F ext/rtree/rtree8.test 649f5a37ec656028a4a32674b9b1183104285a7625a09d2a8f52a1cef72c93f2
F ext/rtree/rtree9.test c646f12c8c1c68ef015c6c043d86a0c42488e2e68ed1bb1b0771a7ca246cbabf F ext/rtree/rtree9.test c646f12c8c1c68ef015c6c043d86a0c42488e2e68ed1bb1b0771a7ca246cbabf
F ext/rtree/rtreeA.test 20623ca337ca3bd7e008cc9fb49e44dbe97f1a80b238e10a12bb4afcd0da3776 F ext/rtree/rtreeA.test 20623ca337ca3bd7e008cc9fb49e44dbe97f1a80b238e10a12bb4afcd0da3776
F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9 F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9
F ext/rtree/rtreeC.test d9d06dda1aee68b4dc227dfcc899f335f8b621e9d1920ee3d4e5dab8ccd71db7 F ext/rtree/rtreeC.test 55e40c4bd9735d9944280f0e664f39374e71bcd9cd3fe4e82786d20b48017fb5
F ext/rtree/rtreeD.test fe46aa7f012e137bd58294409b16c0d43976c3bb92c8f710481e577c4a1100dc F ext/rtree/rtreeD.test fe46aa7f012e137bd58294409b16c0d43976c3bb92c8f710481e577c4a1100dc
F ext/rtree/rtreeE.test e65d3fc625da1800b412fc8785817327d43ccfec5f5973912d8c9e471928caa9 F ext/rtree/rtreeE.test e65d3fc625da1800b412fc8785817327d43ccfec5f5973912d8c9e471928caa9
F ext/rtree/rtreeF.test 81ffa7ef51c4e4618d497a57328c265bf576990c7070633b623b23cd450ed331 F ext/rtree/rtreeF.test 81ffa7ef51c4e4618d497a57328c265bf576990c7070633b623b23cd450ed331
@ -596,11 +596,11 @@ F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
F test/analyze.test b3a9c67d00e1df7588a5b7be9a0292899f94fe8cac1f94a017277474ca2e59df F test/analyze.test b3a9c67d00e1df7588a5b7be9a0292899f94fe8cac1f94a017277474ca2e59df
F test/analyze3.test ff62d9029e6deb2c914490c6b00caf7fae47cc85cdc046e4a0d0a4d4b87c71d8 F test/analyze3.test ff62d9029e6deb2c914490c6b00caf7fae47cc85cdc046e4a0d0a4d4b87c71d8
F test/analyze4.test eff2df19b8dd84529966420f29ea52edc6b56213 F test/analyze4.test cdf88f3f72b0f0643a1ff6c730fc5af1e42464d47478d9fbac84c333f72c014e
F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4 F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4
F test/analyze6.test f1c552ce39cca4ec922a7e4e0e5d0203d6b3281f F test/analyze6.test 7b2667b879976ac4b90d8df80d5456328684f1f6f6fdef9469d6e53401f2f469
F test/analyze7.test bb1409afc9e8629e414387ef048b8e0e3e0bdc4f F test/analyze7.test a37f4d9cb699a8af068ae02df1bb08bf844df8e98a92a8126cbff89e226879d8
F test/analyze8.test c05a461d0a6b05991106467d0c47480f2e709c82 F test/analyze8.test e32a970564271114786703750e6939cf81dea4b8580874e38e9213ee092f6936
F test/analyze9.test 9fbf0e0101eef4f5dc149769aa14e10b76ee06e7c28598264b32173cd1999a54 F test/analyze9.test 9fbf0e0101eef4f5dc149769aa14e10b76ee06e7c28598264b32173cd1999a54
F test/analyzeA.test 22a892d67bd2223126335b99774cce56ba91122cfe82446d2927afc43ad667dc F test/analyzeA.test 22a892d67bd2223126335b99774cce56ba91122cfe82446d2927afc43ad667dc
F test/analyzeB.test a4c1c3048f6d9e090eb76e83eecb18bcf6d31a70 F test/analyzeB.test a4c1c3048f6d9e090eb76e83eecb18bcf6d31a70
@ -626,11 +626,11 @@ F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1
F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49 F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49
F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec
F test/autoinc.test 83aad64411583aac9ff0b629159ab4662029ab4e3f47090fce4efd132b304484 F test/autoinc.test 83aad64411583aac9ff0b629159ab4662029ab4e3f47090fce4efd132b304484
F test/autoindex1.test 788d0894aa3aee1220036d20696e98733fb7ca02265cb1e801700177120c1aeb F test/autoindex1.test a09958fa756129af10b6582bcbf3cbdf11e305e027b393f393caef801159dee0
F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df
F test/autoindex3.test 2dd997d6590438b53e4f715f9278aa91c9299cf3f81246a0915269c35beb790e F test/autoindex3.test 2dd997d6590438b53e4f715f9278aa91c9299cf3f81246a0915269c35beb790e
F test/autoindex4.test 49d3cd791a9baa16fb461d7ea3de80d019a819cf F test/autoindex4.test 49d3cd791a9baa16fb461d7ea3de80d019a819cf
F test/autoindex5.test 96f084a5e6024ea07cace5888df3223f3ea86990 F test/autoindex5.test 5f0135dc3b266277b8c1904624439097d8e8020dd7197eda13fda23c35c21a05
F test/autovacuum.test 0831cd34e14695d297187f7f6519265e3121c5b0a1720e548e86829e796129e9 F test/autovacuum.test 0831cd34e14695d297187f7f6519265e3121c5b0a1720e548e86829e796129e9
F test/autovacuum_ioerr2.test 8a367b224183ad801e0e24dcb7d1501f45f244b4 F test/autovacuum_ioerr2.test 8a367b224183ad801e0e24dcb7d1501f45f244b4
F test/avtrans.test b7dc25459ecbd86c6fa9c606ee3068f59d81e225118617dcf2bbb6ded2ade89e F test/avtrans.test b7dc25459ecbd86c6fa9c606ee3068f59d81e225118617dcf2bbb6ded2ade89e
@ -646,7 +646,7 @@ F test/badutf2.test f5bc7f2d280670ecd79b9cf4f0f1760c607fe51f
F test/bc_common.tcl b5e42d80305be95697e6370e015af571e5333a1c F test/bc_common.tcl b5e42d80305be95697e6370e015af571e5333a1c
F test/bestindex1.test 852170bddbb21daa121fabcc274640ff83d7d8705912e8b5fe7ed2c5a9a9224a F test/bestindex1.test 852170bddbb21daa121fabcc274640ff83d7d8705912e8b5fe7ed2c5a9a9224a
F test/bestindex2.test 9a0ccd320b6525eec3a706aae6cdab7e1b7b5abca75027e39f39f755e76e5928 F test/bestindex2.test 9a0ccd320b6525eec3a706aae6cdab7e1b7b5abca75027e39f39f755e76e5928
F test/bestindex3.test dfa5bcb1ae2f96463fb4106308908c8ed7348312de3519d981e632a0a2b6cd43 F test/bestindex3.test 92a34c82f1ae245ef71f8c999f50a9dccd097a310cb070244c7b5cd0d2e07d73
F test/bestindex4.test 4cb5ff7dbaebadb87d366f51969271778423b455 F test/bestindex4.test 4cb5ff7dbaebadb87d366f51969271778423b455
F test/bestindex5.test 412b42f8036b28d8b2f3534d89389ad946a4b1a65a12263f51936f7424296f1b F test/bestindex5.test 412b42f8036b28d8b2f3534d89389ad946a4b1a65a12263f51936f7424296f1b
F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c
@ -766,7 +766,7 @@ F test/e_blobclose.test 4b3c8c60c2171164d472059c73e9f3c1844bb66d
F test/e_blobopen.test e95e1d40f995056f6f322cd5e1a1b83a27e1a145 F test/e_blobopen.test e95e1d40f995056f6f322cd5e1a1b83a27e1a145
F test/e_blobwrite.test f87ff598b67af5b3ec002a8d83e804dc8d23808e88cf0080c176612fc9ffce14 F test/e_blobwrite.test f87ff598b67af5b3ec002a8d83e804dc8d23808e88cf0080c176612fc9ffce14
F test/e_changes.test fd66105385153dbf21fdb35eb8ef6c3e1eade579 F test/e_changes.test fd66105385153dbf21fdb35eb8ef6c3e1eade579
F test/e_createtable.test d4c6059d44dcd4b636de9aae322766062b471844 F test/e_createtable.test ef30054d1e4cec4d1da2ffcebcc15f1ded3ed7ae80f009019485be973f449917
F test/e_delete.test ab39084f26ae1f033c940b70ebdbbd523dc4962e F test/e_delete.test ab39084f26ae1f033c940b70ebdbbd523dc4962e
F test/e_droptrigger.test 3cd080807622c13e5bbb61fc9a57bd7754da2412 F test/e_droptrigger.test 3cd080807622c13e5bbb61fc9a57bd7754da2412
F test/e_dropview.test 21ce09c361227ddbc9819a5608ee2700c276bdd5 F test/e_dropview.test 21ce09c361227ddbc9819a5608ee2700c276bdd5
@ -869,7 +869,7 @@ F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18
F test/fts3ao.test c416d50c4fdb6f32a15205b3d0a49eb74fcea92feb66b531a83c904770de5ff1 F test/fts3ao.test c416d50c4fdb6f32a15205b3d0a49eb74fcea92feb66b531a83c904770de5ff1
F test/fts3atoken.test 4b4c16fdcfc972f2cdbba212375a060a86ccf5f1 F test/fts3atoken.test 4b4c16fdcfc972f2cdbba212375a060a86ccf5f1
F test/fts3auto.test b981fea19b132b4e6878f50d7c1f369b28f68eb9 F test/fts3auto.test b981fea19b132b4e6878f50d7c1f369b28f68eb9
F test/fts3aux1.test 24b8a69e342a6684e3929408b245cdf5de0d45f8094108fa0a57cd007228963d F test/fts3aux1.test 7a170e172afdbceb67f5baa05941fd4fbf56af42f61daa3d140f4b4bf4cb68f6
F test/fts3aux2.test 7ae2b2c13aefdf4169279a27a5f51780ce57f6ba F test/fts3aux2.test 7ae2b2c13aefdf4169279a27a5f51780ce57f6ba
F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491 F test/fts3b.test c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491
F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958 F test/fts3c.test fc723a9cf10b397fdfc2b32e73c53c8b1ec02958
@ -1218,7 +1218,7 @@ F test/select9.test aebc2bb0c3bc44606125033cbcaac2c8d1f33a95
F test/selectA.test b8a590f6493cad5b0bb4dfe1709bf7dcda0b6c40bb4caf32d1e36a89eebc8fc5 F test/selectA.test b8a590f6493cad5b0bb4dfe1709bf7dcda0b6c40bb4caf32d1e36a89eebc8fc5
F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25 F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
F test/selectC.test e25243f8ca503e06f252eb0218976d07cfeceac3 F test/selectC.test e25243f8ca503e06f252eb0218976d07cfeceac3
F test/selectD.test b0f02a04ef7737decb24e08be2c39b9664b43394 F test/selectD.test cfa9f27dbdbeaf2d021d26c79b6c790d8f26e5506d50117c7696d3e136d6d9e7
F test/selectE.test a8730ca330fcf40ace158f134f4fe0eb00c7edbf F test/selectE.test a8730ca330fcf40ace158f134f4fe0eb00c7edbf
F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3 F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3
F test/selectG.test 089f7d3d7e6db91566f00b036cb353107a2cca6220eb1cb264085a836dae8840 F test/selectG.test 089f7d3d7e6db91566f00b036cb353107a2cca6220eb1cb264085a836dae8840
@ -1352,7 +1352,7 @@ F test/tkt-5e10420e8d.test 904d1687b3c06d43e5b3555bbcf6802e7c0ffd84
F test/tkt-5ee23731f.test 9db6e1d7209dc0794948b260d6f82b2b1de83a9f F test/tkt-5ee23731f.test 9db6e1d7209dc0794948b260d6f82b2b1de83a9f
F test/tkt-6bfb98dfc0.test 24780633627b5cfc0635a5500c2389ebfb563336 F test/tkt-6bfb98dfc0.test 24780633627b5cfc0635a5500c2389ebfb563336
F test/tkt-752e1646fc.test ea78d88d14fe9866bdd991c634483334639e13bf F test/tkt-752e1646fc.test ea78d88d14fe9866bdd991c634483334639e13bf
F test/tkt-78e04e52ea.test 1b2e6bf4f1d9887b216b6da774e5f25915ec8118 F test/tkt-78e04e52ea.test 1b5be1bac961833a9fd70fe50738cb4064822c61f82c54f7d488435ec806ea62
F test/tkt-7a31705a7e6.test 9e9c057b6a9497c8f7ba7b16871029414ccf6550e7345d9085d6d71c9a56bb6f F test/tkt-7a31705a7e6.test 9e9c057b6a9497c8f7ba7b16871029414ccf6550e7345d9085d6d71c9a56bb6f
F test/tkt-7bbfb7d442.test 7b2cd79c7a17ae6750e75ec1a7846712a69c9d18 F test/tkt-7bbfb7d442.test 7b2cd79c7a17ae6750e75ec1a7846712a69c9d18
F test/tkt-80ba201079.test 105a721e6aad0ae3c5946d7615d1e4d03f6145b8 F test/tkt-80ba201079.test 105a721e6aad0ae3c5946d7615d1e4d03f6145b8
@ -1435,7 +1435,7 @@ F test/tkt3346.test 6f67c3ed7db94dfc5df4f5f0b63809a1f611e01a
F test/tkt3357.test 77c37c6482b526fe89941ce951c22d011f5922ed F test/tkt3357.test 77c37c6482b526fe89941ce951c22d011f5922ed
F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b
F test/tkt3424.test 61f831bd2b071bd128fa5d00fbda57e656ca5812 F test/tkt3424.test 61f831bd2b071bd128fa5d00fbda57e656ca5812
F test/tkt3442.test 53840ec5325bb94544792aad4c20476f81dc26b1 F test/tkt3442.test a1fc47c669e651d16494de3ff349bcb53281456f2ca02c8bc14220b6044bbfe8
F test/tkt3457.test 5651e2cbb94645b677ec663160b9e192b87b7d365aecdfb24e19f749575a6fc2 F test/tkt3457.test 5651e2cbb94645b677ec663160b9e192b87b7d365aecdfb24e19f749575a6fc2
F test/tkt3461.test 228ea328a5a21e8663f80ee3d212a6ad92549a19 F test/tkt3461.test 228ea328a5a21e8663f80ee3d212a6ad92549a19
F test/tkt3493.test 1686cbde85f8721fc1bdc0ee72f2ef2f63139218 F test/tkt3493.test 1686cbde85f8721fc1bdc0ee72f2ef2f63139218
@ -1584,7 +1584,7 @@ F test/walslow.test c05c68d4dc2700a982f89133ce103a1a84cc285f
F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747 F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747
F test/where.test f19ea3fa31c425b04af42c8b192a5b595ee84498df8d27dcd79ec043b25fbbfb F test/where.test f19ea3fa31c425b04af42c8b192a5b595ee84498df8d27dcd79ec043b25fbbfb
F test/where2.test 478d2170637b9211f593120648858593bf2445a1 F test/where2.test 478d2170637b9211f593120648858593bf2445a1
F test/where3.test 54cdeb02157acc979de41530b804ae7b09552bf1 F test/where3.test 2341a294e17193a6b1699ea7f192124a5286ca6acfcc3f4b06d16c931fbcda2c
F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8 F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2 F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
@ -1727,7 +1727,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P f2f525548c65f89f55cbe91da8a21512dedc6f7b68b58b7906d653e800a2963a P 5f0e803e33aa557865d5fc830d9202d628de9a94c9757058ca48f1a560702cd3
R c2fb03c3c8d3bca714f50d297b15ed28 R 082b82ad611d4d87c26221d79d5fbd45
U drh U drh
Z 275fa11767369a8ceab0cb6be2ece9b6 Z 58923cc0a63a66a0c06aeccf7817dd66

View File

@ -1 +1 @@
5f0e803e33aa557865d5fc830d9202d628de9a94c9757058ca48f1a560702cd3 dab5e5294813891469660cceb211ac1a1e526715bb57dcdbb1ab90321e6a4dad

View File

@ -38,7 +38,7 @@ do_test analyze4-1.0 {
# Should choose the t1a index since it is more specific than t1b. # 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} db eval {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=5 AND b IS NULL}
} {0 0 0 {SEARCH TABLE 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 # Verify that the t1b index shows that it does not narrow down the
# search any at all. # search any at all.

View File

@ -61,14 +61,18 @@ do_test analyze6-1.0 {
# #
do_test analyze6-1.1 { do_test analyze6-1.1 {
eqp {SELECT count(*) FROM ev, cat WHERE x=y} eqp {SELECT count(*) FROM ev, cat WHERE x=y}
} {0 0 1 {SCAN TABLE cat USING COVERING INDEX catx} 0 1 0 {SEARCH TABLE 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 # The same plan is chosen regardless of the order of the tables in the
# FROM clause. # FROM clause.
# #
do_test analyze6-1.2 { do_eqp_test analyze6-1.2 {
eqp {SELECT count(*) FROM cat, ev WHERE x=y} SELECT count(*) FROM cat, ev WHERE x=y
} {0 0 0 {SCAN TABLE cat USING COVERING INDEX catx} 0 1 1 {SEARCH TABLE ev USING COVERING INDEX evy (y=?)}} } {
QUERY PLAN
|--SCAN TABLE cat USING COVERING INDEX catx
`--SEARCH TABLE ev USING COVERING INDEX evy (y=?)
}
# Ticket [83ea97620bd3101645138b7b0e71c12c5498fe3d] 2011-03-30 # Ticket [83ea97620bd3101645138b7b0e71c12c5498fe3d] 2011-03-30
@ -82,26 +86,26 @@ do_test analyze6-2.1 {
ANALYZE; ANALYZE;
} }
eqp {SELECT * FROM t201 WHERE z=5} eqp {SELECT * FROM t201 WHERE z=5}
} {0 0 0 {SEARCH TABLE t201 USING INDEX t201z (z=?)}} } {/*SEARCH TABLE t201 USING INDEX t201z (z=?)*/}
do_test analyze6-2.2 { do_test analyze6-2.2 {
eqp {SELECT * FROM t201 WHERE y=5} eqp {SELECT * FROM t201 WHERE y=5}
} {0 0 0 {SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)}} } {/*SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/}
do_test analyze6-2.3 { do_test analyze6-2.3 {
eqp {SELECT * FROM t201 WHERE x=5} eqp {SELECT * FROM t201 WHERE x=5}
} {0 0 0 {SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)}} } {/*SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)*/}
do_test analyze6-2.4 { do_test analyze6-2.4 {
execsql { execsql {
INSERT INTO t201 VALUES(1,2,3),(2,3,4),(3,4,5); INSERT INTO t201 VALUES(1,2,3),(2,3,4),(3,4,5);
ANALYZE t201; ANALYZE t201;
} }
eqp {SELECT * FROM t201 WHERE z=5} eqp {SELECT * FROM t201 WHERE z=5}
} {0 0 0 {SEARCH TABLE t201 USING INDEX t201z (z=?)}} } {/*SEARCH TABLE t201 USING INDEX t201z (z=?)*/}
do_test analyze6-2.5 { do_test analyze6-2.5 {
eqp {SELECT * FROM t201 WHERE y=5} eqp {SELECT * FROM t201 WHERE y=5}
} {0 0 0 {SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)}} } {/*SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/}
do_test analyze6-2.6 { do_test analyze6-2.6 {
eqp {SELECT * FROM t201 WHERE x=5} eqp {SELECT * FROM t201 WHERE x=5}
} {0 0 0 {SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)}} } {/*SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)*/}
do_test analyze6-2.7 { do_test analyze6-2.7 {
execsql { execsql {
INSERT INTO t201 VALUES(4,5,7); INSERT INTO t201 VALUES(4,5,7);
@ -111,12 +115,12 @@ do_test analyze6-2.7 {
ANALYZE t201; ANALYZE t201;
} }
eqp {SELECT * FROM t201 WHERE z=5} eqp {SELECT * FROM t201 WHERE z=5}
} {0 0 0 {SEARCH TABLE t201 USING INDEX t201z (z=?)}} } {/*SEARCH TABLE t201 USING INDEX t201z (z=?)*/}
do_test analyze6-2.8 { do_test analyze6-2.8 {
eqp {SELECT * FROM t201 WHERE y=5} eqp {SELECT * FROM t201 WHERE y=5}
} {0 0 0 {SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)}} } {/*SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?)*/}
do_test analyze6-2.9 { do_test analyze6-2.9 {
eqp {SELECT * FROM t201 WHERE x=5} eqp {SELECT * FROM t201 WHERE x=5}
} {0 0 0 {SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)}} } {/*SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?)*/}
finish_test finish_test

View File

@ -37,13 +37,13 @@ do_test analyze7-1.0 {
WHERE value BETWEEN 1 AND 256; WHERE value BETWEEN 1 AND 256;
EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123; EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;
} }
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test analyze7-1.1 { do_test analyze7-1.1 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/}
do_test analyze7-1.2 { do_test analyze7-1.2 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1cd (c=?)}} } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/}
# Run an analyze on one of the three indices. Verify that this # Run an analyze on one of the three indices. Verify that this
# effects the row-count estimate on the one query that uses that # effects the row-count estimate on the one query that uses that
@ -53,20 +53,20 @@ do_test analyze7-2.0 {
execsql {ANALYZE t1a;} execsql {ANALYZE t1a;}
db cache flush db cache flush
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test analyze7-2.1 { do_test analyze7-2.1 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/}
do_test analyze7-2.2 { do_test analyze7-2.2 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1cd (c=?)}} } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/}
# Verify that since the query planner now things that t1a is more # Verify that since the query planner now things that t1a is more
# selective than t1b, it prefers to use t1a. # selective than t1b, it prefers to use t1a.
# #
do_test analyze7-2.3 { do_test analyze7-2.3 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
# Run an analysis on another of the three indices. Verify that this # Run an analysis on another of the three indices. Verify that this
# new analysis works and does not disrupt the previous analysis. # new analysis works and does not disrupt the previous analysis.
@ -75,40 +75,40 @@ do_test analyze7-3.0 {
execsql {ANALYZE t1cd;} execsql {ANALYZE t1cd;}
db cache flush; db cache flush;
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test analyze7-3.1 { do_test analyze7-3.1 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b=123;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/}
do_test analyze7-3.2.1 { do_test analyze7-3.2.1 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=?;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=?;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1cd (c=?)}} } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/}
ifcapable stat4||stat3 { ifcapable stat4||stat3 {
# If ENABLE_STAT4 is defined, SQLite comes up with a different estimated # If ENABLE_STAT4 is defined, SQLite comes up with a different estimated
# row count for (c=2) than it does for (c=?). # row count for (c=2) than it does for (c=?).
do_test analyze7-3.2.2 { do_test analyze7-3.2.2 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1cd (c=?)}} } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/}
} else { } else {
# If ENABLE_STAT4 is not defined, the expected row count for (c=2) is the # If ENABLE_STAT4 is not defined, the expected row count for (c=2) is the
# same as that for (c=?). # same as that for (c=?).
do_test analyze7-3.2.3 { do_test analyze7-3.2.3 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=2;}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1cd (c=?)}} } {/*SEARCH TABLE t1 USING INDEX t1cd (c=?)*/}
} }
do_test analyze7-3.3 { do_test analyze7-3.3 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND b=123}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
ifcapable {!stat4 && !stat3} { ifcapable {!stat4 && !stat3} {
do_test analyze7-3.4 { do_test analyze7-3.4 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND b=123} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND b=123}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/}
do_test analyze7-3.5 { do_test analyze7-3.5 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND c=123} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=123 AND c=123}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
} }
do_test analyze7-3.6 { do_test analyze7-3.6 {
execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND d=123 AND b=123} execsql {EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE c=123 AND d=123 AND b=123}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1cd (c=? AND d=?)}} } {/*SEARCH TABLE t1 USING INDEX t1cd (c=? AND d=?)*/}
finish_test finish_test

View File

@ -61,25 +61,25 @@ do_test 1.0 {
# #
do_test 1.1 { do_test 1.1 {
eqp {SELECT * FROM t1 WHERE a=100 AND b=55} eqp {SELECT * FROM t1 WHERE a=100 AND b=55}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/}
do_test 1.2 { do_test 1.2 {
eqp {SELECT * FROM t1 WHERE a=99 AND b=55} eqp {SELECT * FROM t1 WHERE a=99 AND b=55}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test 1.3 { do_test 1.3 {
eqp {SELECT * FROM t1 WHERE a=101 AND b=55} eqp {SELECT * FROM t1 WHERE a=101 AND b=55}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test 1.4 { do_test 1.4 {
eqp {SELECT * FROM t1 WHERE a=100 AND b=56} eqp {SELECT * FROM t1 WHERE a=100 AND b=56}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b=?)*/}
do_test 1.5 { do_test 1.5 {
eqp {SELECT * FROM t1 WHERE a=99 AND b=56} eqp {SELECT * FROM t1 WHERE a=99 AND b=56}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test 1.6 { do_test 1.6 {
eqp {SELECT * FROM t1 WHERE a=101 AND b=56} eqp {SELECT * FROM t1 WHERE a=101 AND b=56}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test 2.1 { do_test 2.1 {
eqp {SELECT * FROM t1 WHERE a=100 AND b BETWEEN 50 AND 54} eqp {SELECT * FROM t1 WHERE a=100 AND b BETWEEN 50 AND 54}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)*/}
# There are many more values of c between 0 and 100000 than there are # There are many more values of c between 0 and 100000 than there are
# between 800000 and 900000. So t1c is more selective for the latter # between 800000 and 900000. So t1c is more selective for the latter
@ -99,17 +99,17 @@ do_execsql_test 3.0 {
} {50 376 32} } {50 376 32}
do_test 3.1 { do_test 3.1 {
eqp {SELECT * FROM t1 WHERE b BETWEEN 30 AND 34 AND c BETWEEN 0 AND 100000} eqp {SELECT * FROM t1 WHERE b BETWEEN 30 AND 34 AND c BETWEEN 0 AND 100000}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}} } {/*SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)*/}
do_test 3.2 { do_test 3.2 {
eqp {SELECT * FROM t1 eqp {SELECT * FROM t1
WHERE b BETWEEN 30 AND 34 AND c BETWEEN 800000 AND 900000} WHERE b BETWEEN 30 AND 34 AND c BETWEEN 800000 AND 900000}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}} } {/*SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)*/}
do_test 3.3 { do_test 3.3 {
eqp {SELECT * FROM t1 WHERE a=100 AND c BETWEEN 0 AND 100000} eqp {SELECT * FROM t1 WHERE a=100 AND c BETWEEN 0 AND 100000}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1a (a=?)}} } {/*SEARCH TABLE t1 USING INDEX t1a (a=?)*/}
do_test 3.4 { do_test 3.4 {
eqp {SELECT * FROM t1 eqp {SELECT * FROM t1
WHERE a=100 AND c BETWEEN 800000 AND 900000} WHERE a=100 AND c BETWEEN 800000 AND 900000}
} {0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}} } {/*SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)*/}
finish_test finish_test

View File

@ -177,35 +177,36 @@ do_execsql_test autoindex1-500 {
INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t501',null,'1000000'); INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t501',null,'1000000');
INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t502',null,'1000'); INSERT INTO sqlite_stat1(tbl,idx,stat) VALUES('t502',null,'1000');
ANALYZE sqlite_master; ANALYZE sqlite_master;
EXPLAIN QUERY PLAN }
do_eqp_test autoindex1-500.1 {
SELECT b FROM t501 SELECT b FROM t501
WHERE t501.a IN (SELECT x FROM t502 WHERE y=?); WHERE t501.a IN (SELECT x FROM t502 WHERE y=?);
} { } {
0 0 0 {SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?)} QUERY PLAN
0 0 0 {EXECUTE LIST SUBQUERY 1} |--SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?)
1 0 0 {SCAN TABLE t502} `--LIST SUBQUERY
`--SCAN TABLE t502
} }
do_execsql_test autoindex1-501 { do_eqp_test autoindex1-501 {
EXPLAIN QUERY PLAN
SELECT b FROM t501 SELECT b FROM t501
WHERE t501.a IN (SELECT x FROM t502 WHERE y=t501.b); WHERE t501.a IN (SELECT x FROM t502 WHERE y=t501.b);
} { } {
0 0 0 {SCAN TABLE t501} QUERY PLAN
0 0 0 {EXECUTE CORRELATED LIST SUBQUERY 1} |--SCAN TABLE t501
1 0 0 {SEARCH TABLE t502 USING AUTOMATIC COVERING INDEX (y=?)} `--CORRELATED LIST SUBQUERY
`--SEARCH TABLE t502 USING AUTOMATIC COVERING INDEX (y=?)
} }
do_execsql_test autoindex1-502 { do_eqp_test autoindex1-502 {
EXPLAIN QUERY PLAN
SELECT b FROM t501 SELECT b FROM t501
WHERE t501.a=123 WHERE t501.a=123
AND t501.a IN (SELECT x FROM t502 WHERE y=t501.b); AND t501.a IN (SELECT x FROM t502 WHERE y=t501.b);
} { } {
0 0 0 {SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?)} QUERY PLAN
0 0 0 {EXECUTE CORRELATED LIST SUBQUERY 1} |--SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?)
1 0 0 {SCAN TABLE t502} `--CORRELATED LIST SUBQUERY
`--SCAN TABLE t502
} }
# The following code checks a performance regression reported on the # The following code checks a performance regression reported on the
# mailing list on 2010-10-19. The problem is that the nRowEst field # mailing list on 2010-10-19. The problem is that the nRowEst field
# of ephermeral tables was not being initialized correctly and so no # of ephermeral tables was not being initialized correctly and so no
@ -257,7 +258,8 @@ do_execsql_test autoindex1-600 {
ON sheep (originating_flock); ON sheep (originating_flock);
CREATE INDEX sheep_reg_flock_index CREATE INDEX sheep_reg_flock_index
ON sheep (registering_flock); ON sheep (registering_flock);
EXPLAIN QUERY PLAN }
do_eqp_test autoindex1-600a {
SELECT x.sheep_no, x.registering_flock, x.date_of_registration SELECT x.sheep_no, x.registering_flock, x.date_of_registration
FROM sheep x LEFT JOIN FROM sheep x LEFT JOIN
(SELECT s.sheep_no, prev.flock_no, prev.owner_person_id, (SELECT s.sheep_no, prev.flock_no, prev.owner_person_id,
@ -274,21 +276,26 @@ do_execsql_test autoindex1-600 {
WHERE y.sheep_no IS NULL WHERE y.sheep_no IS NULL
ORDER BY x.registering_flock; ORDER BY x.registering_flock;
} { } {
1 0 0 {SCAN TABLE sheep AS s} QUERY PLAN
1 1 1 {SEARCH TABLE flock_owner AS prev USING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date<?)} |--MATERIALIZE xxxxxx
1 0 0 {EXECUTE CORRELATED SCALAR SUBQUERY 2} | |--SCAN TABLE sheep AS s
2 0 0 {SEARCH TABLE flock_owner AS later USING COVERING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date>? AND owner_change_date<?)} | |--SEARCH TABLE flock_owner AS prev USING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date<?)
0 0 0 {SCAN TABLE sheep AS x USING INDEX sheep_reg_flock_index} | `--CORRELATED SCALAR SUBQUERY
0 1 1 {SEARCH SUBQUERY 1 AS y USING AUTOMATIC COVERING INDEX (sheep_no=?)} | `--SEARCH TABLE flock_owner AS later USING COVERING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date>? AND owner_change_date<?)
|--SCAN TABLE sheep AS x USING INDEX sheep_reg_flock_index
`--SEARCH SUBQUERY xxxxxx AS y USING AUTOMATIC COVERING INDEX (sheep_no=?)
} }
do_execsql_test autoindex1-700 { do_execsql_test autoindex1-700 {
CREATE TABLE t5(a, b, c); CREATE TABLE t5(a, b, c);
EXPLAIN QUERY PLAN SELECT a FROM t5 WHERE b=10 ORDER BY c; }
do_eqp_test autoindex1-700a {
SELECT a FROM t5 WHERE b=10 ORDER BY c;
} { } {
0 0 0 {SCAN TABLE t5} QUERY PLAN
0 0 0 {USE TEMP B-TREE FOR ORDER BY} |--SCAN TABLE t5
`--USE TEMP B-TREE FOR ORDER BY
} }
# The following checks a performance issue reported on the sqlite-dev # The following checks a performance issue reported on the sqlite-dev

View File

@ -84,8 +84,7 @@ do_execsql_test autoindex5-1.0 {
# The following query should use an automatic index for the view # The following query should use an automatic index for the view
# in FROM clause of the subquery of the second result column. # in FROM clause of the subquery of the second result column.
# #
do_execsql_test autoindex5-1.1 { do_eqp_test autoindex5-1.1 {
EXPLAIN QUERY PLAN
SELECT SELECT
st.bug_name, st.bug_name,
(SELECT ALL debian_cve.bug FROM debian_cve (SELECT ALL debian_cve.bug FROM debian_cve
@ -103,7 +102,7 @@ do_execsql_test autoindex5-1.1 {
AND ( sp.release = 'sid' OR sp.release = 'stretch' OR sp.release = 'jessie' AND ( sp.release = 'sid' OR sp.release = 'stretch' OR sp.release = 'jessie'
OR sp.release = 'wheezy' OR sp.release = 'squeeze' ) OR sp.release = 'wheezy' OR sp.release = 'squeeze' )
ORDER BY sp.name, st.bug_name, sp.release, sp.subrelease; ORDER BY sp.name, st.bug_name, sp.release, sp.subrelease;
} {/SEARCH SUBQUERY 2 USING AUTOMATIC COVERING INDEX .bug_name=/} } {SEARCH SUBQUERY * USING AUTOMATIC COVERING INDEX (bug_name=?)}
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# Test that ticket [8a2adec1] has been fixed. # Test that ticket [8a2adec1] has been fixed.

View File

@ -145,11 +145,11 @@ ifcapable !icu {
do_eqp_test 2.2 { do_eqp_test 2.2 {
SELECT * FROM t2 WHERE x LIKE 'abc%' OR y = 'def' SELECT * FROM t2 WHERE x LIKE 'abc%' OR y = 'def'
} { } [string map {"\n " \n} {
QUERY PLAN QUERY PLAN
|--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?) |--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)
`--SEARCH TABLE t2 USING INDEX t2y (y=?) `--SEARCH TABLE t2 USING INDEX t2y (y=?)
} }]
} }
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -1385,13 +1385,13 @@ do_execsql_test 4.10.0 {
} }
do_createtable_tests 4.10 { do_createtable_tests 4.10 {
1 "EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b = 5" 1 "EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b = 5"
{0 0 0 {SEARCH TABLE 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" 2 "EXPLAIN QUERY PLAN SELECT * FROM t2 ORDER BY b, c"
{0 0 0 {SCAN TABLE 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" 3 "EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE b=10 AND c>10"
{0 0 0 {SEARCH TABLE 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 # EVIDENCE-OF: R-45493-35653 A CHECK constraint may be attached to a

View File

@ -105,10 +105,10 @@ db func rec rec
# #
do_execsql_test 2.1.1.1 { do_execsql_test 2.1.1.1 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term='braid' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term='braid'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 1:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 1:*/}
do_execsql_test 2.1.1.2 { do_execsql_test 2.1.1.2 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term='braid' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term='braid'
} {0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:}} } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/}
# Now show that using "term='braid'" means the virtual table returns # Now show that using "term='braid'" means the virtual table returns
# only 1 row to SQLite, but "+term='braid'" means all 19 are returned. # only 1 row to SQLite, but "+term='braid'" means all 19 are returned.
@ -154,24 +154,24 @@ do_execsql_test 2.1.5 { SELECT * FROM terms WHERE term=NULL } {}
do_execsql_test 2.2.1.1 { do_execsql_test 2.2.1.1 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term>'brain' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term>'brain'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 2:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 2:*/}
do_execsql_test 2.2.1.2 { do_execsql_test 2.2.1.2 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term>'brain' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term>'brain'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/}
do_execsql_test 2.2.1.3 { do_execsql_test 2.2.1.3 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term<'brain' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term<'brain'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 4:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 4:*/}
do_execsql_test 2.2.1.4 { do_execsql_test 2.2.1.4 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term<'brain' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term<'brain'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/}
do_execsql_test 2.2.1.5 { do_execsql_test 2.2.1.5 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term BETWEEN 'brags' AND 'brain' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE term BETWEEN 'brags' AND 'brain'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 6:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 6:*/}
do_execsql_test 2.2.1.6 { do_execsql_test 2.2.1.6 {
EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term BETWEEN 'brags' AND 'brain' EXPLAIN QUERY PLAN SELECT * FROM terms WHERE +term BETWEEN 'brags' AND 'brain'
} { 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:} } } {/*SCAN TABLE terms VIRTUAL TABLE INDEX 0:*/}
do_test 2.2.2.1 { do_test 2.2.2.1 {
set cnt 0 set cnt 0
@ -335,8 +335,9 @@ foreach {tn sort orderby} {
9 1 "ORDER BY occurrences DESC" 9 1 "ORDER BY occurrences DESC"
} { } {
set res [list 0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:}] set res {SCAN TABLE terms VIRTUAL TABLE INDEX 0:}
if {$sort} { lappend res 0 0 0 {USE TEMP B-TREE FOR ORDER BY} } if {$sort} { append res {*USE TEMP B-TREE FOR ORDER BY} }
set res "/*$res*/"
set sql "SELECT * FROM terms $orderby" set sql "SELECT * FROM terms $orderby"
do_execsql_test 2.3.1.$tn "EXPLAIN QUERY PLAN $sql" $res do_execsql_test 2.3.1.$tn "EXPLAIN QUERY PLAN $sql" $res
@ -403,39 +404,48 @@ do_execsql_test 4.1 {
INSERT INTO x3 SELECT term FROM terms WHERE col = '*'; INSERT INTO x3 SELECT term FROM terms WHERE col = '*';
} }
proc do_plansql_test {tn sql r} { proc do_plansql_test {tn sql r1 r2} {
uplevel do_execsql_test $tn [list "EXPLAIN QUERY PLAN $sql ; $sql"] [list $r] do_eqp_test $tn.eqp $sql $r1
do_execsql_test $tn $sql $r2
} }
do_plansql_test 4.2 { do_plansql_test 4.2 {
SELECT y FROM x2, terms WHERE y = term AND col = '*' SELECT y FROM x2, terms WHERE y = term AND col = '*'
} { } {
0 0 0 {SCAN TABLE x2} QUERY PLAN
0 1 1 {SCAN TABLE 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 a b c d e f g h i j k l
} }
do_plansql_test 4.3 { do_plansql_test 4.3 {
SELECT y FROM terms, x2 WHERE y = term AND col = '*' SELECT y FROM terms, x2 WHERE y = term AND col = '*'
} { } {
0 0 1 {SCAN TABLE x2} QUERY PLAN
0 1 0 {SCAN TABLE 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 a b c d e f g h i j k l
} }
do_plansql_test 4.4 { do_plansql_test 4.4 {
SELECT y FROM x3, terms WHERE y = term AND col = '*' SELECT y FROM x3, terms WHERE y = term AND col = '*'
} { } {
0 0 1 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:} QUERY PLAN
0 1 0 {SEARCH TABLE 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 a b c d e f g h i j k l
} }
do_plansql_test 4.5 { do_plansql_test 4.5 {
SELECT y FROM terms, x3 WHERE y = term AND occurrences>1 AND col = '*' SELECT y FROM terms, x3 WHERE y = term AND occurrences>1 AND col = '*'
} { } {
0 0 0 {SCAN TABLE terms VIRTUAL TABLE INDEX 0:} QUERY PLAN
0 1 1 {SEARCH TABLE x3 USING COVERING INDEX i1 (y=?)} |--SCAN TABLE terms VIRTUAL TABLE INDEX 0:
`--SEARCH TABLE x3 USING COVERING INDEX i1 (y=?)
} {
a k l a k l
} }

View File

@ -169,6 +169,6 @@ do_execsql_test selectD-4.1 {
WHERE x1.d>5 WHERE x1.d>5
GROUP BY x1.d) AS x2 GROUP BY x1.d) AS x2
ON t41.b=x2.d; ON t41.b=x2.d;
} {/.*SEARCH SUBQUERY 1 AS x2 USING AUTOMATIC.*/} } {/*SEARCH SUBQUERY 0x* AS x2 USING AUTOMATIC*/}
finish_test finish_test

View File

@ -41,10 +41,8 @@ do_test tkt-78e04-1.3 {
} }
} {} } {}
do_test tkt-78e04-1.4 { do_test tkt-78e04-1.4 {
execsql { db eval {EXPLAIN QUERY PLAN SELECT "" FROM "" WHERE "" LIKE '1abc%';}
EXPLAIN QUERY PLAN SELECT "" FROM "" WHERE "" LIKE '1abc%'; } {/*SCAN TABLE USING COVERING INDEX i1*/}
}
} {0 0 0 {SCAN TABLE USING COVERING INDEX i1}}
do_test tkt-78e04-1.5 { do_test tkt-78e04-1.5 {
execsql { execsql {
DROP TABLE ""; DROP TABLE "";
@ -57,12 +55,12 @@ do_test tkt-78e04-2.1 {
CREATE INDEX "" ON t2(x); CREATE INDEX "" ON t2(x);
EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=5; EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=5;
} }
} {0 0 0 {SEARCH TABLE t2 USING COVERING INDEX (x=?)}} } {/*SEARCH TABLE t2 USING COVERING INDEX (x=?)*/}
do_test tkt-78e04-2.2 { do_test tkt-78e04-2.2 {
execsql { execsql {
DROP INDEX ""; DROP INDEX "";
EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=2; EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=2;
} }
} {0 0 0 {SCAN TABLE t2}} } {/*SCAN TABLE t2*/}
finish_test finish_test

View File

@ -34,35 +34,24 @@ do_test tkt3442-1.1 {
} }
} {} } {}
# Explain Query Plan
#
proc EQP {sql} {
uplevel "execsql {EXPLAIN QUERY PLAN $sql}"
}
# These tests perform an EXPLAIN QUERY PLAN on both versions of the # These tests perform an EXPLAIN QUERY PLAN on both versions of the
# SELECT referenced in ticket #3442 (both '5000' and "5000") # SELECT referenced in ticket #3442 (both '5000' and "5000")
# and verify that the query plan is the same. # and verify that the query plan is the same.
# #
ifcapable explain { do_eqp_test tkt3442-1.2 {
do_test tkt3442-1.2 { SELECT node FROM listhash WHERE id='5000' LIMIT 1;
EQP { SELECT node FROM listhash WHERE id='5000' LIMIT 1; } } {SEARCH TABLE listhash USING INDEX ididx (id=?)}
} {0 0 0 {SEARCH TABLE listhash USING INDEX ididx (id=?)}} do_eqp_test tkt3442-1.3 {
do_test tkt3442-1.3 { SELECT node FROM listhash WHERE id="5000" LIMIT 1;
EQP { SELECT node FROM listhash WHERE id="5000" LIMIT 1; } } {SEARCH TABLE listhash USING INDEX ididx (id=?)}
} {0 0 0 {SEARCH TABLE listhash USING INDEX ididx (id=?)}}
}
# Some extra tests testing other permutations of 5000. # Some extra tests testing other permutations of 5000.
# #
ifcapable explain { do_eqp_test tkt3442-1.4 {
do_test tkt3442-1.4 { SELECT node FROM listhash WHERE id=5000 LIMIT 1;
EQP { SELECT node FROM listhash WHERE id=5000 LIMIT 1; } } {SEARCH TABLE listhash USING INDEX ididx (id=?)}
} {0 0 0 {SEARCH TABLE listhash USING INDEX ididx (id=?)}}
}
do_test tkt3442-1.5 { do_test tkt3442-1.5 {
catchsql { catchsql {
SELECT node FROM listhash WHERE id=[5000] LIMIT 1; SELECT node FROM listhash WHERE id=[5000] LIMIT 1;

View File

@ -235,17 +235,20 @@ do_execsql_test where3-3.0 {
CREATE TABLE t302(x, y); CREATE TABLE t302(x, y);
INSERT INTO t302 VALUES(4,5); INSERT INTO t302 VALUES(4,5);
ANALYZE; ANALYZE;
explain query plan SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y;
} {
0 0 0 {SCAN TABLE t302}
0 1 1 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)}
} }
do_execsql_test where3-3.1 { do_eqp_test where3-3.0a {
explain query plan SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y;
} {
QUERY PLAN
|--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; SELECT * FROM t301, t302 WHERE t302.x=5 AND t301.a=t302.y;
} { } {
0 0 1 {SCAN TABLE t302} QUERY PLAN
0 1 0 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)} |--SCAN TABLE t302
`--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)
} }
do_execsql_test where3-3.2 { do_execsql_test where3-3.2 {
SELECT * FROM t301 WHERE c=3 AND a IS NULL; SELECT * FROM t301 WHERE c=3 AND a IS NULL;
@ -308,8 +311,8 @@ do_execsql_test where3-5.0 {
CREATE INDEX bbb_111 ON bbb (fk, type); CREATE INDEX bbb_111 ON bbb (fk, type);
CREATE INDEX bbb_222 ON bbb (parent, position); CREATE INDEX bbb_222 ON bbb (parent, position);
CREATE INDEX bbb_333 ON bbb (fk, lastModified); CREATE INDEX bbb_333 ON bbb (fk, lastModified);
}
EXPLAIN QUERY PLAN do_eqp_test where3-5.0a {
SELECT bbb.title AS tag_title SELECT bbb.title AS tag_title
FROM aaa JOIN bbb ON bbb.id = aaa.parent FROM aaa JOIN bbb ON bbb.id = aaa.parent
WHERE aaa.fk = 'constant' WHERE aaa.fk = 'constant'
@ -317,12 +320,12 @@ do_execsql_test where3-5.0 {
AND bbb.parent = 4 AND bbb.parent = 4
ORDER BY bbb.title COLLATE NOCASE ASC; ORDER BY bbb.title COLLATE NOCASE ASC;
} { } {
0 0 0 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)} QUERY PLAN
0 1 1 {SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?)} |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)
0 0 0 {USE TEMP B-TREE FOR ORDER BY} |--SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?)
`--USE TEMP B-TREE FOR ORDER BY
} }
do_execsql_test where3-5.1 { do_eqp_test where3-5.1 {
EXPLAIN QUERY PLAN
SELECT bbb.title AS tag_title SELECT bbb.title AS tag_title
FROM aaa JOIN aaa AS bbb ON bbb.id = aaa.parent FROM aaa JOIN aaa AS bbb ON bbb.id = aaa.parent
WHERE aaa.fk = 'constant' WHERE aaa.fk = 'constant'
@ -330,12 +333,12 @@ do_execsql_test where3-5.1 {
AND bbb.parent = 4 AND bbb.parent = 4
ORDER BY bbb.title COLLATE NOCASE ASC; ORDER BY bbb.title COLLATE NOCASE ASC;
} { } {
0 0 0 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)} QUERY PLAN
0 1 1 {SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?)} |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)
0 0 0 {USE TEMP B-TREE FOR ORDER BY} |--SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?)
`--USE TEMP B-TREE FOR ORDER BY
} }
do_execsql_test where3-5.2 { do_eqp_test where3-5.2 {
EXPLAIN QUERY PLAN
SELECT bbb.title AS tag_title SELECT bbb.title AS tag_title
FROM bbb JOIN aaa ON bbb.id = aaa.parent FROM bbb JOIN aaa ON bbb.id = aaa.parent
WHERE aaa.fk = 'constant' WHERE aaa.fk = 'constant'
@ -343,12 +346,12 @@ do_execsql_test where3-5.2 {
AND bbb.parent = 4 AND bbb.parent = 4
ORDER BY bbb.title COLLATE NOCASE ASC; ORDER BY bbb.title COLLATE NOCASE ASC;
} { } {
0 0 1 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)} QUERY PLAN
0 1 0 {SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?)} |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)
0 0 0 {USE TEMP B-TREE FOR ORDER BY} |--SEARCH TABLE bbb USING INTEGER PRIMARY KEY (rowid=?)
`--USE TEMP B-TREE FOR ORDER BY
} }
do_execsql_test where3-5.3 { do_eqp_test where3-5.3 {
EXPLAIN QUERY PLAN
SELECT bbb.title AS tag_title SELECT bbb.title AS tag_title
FROM aaa AS bbb JOIN aaa ON bbb.id = aaa.parent FROM aaa AS bbb JOIN aaa ON bbb.id = aaa.parent
WHERE aaa.fk = 'constant' WHERE aaa.fk = 'constant'
@ -356,9 +359,10 @@ do_execsql_test where3-5.3 {
AND bbb.parent = 4 AND bbb.parent = 4
ORDER BY bbb.title COLLATE NOCASE ASC; ORDER BY bbb.title COLLATE NOCASE ASC;
} { } {
0 0 1 {SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)} QUERY PLAN
0 1 0 {SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?)} |--SEARCH TABLE aaa USING INDEX aaa_333 (fk=?)
0 0 0 {USE TEMP B-TREE FOR ORDER BY} |--SEARCH TABLE aaa AS bbb USING INTEGER PRIMARY KEY (rowid=?)
`--USE TEMP B-TREE FOR ORDER BY
} }
# Name resolution with NATURAL JOIN and USING # Name resolution with NATURAL JOIN and USING