-C Enhance\swhereLoopCheaperProperSubset(X,Y)\sso\sthat\sit\sdoes\snot\sreport\strue\nif\sX\suses\sskip-scan\sless\sthan\sY,\ssince\sin\sthat\scase\sX\smight\ndeserve\sto\sbe\scheaper\seven\sif\sit\sis\sa\sproper\ssubset.
-D 2014-11-05T13:13:13.983
+C Add\sa\stest\scase\sto\scheck\sthat\sthe\sprevious\scommit\sis\seffective.
+D 2014-11-05T14:19:05.905
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F test/skipscan2.test d1d1450952b7275f0b0a3a981f0230532743951a
F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5
F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2
-F test/skipscan6.test 3a891b45d6df266ced861a2ad9d03fca2bc7fcc5
+F test/skipscan6.test 5866039d03a56f5bd0b3d172a012074a1d90a15b
F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
F test/sort.test c4400e7533748f6bd7413851ff148645e82b9e2d
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 7974c0ed10ffdc960a43fed89845c2bed428958d
-R 418c93fe7ac7140cffa87d5f3271cb48
-U drh
-Z 68c42aaa0a73598a09ed4215a5cfd466
+P c106b755369c1f8546e897ecd2ac56fd09d6e885
+R 27944d6d7573adcf0b31a08e199961ff
+U dan
+Z 1a8729ffc04f45ef7b13c20540a14cbb
} {/INDEX good .bb=. AND aa=. AND dd>. AND dd<../}
+# Create a table containing 100 rows. Column "a" contains a copy of the
+# rowid value - sequentially increasing integers from 1 to 100. Column
+# "b" contains the value of (a % 5). Columns "c" and "d" both contain
+# constant values (i.e. the same for every row).
+#
+# Then create a second table t2. t2 is the same as t3 except for the
+# order in which the indexes are created.
+#
+do_execsql_test 3.0 {
+ CREATE TABLE t3(a, b, c, d);
+ CREATE INDEX t3_ba ON t3(b, a, c);
+ CREATE INDEX t3_a ON t3(a);
+
+ WITH d(a, b) AS (
+ SELECT 1, 1
+ UNION ALL
+ SELECT a+1, (a+1) % 5 FROM d WHERE a<100
+ )
+ INSERT INTO t3 SELECT a, b, 'c', 'd' FROM d;
+
+ CREATE TABLE t2(a, b, c, d);
+ CREATE INDEX t2_a ON t2(a);
+ CREATE INDEX t2_ba ON t2(b, a, c);
+ INSERT INTO t2 SELECT * FROM t3;
+
+ ANALYZE;
+ SELECT * FROM sqlite_stat1;
+} {
+ t2 t2_ba {100 20 1 1}
+ t2 t2_a {100 1}
+ t3 t3_a {100 1}
+ t3 t3_ba {100 20 1 1}
+}
+
+# Use index "t3_a", as (a=?) is expected to match only a single row.
+#
+do_eqp_test 3.1 {
+ SELECT * FROM t3 WHERE a = ? AND c = ?
+} {
+ 0 0 0 {SEARCH TABLE t3 USING INDEX t3_a (a=?)}
+}
+
+# The same query on table t2. This should use index "t2_a", for the
+# same reason. At one point though, it was mistakenly using a skip-scan.
+#
+do_eqp_test 3.2 {
+ SELECT * FROM t2 WHERE a = ? AND c = ?
+} {
+ 0 0 0 {SEARCH TABLE t2 USING INDEX t2_a (a=?)}
+}
+
+finish_test
+
+
+
finish_test