rtree_strategy {SELECT * FROM t1,t2 WHERE k=+ii AND x1<10}
} {Ca}
-do_test rtree6.2.1 {
- query_plan {SELECT * FROM t1,t2 WHERE k=+ii AND x1<10}
-} [list \
- {TABLE t1 VIRTUAL TABLE INDEX 2:Ca} \
- {TABLE t2 USING PRIMARY KEY} \
-]
-
-do_test rtree6.2.2 {
- query_plan {SELECT * FROM t1,t2 WHERE k=ii AND x1<10}
-} [list \
- {TABLE t1 VIRTUAL TABLE INDEX 2:Ca} \
- {TABLE t2 USING PRIMARY KEY} \
-]
-
-do_test rtree6.2.3 {
- query_plan {SELECT * FROM t1,t2 WHERE k=ii}
-} [list \
- {TABLE t1 VIRTUAL TABLE INDEX 2:} \
- {TABLE t2 USING PRIMARY KEY} \
-]
-
-do_test rtree6.2.4 {
- query_plan {SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10}
-} [list \
- {TABLE t1 VIRTUAL TABLE INDEX 2:CaEb} \
- {TABLE t2} \
-]
-
-do_test rtree6.2.5 {
- query_plan {SELECT * FROM t1,t2 WHERE k=ii AND x1<v}
-} [list \
- {TABLE t1 VIRTUAL TABLE INDEX 2:} \
- {TABLE t2 USING PRIMARY KEY} \
-]
+do_eqp_test rtree6.2.1 {
+ SELECT * FROM t1,t2 WHERE k=+ii AND x1<10
+} {
+ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:Ca (~0 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+}
+
+do_eqp_test rtree6.2.2 {
+ SELECT * FROM t1,t2 WHERE k=ii AND x1<10
+} {
+ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:Ca (~0 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+}
+
+do_eqp_test rtree6.2.3 {
+ SELECT * FROM t1,t2 WHERE k=ii
+} {
+ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2: (~0 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+}
+
+do_eqp_test rtree6.2.4 {
+ SELECT * FROM t1,t2 WHERE v=10 and x1<10 and x2>10
+} {
+ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2:CaEb (~0 rows)}
+ 0 1 1 {SCAN TABLE t2 (~100000 rows)}
+}
+
+do_eqp_test rtree6.2.5 {
+ SELECT * FROM t1,t2 WHERE k=ii AND x1<v
+} {
+ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 2: (~0 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+}
finish_test
-C Test\ssome\sexample\scode\sfrom\sdocumentation\spage\seqp.html.
-D 2010-11-15T14:51:33
+C Change\ssome\stest\scases\sto\saccount\sfor\sthe\snew\sEXPLAIN\sQUERY\sPLAN\soutput.
+D 2010-11-15T16:12:59
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in e7a59672eaeb04408d1fa8501618d7501a3c5e39
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F ext/rtree/rtree3.test a494da55c30ee0bc9b01a91c80c81b387b22d2dc
F ext/rtree/rtree4.test 0061e6f464fd3dc6a79f82454c5a1c3dadbe42af
F ext/rtree/rtree5.test ce3d7ccae2cfd9d2e1052b462424964c9bdcda12
-F ext/rtree/rtree6.test 1ebe0d632a7501cc80ba5a225f028fd4f0fdda08
+F ext/rtree/rtree6.test 309806a2a27ef5897d4dd6aee2e8006bf754cc22
F ext/rtree/rtree7.test bcb647b42920b3b5d025846689147778485cc318
F ext/rtree/rtree8.test 9772e16da71e17e02bdebf0a5188590f289ab37d
F ext/rtree/rtree9.test df9843d1a9195249c8d3b4ea6aedda2d5c73e9c2
F test/alter4.test 1e5dd6b951e9f65ca66422edff02e56df82dd403
F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
F test/analyze.test c1eb87067fc16ece7c07e823d6395fd831b270c5
-F test/analyze2.test 59dac6c399c0c5d1a90a11ee7cc606743fb6db93
-F test/analyze3.test 6d4f4b0929545a9d1af803a0608a0c51b92a3537
+F test/analyze2.test 3bde8f0879d9c1f2df3af21fcf42e706d8ee1e43
+F test/analyze3.test 820ddfb7591b49607fbaf77240c7955ac3cabb04
F test/async.test ad4ba51b77cd118911a3fe1356b0809da9c108c3
F test/async2.test bf5e2ca2c96763b4cba3d016249ad7259a5603b6
F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e
F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398
F test/enc3.test 5c550d59ff31dccdba5d1a02ae11c7047d77c041
F test/enc4.test 4b575ef09e0eff896e73bd24076f96c2aa6a42de
-F test/eqp.test 32567e06a0dc02a158d93571fdc843bb33824fc7
+F test/eqp.test 0a76679df56eba3709fa9f6ce6761a6c6f8401e7
F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3
F test/exclusive.test 53e1841b422e554cecf0160f937c473d6d0e3062
F test/exclusive2.test 76e63c05349cb70d09d60b99d2ae625525ff5155
F test/fts3malloc.test 9c8cc3f885bb4dfc66d0460c52f68f45e4710d1b
F test/fts3matchinfo.test 211b04434926bce9cc2b3cc5f58725affefe5165
F test/fts3near.test 2e318ee434d32babd27c167142e2b94ddbab4844
-F test/fts3query.test 724a662dbbec4e9dbef66a1389588aa29aeb9b27
+F test/fts3query.test df864f4c9b14927daa7199242d82cff44599327b
F test/fts3rnd.test 707533ce943f490443ce5e696236bb1675a37635
F test/fts3shared.test 8bb266521d7c5495c0ae522bb4d376ad5387d4a2
F test/fts3snippet.test a12f22a3ba4dd59751a57c79b031d07ab5f51ddd
F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c
F test/temptable.test f42121a0d29a62f00f93274464164177ab1cc24a
F test/temptrigger.test b0273db072ce5f37cf19140ceb1f0d524bbe9f05
-F test/tester.tcl 8c26ecddb981aba189edad7ca1e6d780306ccca4
+F test/tester.tcl 45e8f7b56ef93c5c66886f1bbd05dda78d248d86
F test/thread001.test a3e6a7254d1cb057836cb3145b60c10bf5b7e60f
F test/thread002.test afd20095e6e845b405df4f2c920cb93301ca69db
F test/thread003.test b824d4f52b870ae39fc5bae4d8070eca73085dca
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P ce27bf38405ce805dad95ec22cbe68ddc7af544a
-R 1facb0207f6324270040270a0296fb61
+P 547bc2c232cbf7b7ff295287ab8fddb880e517f9
+R 863ad3e83f428e5bfb8e9c7834fdadd1
U dan
-Z d4c8887d4bb41a227b698c81727e9001
+Z a86da5f4e7ed6219a15e362cd53c69a5
-547bc2c232cbf7b7ff295287ab8fddb880e517f9
\ No newline at end of file
+88a854e18fc6bd619fa8d8a911abff50a9b76b9e
\ No newline at end of file
return
}
+set testprefix analyze2
+
# Do not use a codec for tests in this file, as the database file is
# manipulated directly using tcl scripts (using the [hexio_write] command).
#
execsql COMMIT
execsql ANALYZE
} {}
-do_test analyze2-2.2 {
- eqp "SELECT * FROM t1 WHERE x>500 AND y>700"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-2.3 {
- eqp "SELECT * FROM t1 WHERE x>700 AND y>500"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
-do_test analyze2-2.3 {
- eqp "SELECT * FROM t1 WHERE y>700 AND x>500"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-2.4 {
- eqp "SELECT * FROM t1 WHERE y>500 AND x>700"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
-do_test analyze2-2.5 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 100 AND 200 AND y BETWEEN 400 AND 700"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
-do_test analyze2-2.6 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 100 AND 500 AND y BETWEEN 400 AND 700"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-2.7 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN -400 AND -300 AND y BETWEEN 100 AND 300"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
-do_test analyze2-2.8 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 100 AND 300 AND y BETWEEN -400 AND -300"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-2.9 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 500 AND 100 AND y BETWEEN 100 AND 300"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
-do_test analyze2-2.10 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 100 AND 300 AND y BETWEEN 500 AND 100"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
+do_eqp_test 2.2 {
+ SELECT * FROM t1 WHERE x>500 AND y>700
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>?) (~100 rows)}
+}
+do_eqp_test 2.3 {
+ SELECT * FROM t1 WHERE x>700 AND y>500
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x>?) (~100 rows)}
+}
+do_eqp_test 2.3 {
+ SELECT * FROM t1 WHERE y>700 AND x>500
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>?) (~100 rows)}
+}
+do_eqp_test 2.4 {
+ SELECT * FROM t1 WHERE y>500 AND x>700
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x>?) (~100 rows)}
+}
+do_eqp_test 2.5 {
+ SELECT * FROM t1 WHERE x BETWEEN 100 AND 200 AND y BETWEEN 400 AND 700
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x>? AND x<?) (~25 rows)}
+}
+do_eqp_test 2.6 {
+ SELECT * FROM t1 WHERE x BETWEEN 100 AND 500 AND y BETWEEN 400 AND 700
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>? AND y<?) (~75 rows)}
+}
+do_eqp_test 2.7 {
+ SELECT * FROM t1 WHERE x BETWEEN -400 AND -300 AND y BETWEEN 100 AND 300
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x>? AND x<?) (~25 rows)}
+}
+do_eqp_test 2.8 {
+ SELECT * FROM t1 WHERE x BETWEEN 100 AND 300 AND y BETWEEN -400 AND -300
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>? AND y<?) (~25 rows)}
+}
+do_eqp_test 2.9 {
+ SELECT * FROM t1 WHERE x BETWEEN 500 AND 100 AND y BETWEEN 100 AND 300
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x>? AND x<?) (~25 rows)}
+}
+do_eqp_test 2.10 {
+ SELECT * FROM t1 WHERE x BETWEEN 100 AND 300 AND y BETWEEN 500 AND 100
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>? AND y<?) (~25 rows)}
+}
do_test analyze2-3.1 {
set alphabet [list a b c d e f g h i j]
}
} {t1 t1_y {100 299 499 699 899 ajj cjj ejj gjj ijj}}
-do_test analyze2-3.3 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 100 AND 500 AND y BETWEEN 'a' AND 'b'"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-3.4 {
- eqp "SELECT * FROM t1 WHERE x BETWEEN 100 AND 400 AND y BETWEEN 'a' AND 'h'"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
-do_test analyze2-3.5 {
- eqp "SELECT * FROM t1 WHERE x<'a' AND y>'h'"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-3.6 {
- eqp "SELECT * FROM t1 WHERE x<444 AND y>'h'"
-} {0 0 {TABLE t1 WITH INDEX t1_y}}
-do_test analyze2-3.7 {
- eqp "SELECT * FROM t1 WHERE x<221 AND y>'g'"
-} {0 0 {TABLE t1 WITH INDEX t1_x}}
+do_eqp_test 3.3 {
+ SELECT * FROM t1 WHERE x BETWEEN 100 AND 500 AND y BETWEEN 'a' AND 'b'
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>? AND y<?) (~50 rows)}
+}
+do_eqp_test 3.4 {
+ SELECT * FROM t1 WHERE x BETWEEN 100 AND 400 AND y BETWEEN 'a' AND 'h'
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x>? AND x<?) (~50 rows)}
+}
+do_eqp_test 3.5 {
+ SELECT * FROM t1 WHERE x<'a' AND y>'h'
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>?) (~66 rows)}
+}
+do_eqp_test 3.6 {
+ SELECT * FROM t1 WHERE x<444 AND y>'h'
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_y (y>?) (~66 rows)}
+}
+do_eqp_test 3.7 {
+ SELECT * FROM t1 WHERE x<221 AND y>'g'
+} {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x<?) (~66 rows)}
+}
do_test analyze2-4.1 {
execsql { CREATE TABLE t3(a COLLATE nocase, b) }
}
} {t3 t3b {AbA CIj EIj GIj IIj bIj dIj fIj hIj jIj}}
-do_test analyze2-4.4 {
- eqp "SELECT * FROM t3 WHERE a > 'A' AND a < 'C' AND b > 'A' AND b < 'C'"
-} {0 0 {TABLE t3 WITH INDEX t3b}}
-do_test analyze2-4.5 {
- eqp "SELECT * FROM t3 WHERE a > 'A' AND a < 'c' AND b > 'A' AND b < 'c'"
-} {0 0 {TABLE t3 WITH INDEX t3a}}
+do_eqp_test 4.4 {
+ SELECT * FROM t3 WHERE a > 'A' AND a < 'C' AND b > 'A' AND b < 'C'
+} {
+ 0 0 0 {SEARCH TABLE t3 USING INDEX t3b (b>? AND b<?) (~11 rows)}
+}
+do_eqp_test 4.5 {
+ SELECT * FROM t3 WHERE a > 'A' AND a < 'c' AND b > 'A' AND b < 'c'
+} {
+ 0 0 0 {SEARCH TABLE t3 USING INDEX t3a (a>? AND a<?) (~22 rows)}
+}
ifcapable utf16 {
proc test_collate {enc lhs rhs} {
GROUP BY tbl,idx
}
} {t4 t4x {afa bej cej dej eej fej gej hej iej jej}}
- do_test analyze2-5.3 {
- eqp "SELECT * FROM t4 WHERE x>'ccc'"
- } {0 0 {TABLE t4 WITH INDEX t4x}}
- do_test analyze2-5.4 {
- eqp "SELECT * FROM t4 AS t41, t4 AS t42 WHERE t41.x>'ccc' AND t42.x>'ggg'"
- } {0 1 {TABLE t4 AS t42 WITH INDEX t4x} 1 0 {TABLE t4 AS t41 WITH INDEX t4x}}
- do_test analyze2-5.5 {
- eqp "SELECT * FROM t4 AS t41, t4 AS t42 WHERE t41.x>'ddd' AND t42.x>'ccc'"
- } {0 0 {TABLE t4 AS t41 WITH INDEX t4x} 1 1 {TABLE t4 AS t42 WITH INDEX t4x}}
+ do_eqp_test 5.3 {
+ SELECT * FROM t4 WHERE x>'ccc'
+ } {0 0 0 {SEARCH TABLE t4 USING COVERING INDEX t4x (x>?) (~800 rows)}}
+ do_eqp_test 5.4 {
+ SELECT * FROM t4 AS t41, t4 AS t42 WHERE t41.x>'ccc' AND t42.x>'ggg'
+ } {
+ 0 0 1 {SEARCH TABLE t4 AS t42 USING COVERING INDEX t4x (x>?) (~300 rows)}
+ 0 1 0 {SEARCH TABLE t4 AS t41 USING COVERING INDEX t4x (x>?) (~800 rows)}
+ }
+ do_eqp_test 5.5 {
+ SELECT * FROM t4 AS t41, t4 AS t42 WHERE t41.x>'ddd' AND t42.x>'ccc'
+ } {
+ 0 0 0 {SEARCH TABLE t4 AS t41 USING COVERING INDEX t4x (x>?) (~700 rows)}
+ 0 1 1 {SEARCH TABLE t4 AS t42 USING COVERING INDEX t4x (x>?) (~800 rows)}
+ }
}
#--------------------------------------------------------------------
t5.a = 1 AND
t6.a = 1 AND t6.b = 1
}
-} {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+} {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a=? AND b=?) (~9 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.1.2 {
db cache flush
execsql ANALYZE
t5.a = 1 AND
t6.a = 1 AND t6.b = 1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a=?) (~1 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.1.3 {
sqlite3 db test.db
eqp { SELECT * FROM t5,t6 WHERE t5.rowid=t6.rowid AND
t5.a = 1 AND
t6.a = 1 AND t6.b = 1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a=?) (~1 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.1.4 {
execsql {
PRAGMA writable_schema = 1;
t5.a = 1 AND
t6.a = 1 AND t6.b = 1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a=?) (~1 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.1.5 {
execsql {
PRAGMA writable_schema = 1;
t5.a = 1 AND
t6.a = 1 AND t6.b = 1
}
-} {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+} {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a=? AND b=?) (~9 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.1.6 {
execsql {
PRAGMA writable_schema = 1;
t5.a = 1 AND
t6.a = 1 AND t6.b = 1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a=?) (~1 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.2.1 {
execsql {
t5.a>1 AND t5.a<15 AND
t6.a>1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a>? AND a<?) (~110000 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.2.2 {
db cache flush
execsql ANALYZE
t5.a>1 AND t5.a<15 AND
t6.a>1
}
-} {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+} {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.2.3 {
sqlite3 db test.db
eqp { SELECT * FROM t5,t6 WHERE t5.rowid=t6.rowid AND
t5.a>1 AND t5.a<15 AND
t6.a>1
}
-} {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+} {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.2.4 {
execsql {
PRAGMA writable_schema = 1;
t5.a>1 AND t5.a<15 AND
t6.a>1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a>? AND a<?) (~110000 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.2.5 {
execsql {
PRAGMA writable_schema = 1;
t5.a>1 AND t5.a<15 AND
t6.a>1
}
-} {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+} {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a>? AND a<?) (~110000 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-6.2.6 {
execsql {
PRAGMA writable_schema = 1;
t5.a>1 AND t5.a<15 AND
t6.a>1
}
-} {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+} {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
#--------------------------------------------------------------------
# These tests, analyze2-7.*, test that the sqlite_stat2 functionality
t5.a>1 AND t5.a<15 AND
t6.a>1
} db1
- } {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+ } {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-7.6 {
incr_schema_cookie test.db
execsql { SELECT * FROM sqlite_master } db2
t5.a>1 AND t5.a<15 AND
t6.a>1
} db2
- } {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+ } {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-7.7 {
incr_schema_cookie test.db
execsql { SELECT * FROM sqlite_master } db1
t5.a>1 AND t5.a<15 AND
t6.a>1
} db1
- } {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+ } {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-7.8 {
execsql { DELETE FROM sqlite_stat2 } db2
t5.a>1 AND t5.a<15 AND
t6.a>1
} db1
- } {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+ } {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-7.9 {
execsql { SELECT * FROM sqlite_master } db2
eqp { SELECT * FROM t5,t6 WHERE t5.rowid=t6.rowid AND
t5.a>1 AND t5.a<15 AND
t6.a>1
} db2
- } {0 1 {TABLE t6 WITH INDEX t6i} 1 0 {TABLE t5 USING PRIMARY KEY}}
+ } {0 0 1 {SEARCH TABLE t6 USING COVERING INDEX t6i (a>?) (~2 rows)} 0 1 0 {SEARCH TABLE t5 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test analyze2-7.10 {
incr_schema_cookie test.db
t5.a>1 AND t5.a<15 AND
t6.a>1
} db1
- } {0 0 {TABLE t5 WITH INDEX t5i} 1 1 {TABLE t6 USING PRIMARY KEY}}
+ } {0 0 0 {SEARCH TABLE t5 USING COVERING INDEX t5i (a>? AND a<?) (~2 rows)} 0 1 1 {SEARCH TABLE t6 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
db1 close
db2 close
}
} {}
-do_test analyze3-1.1.2 {
- eqp { SELECT sum(y) FROM t1 WHERE x>200 AND x<300 }
-} {0 0 {TABLE t1 WITH INDEX i1}}
-do_test analyze3-1.1.3 {
- eqp { SELECT sum(y) FROM t1 WHERE x>0 AND x<1100 }
-} {0 0 {TABLE t1}}
+do_eqp_test analyze3-1.1.2 {
+ SELECT sum(y) FROM t1 WHERE x>200 AND x<300
+} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (x>? AND x<?) (~100 rows)}}
+do_eqp_test analyze3-1.1.3 {
+ SELECT sum(y) FROM t1 WHERE x>0 AND x<1100
+} {0 0 0 {SCAN TABLE t1 (~111 rows)}}
do_test analyze3-1.1.4 {
sf_execsql { SELECT sum(y) FROM t1 WHERE x>200 AND x<300 }
ANALYZE;
}
} {}
-do_test analyze3-1.2.2 {
- eqp { SELECT sum(y) FROM t2 WHERE x>1 AND x<2 }
-} {0 0 {TABLE t2 WITH INDEX i2}}
-do_test analyze3-1.2.3 {
- eqp { SELECT sum(y) FROM t2 WHERE x>0 AND x<99 }
-} {0 0 {TABLE t2}}
+do_eqp_test analyze3-1.2.2 {
+ SELECT sum(y) FROM t2 WHERE x>1 AND x<2
+} {0 0 0 {SEARCH TABLE t2 USING INDEX i2 (x>? AND x<?) (~200 rows)}}
+do_eqp_test analyze3-1.2.3 {
+ SELECT sum(y) FROM t2 WHERE x>0 AND x<99
+} {0 0 0 {SCAN TABLE t2 (~111 rows)}}
do_test analyze3-1.2.4 {
sf_execsql { SELECT sum(y) FROM t2 WHERE x>12 AND x<20 }
} {161 0 4760}
ANALYZE;
}
} {}
-do_test analyze3-1.3.2 {
- eqp { SELECT sum(y) FROM t3 WHERE x>200 AND x<300 }
-} {0 0 {TABLE t3 WITH INDEX i3}}
-do_test analyze3-1.3.3 {
- eqp { SELECT sum(y) FROM t3 WHERE x>0 AND x<1100 }
-} {0 0 {TABLE t3}}
+do_eqp_test analyze3-1.3.2 {
+ SELECT sum(y) FROM t3 WHERE x>200 AND x<300
+} {0 0 0 {SEARCH TABLE t3 USING INDEX i3 (x>? AND x<?) (~100 rows)}}
+do_eqp_test analyze3-1.3.3 {
+ SELECT sum(y) FROM t3 WHERE x>0 AND x<1100
+} {0 0 0 {SCAN TABLE t3 (~111 rows)}}
do_test analyze3-1.3.4 {
sf_execsql { SELECT sum(y) FROM t3 WHERE x>200 AND x<300 }
}
execsql COMMIT
} {}
-do_test analyze3-2.2 {
- eqp { SELECT count(a) FROM t1 WHERE b LIKE 'a%' }
-} {0 0 {TABLE t1 WITH INDEX i1}}
-do_test analyze3-2.3 {
- eqp { SELECT count(a) FROM t1 WHERE b LIKE '%a' }
-} {0 0 {TABLE t1}}
+do_eqp_test analyze3-2.2 {
+ SELECT count(a) FROM t1 WHERE b LIKE 'a%'
+} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (b>? AND b<?) (~55000 rows)}}
+do_eqp_test analyze3-2.3 {
+ SELECT count(a) FROM t1 WHERE b LIKE '%a'
+} {0 0 0 {SCAN TABLE t1 (~500000 rows)}}
do_test analyze3-2.4 {
sf_execsql { SELECT count(*) FROM t1 WHERE b LIKE 'a%' }
# eqp-4.*: Compound select statements.
#
-proc do_eqp_test {name sql res} {
- uplevel do_execsql_test $name [list "EXPLAIN QUERY PLAN $sql"] [list $res]
-}
proc det {args} { uplevel do_eqp_test $args }
do_execsql_test 1.1 {
# The following tests check that ticket 775b39dd3c has been fixed.
#
-proc eqp {sql} {
- uplevel [list execsql "EXPLAIN QUERY PLAN $sql"]
-}
do_test fts3query-4.1 {
execsql {
DROP TABLE IF EXISTS t1;
CREATE TABLE bt(title);
}
} {}
-do_test fts3query-4.2 {
- eqp "SELECT t1.number FROM t1, ft WHERE t1.number=ft.rowid ORDER BY t1.date"
-} {0 0 {TABLE t1 WITH INDEX i1 ORDER BY} 1 1 {TABLE ft VIRTUAL TABLE INDEX 1:}}
-do_test fts3query-4.3 {
- eqp "SELECT t1.number FROM ft, t1 WHERE t1.number=ft.rowid ORDER BY t1.date"
-} {0 1 {TABLE t1 WITH INDEX i1 ORDER BY} 1 0 {TABLE ft VIRTUAL TABLE INDEX 1:}}
-do_test fts3query-4.4 {
- eqp "SELECT t1.number FROM t1, bt WHERE t1.number=bt.rowid ORDER BY t1.date"
-} {0 0 {TABLE t1 WITH INDEX i1 ORDER BY} 1 1 {TABLE bt USING PRIMARY KEY}}
-do_test fts3query-4.5 {
- eqp "SELECT t1.number FROM bt, t1 WHERE t1.number=bt.rowid ORDER BY t1.date"
-} {0 1 {TABLE t1 WITH INDEX i1 ORDER BY} 1 0 {TABLE bt USING PRIMARY KEY}}
+do_eqp_test fts3query-4.2 {
+ SELECT t1.number FROM t1, ft WHERE t1.number=ft.rowid ORDER BY t1.date
+} {
+ 0 0 0 {SCAN TABLE t1 USING COVERING INDEX i1 (~1000000 rows)}
+ 0 1 1 {SCAN TABLE ft VIRTUAL TABLE INDEX 1: (~0 rows)}
+}
+do_eqp_test fts3query-4.3 {
+ SELECT t1.number FROM ft, t1 WHERE t1.number=ft.rowid ORDER BY t1.date
+} {
+ 0 0 1 {SCAN TABLE t1 USING COVERING INDEX i1 (~1000000 rows)}
+ 0 1 0 {SCAN TABLE ft VIRTUAL TABLE INDEX 1: (~0 rows)}
+}
+do_eqp_test fts3query-4.4 {
+ SELECT t1.number FROM t1, bt WHERE t1.number=bt.rowid ORDER BY t1.date
+} {
+ 0 0 0 {SCAN TABLE t1 USING COVERING INDEX i1 (~1000000 rows)}
+ 0 1 1 {SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+}
+do_eqp_test fts3query-4.5 {
+ SELECT t1.number FROM bt, t1 WHERE t1.number=bt.rowid ORDER BY t1.date
+} {
+ 0 0 1 {SCAN TABLE t1 USING COVERING INDEX i1 (~1000000 rows)}
+ 0 1 0 {SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+}
# Test that calling matchinfo() with the wrong number of arguments, or with
fix_testname testname
uplevel do_test $testname [list "catchsql {$sql}"] [list $result]
}
+proc do_eqp_test {name sql res} {
+ uplevel do_execsql_test $name [list "EXPLAIN QUERY PLAN $sql"] [list $res]
+}
#-------------------------------------------------------------------------
# Usage: do_select_tests PREFIX ?SWITCHES? TESTLIST