-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
-C Fix\sproblems\sin\sthe\sbackport,\sreducing\sthe\snumber\sof\serrors\sin\sthe\sTCL\stests\nto\sjust\sa\sfew\sdozen.\s\sMost\sof\sthe\sremaining\serrors\sseem\sto\sbe\sreal\sand\ndesirable\schanges\sof\sbehavior.
-D 2011-02-12T05:34:43.018
+C Fix\sthe\sexpected\soutput\son\stests\sso\sthat\sit\scorresponds\sto\sthe\snew\squery\nplanner\sresults.\s\sAll\sof\sveryquick.test\sis\snow\spassing\swith\nSQLITE_ENABLE_STAT2.
+D 2011-02-12T14:23:48.545
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 543f91f24cd7fee774ecc0a61c19704c0c3e78fd
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F test/alter3.test 25b95a136708f22b87184fa6a4309eea03d65153
F test/alter4.test 9386ffd1e9c7245f43eca412b2058d747509cc1f
F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
-F test/analyze.test bf692e7db414f268a136bade16c03a1bdbb9240c
-F test/analyze2.test 8f2b1534d43f5547ce9a6b736c021d4192c75be3
-F test/analyze3.test 6d4f4b0929545a9d1af803a0608a0c51b92a3537
+F test/analyze.test d21f2143664912a20d04b67baf4bed935e7b1b48
+F test/analyze2.test ea3df826879dd672031b27c6a845afc3a39f27d9
+F test/analyze3.test d61f55d8b472fc6e713160b1e577f7a68e63f38b
F test/async.test ad4ba51b77cd118911a3fe1356b0809da9c108c3
F test/async2.test bf5e2ca2c96763b4cba3d016249ad7259a5603b6
F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e
F test/attach2.test a295d2d7061adcee5884ef4a93c7c96a82765437
F test/attach3.test bd9830bc3a0d22ed1310c9bff6896927937017dc
F test/attachmalloc.test 38d2da5fdaf09ba0add57296967a3061e5842584
-F test/auth.test 8f21c160a4562f54f27618e85bac869efcecbcaf
+F test/auth.test 26cc6f219580191539bf335abe03e55e49310846
F test/auth2.test 270baddc8b9c273682760cffba6739d907bd2882
F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5
F test/autoinc.test 85ef3180a737e6580086a018c09c6f1a52759b46
-F test/autoindex1.test 53fdc13501a9d58ae049c0d39bb5c94389ff91bb
+F test/autoindex1.test fb1fe6a000ed0b3c2a4101cc4884313c3661e68e
F test/autovacuum.test bb7c0885e6f8f1d633045de48f2b66082162766d
F test/autovacuum_ioerr2.test 598b0663074d3673a9c1bc9a16e80971313bafe6
F test/avtrans.test 0252654f4295ddda3b2cce0e894812259e655a85
F test/diskfull.test 0cede7ef9d8f415d9d3944005c76be7589bb5ebb
F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
F test/e_expr.test 8a35ce2718c61e871970bda09f4f3e549067c1ba
-F test/e_fkey.test 6721a741c6499b3ab7e5385923233343c8f1ad05
+F test/e_fkey.test 35a4ec281da928fa8ebc3591a9c957258ecbb8be
F test/e_fts3.test 75bb0aee26384ef586165e21018a17f7cd843469
F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398
F test/memsubsys2.test 72a731225997ad5e8df89fdbeae9224616b6aecc
F test/minmax.test 722d80816f7e096bf2c04f4111f1a6c1ba65453d
F test/minmax2.test 33504c01a03bd99226144e4b03f7631a274d66e0
-F test/minmax3.test 66a60eb0f20281b0753249d347c5de0766954cee
+F test/minmax3.test cc1e8b010136db0d01a6f2a29ba5a9f321034354
F test/misc1.test e56baf44656dd68d6475a4b44521045a60241e9b
F test/misc2.test a628db7b03e18973e5d446c67696b03de718c9fd
F test/misc3.test 72c5dc87a78e7865c5ec7a969fc572913dbe96b6
-F test/misc4.test 91e8ed25c092c2bb4e0bb01864631e2930f8d7de
+F test/misc4.test 9c078510fbfff05a9869a0b6d8b86a623ad2c4f6
F test/misc5.test 45b2e3ed5f79af2b4f38ae362eaf4c49674575bd
F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
F test/misc7.test c5f4e6a82e04e71820c0f9f64f6733f04c8ae0ae
F test/select3.test 2ce595f8fb8e2ac10071d3b4e424cadd4634a054
F test/select4.test 44aa6e7110592e18110b0b9cf5c024d37d23be17
F test/select5.test e758b8ef94f69b111df4cb819008856655dcd535
-F test/select6.test 2b5e8500d8ec3dd4c8e0c99eb1431b3d11fcc24c
+F test/select6.test cc25a8650cf9a4d4f74e586c45a75f9836516b18
F test/select7.test dad6f00f0d49728a879d6eb6451d4752db0b0abe
F test/select8.test 391de11bdd52339c30580dabbbbe97e3e9a3c79d
F test/select9.test 74c0fb2c6eecb0219cbed0cbe3df136f8fbf9343
F test/tempdb.test 800c36623d67a2ad1f58784b9c5644e0405af6e6
F test/temptable.test f42121a0d29a62f00f93274464164177ab1cc24a
F test/temptrigger.test b0273db072ce5f37cf19140ceb1f0d524bbe9f05
-F test/tester.tcl ba665916dfef8c41769cd225ea374a6b05b75a96
+F test/tester.tcl c491b9f9533dacdf2523238940b8e8033f2f287b
F test/thread001.test a3e6a7254d1cb057836cb3145b60c10bf5b7e60f
F test/thread002.test afd20095e6e845b405df4f2c920cb93301ca69db
F test/thread003.test b824d4f52b870ae39fc5bae4d8070eca73085dca
F test/tkt-4a03edc4c8.test 2865e4edbc075b954daa82f8da7cc973033ec76e
F test/tkt-5e10420e8d.test 904d1687b3c06d43e5b3555bbcf6802e7c0ffd84
F test/tkt-5ee23731f.test 3581260f2a71e51db94e1506ba6b0f7311d002a9
-F test/tkt-78e04e52ea.test fb5430c675e708f5cbafdf3e7e5593da5145a527
+F test/tkt-78e04e52ea.test ab52f0c1e2de6e46c910f4cc16b086bba05952b7
F test/tkt-80e031a00f.test 9a154173461a4dbe2de49cda73963e04842d52f7
F test/tkt-94c04eaadb.test be5ea61cb04dfdc047d19b5c5a9e75fa3da67a7f
F test/tkt-9d68c883.test 458f7d82a523d7644b54b497c986378a7d8c8b67
F test/tkt3357.test 77c37c6482b526fe89941ce951c22d011f5922ed
F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b
F test/tkt3424.test 61f831bd2b071bd128fa5d00fbda57e656ca5812
-F test/tkt3442.test 89d7b41a4ec4d9d9b40ab8575d648579fb13cb4f
+F test/tkt3442.test 0adb70e9fe9cb750a702065a68ad647409dbc158
F test/tkt3457.test edbf54b05cbe5165f00192becbd621038f1615e4
F test/tkt3461.test 228ea328a5a21e8663f80ee3d212a6ad92549a19
F test/tkt3493.test 1686cbde85f8721fc1bdc0ee72f2ef2f63139218
F test/tkt3630.test 929f64852103054125200bc825c316d5f75d42f7
F test/tkt3718.test 3b59dcb5c4e7754dacd91e7fd353a61492cc402a
F test/tkt3731.test 0c5f4cbffe102d43c3b2188af91a9e36348f974b
-F test/tkt3757.test 8f2208930655bbd4f92c14e19e72303a43e098ef
+F test/tkt3757.test 10cd679a88675c880533083fc79ac04324525595
F test/tkt3761.test b95ea9c98f21cf91325f18a984887e62caceab33
F test/tkt3762.test 2a9f3b03df44ec49ec0cfa8d5da6574c2a7853df
F test/tkt3773.test 430b06567ce40285dfd2c4834a2a61816403efeb
F test/tkt3791.test a6624b9a80b216a26cf473607f42f3e51898c267
F test/tkt3793.test 754b73f0e6a9349c70dc57e522cf3247272ecd5d
F test/tkt3810.test 90fa0635dfa7da9680c8cd3513350a49b3a8ae12
-F test/tkt3824.test 3da2f5c81b057e3ff355f5dfc9aa0cf0a92e0206
+F test/tkt3824.test 150aa00bb6220672e5f0eb14dc8eaa36750425f0
F test/tkt3832.test 2300d10d57562b89875b72148338ac3e14f8847d
F test/tkt3838.test f956f0719b5f805b12dd1dbf19f19d298bacebc3
F test/tkt3841.test 4659845bc53f809a5932c61c6ce8c5bb9d6b947f
F test/walthread.test a25a393c068a2b42b44333fa3fdaae9072f1617c
F test/where.test de337a3fe0a459ec7c93db16a519657a90552330
F test/where2.test 43d4becaf5a5df854e6c21d624a1cb84c6904554
-F test/where3.test 3bf8006d441b66a57bee02bb420423f84eb8fde3
+F test/where3.test 3bd3848a1439e775e6d268e7896151763c8bc4b6
F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
F test/where7.test a0a92b8ce48d9c027fbdd7b764c7de1e1213575a
F test/where8.test a6c740fd286d7883e274e17b6230a9d672a7ab1f
F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
-F test/where9.test be19e1a92f80985c1a121b4678bf7d2123eaa623
+F test/where9.test 24f19ad14bb1b831564ced5273e681e495662848
F test/whereA.test 24c234263c8fe358f079d5e57d884fb569d2da0a
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
F test/wherelimit.test 5e9fd41e79bb2b2d588ed999d641d9c965619b31
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P e72cf118cb25e9fed96f8d5cebbc0f637892479a
-R cd223ce61acd48a0fa6d93a74733dd61
+P 9d2b0af266b85f10823e54ca6417e76950c1d531
+R 716c2554879c451567b11e004ed21569
U drh
-Z a73dbb9504f9bb87d458dc1f3711231d
+Z 4e672fc5ece21ffbe27c23d71389ecc8
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
-iD8DBQFNVhv2oxKgR168RlERApFoAJ4s0p8GLfjU21wkHd9FYZ6AXkPMTACeL9gy
-rUEoRNhVYquXJEH4o1up8iU=
-=3IXK
+iD8DBQFNVpf4oxKgR168RlERAnPNAJ47O1yXsq/ligOqmKbDGqny6c5lqgCeMySd
+2rRQeonIpwLNbwL34HKdnYA=
+=9LcO
-----END PGP SIGNATURE-----
-9d2b0af266b85f10823e54ca6417e76950c1d531
\ No newline at end of file
+f2a8b5ccfb46b6be5c8857bc495de14e55851bf4
\ No newline at end of file
execsql {
SELECT * FROM sqlite_stat1
}
-} {}
+} {t1 {} 0}
do_test analyze-1.12 {
catchsql {
ANALYZE t1;
execsql {
SELECT * FROM sqlite_stat1
}
-} {}
+} {t1 {} 0}
# Create some indices that can be analyzed. But do not yet add
# data. Without data in the tables, no analysis is done.
ANALYZE main.t1;
SELECT * FROM sqlite_stat1 ORDER BY idx;
}
-} {}
+} {t1 {} 0}
do_test analyze-2.2 {
execsql {
CREATE INDEX t1i2 ON t1(b);
ANALYZE t1;
SELECT * FROM sqlite_stat1 ORDER BY idx;
}
-} {}
+} {t1 {} 0}
do_test analyze-2.3 {
execsql {
CREATE INDEX t1i3 ON t1(a,b);
ANALYZE main;
SELECT * FROM sqlite_stat1 ORDER BY idx;
}
-} {}
+} {t1 {} 0}
# Start adding data to the table. Verify that the analysis
# is done correctly.
execsql COMMIT
execsql ANALYZE
} {}
-do_eqp_test 2.2 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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<?) (~12 rows)}
}
-do_eqp_test 2.8 {
+do_eqp_test analyze2-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<?) (~12 rows)}
}
-do_eqp_test 2.9 {
+do_eqp_test analyze2-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<?) (~12 rows)}
}
-do_eqp_test 2.10 {
+do_eqp_test analyze2-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<?) (~12 rows)}
}
} {t1 t1_y {100 299 499 699 899 ajj cjj ejj gjj ijj}}
-do_eqp_test 3.3 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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<?) (~100 rows)}
}
-do_eqp_test 3.5 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-3.7 {
SELECT * FROM t1 WHERE x<221 AND y>'g'
} {
0 0 0 {SEARCH TABLE t1 USING INDEX t1_x (x<?) (~66 rows)}
}
} {t3 t3b {AbA CIj EIj GIj IIj bIj dIj fIj hIj jIj}}
-do_eqp_test 4.4 {
+do_eqp_test analyze2-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 {
+do_eqp_test analyze2-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)}
GROUP BY tbl,idx
}
} {t4 t4x {afa bej cej dej eej fej gej hej iej jej}}
- do_eqp_test 5.3 {
+ do_eqp_test analyze2-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 {
+ do_eqp_test analyze2-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 {
+ do_eqp_test analyze2-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)}
}
} {}
-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<?) (~30000 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%' }
ANALYZE;
}
set ::authargs
- } {t4 {} main {}}
+ } {t4 {} main {} t2 {} main {}}
do_test auth-1.295 {
execsql {
SELECT count(*) FROM sqlite_stat1;
}
- } 2
+ } 3
proc auth {code args} {
if {$code=="SQLITE_ANALYZE"} {
set ::authargs [concat $::authargs $args]
execsql {
SELECT count(*) FROM sqlite_stat1;
}
- } 2
+ } 3
} ;# ifcapable analyze
db eval {
SELECT count(*)
FROM t4 AS x1
-/* JOIN t4 AS x2 ON x2.a=x1.b
+ JOIN t4 AS x2 ON x2.a=x1.b
JOIN t4 AS x3 ON x3.a=x2.b
JOIN t4 AS x4 ON x4.a=x3.b
JOIN t4 AS x5 ON x5.a=x4.b
JOIN t4 AS x7 ON x7.a=x6.b
JOIN t4 AS x8 ON x8.a=x7.b
JOIN t4 AS x9 ON x9.a=x8.b
- JOIN t4 AS x10 ON x10.a=x9.b;*/
+ JOIN t4 AS x10 ON x10.a=x9.b;
}
-} {4087 FIXME}
+} {4087}
# Ticket [8011086c85c6c404014c947fcf3eb9f42b184a0d] from 2010-07-08
# Make sure automatic indices are not created for the RHS of an IN expression
SELECT b FROM t501
WHERE t501.a IN (SELECT x FROM t502 WHERE y=?);
}
-} {0 0 {TABLE t501 USING PRIMARY KEY} 0 0 {TABLE t502}}
+} {0 0 0 {SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?) (~25 rows)} 0 0 0 {SCAN TABLE t502 (~100000 rows)}}
do_test autoindex1-501 {
db eval {
EXPLAIN QUERY PLAN
SELECT b FROM t501
WHERE t501.a IN (SELECT x FROM t502 WHERE y=t501.b);
}
-} {0 0 {TABLE t501} 0 0 {TABLE t502 WITH AUTOMATIC INDEX}}
+} {0 0 0 {SCAN TABLE t501 (~500000 rows)} 0 0 0 {SEARCH TABLE t502 USING AUTOMATIC COVERING INDEX (y=?) (~7 rows)}}
do_test autoindex1-502 {
db eval {
EXPLAIN QUERY PLAN
WHERE t501.a=123
AND t501.a IN (SELECT x FROM t502 WHERE y=t501.b);
}
-} {0 0 {TABLE t501 USING PRIMARY KEY} 0 0 {TABLE t502}}
-
+} {0 0 0 {SEARCH TABLE t501 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)} 0 0 0 {SCAN TABLE t502 (~100000 rows)}}
finish_test
EXPLAIN QUERY PLAN DELETE FROM artist WHERE 1;
EXPLAIN QUERY PLAN SELECT rowid FROM track WHERE trackartist = ?;
}
-} {0 0 {TABLE artist} 0 0 {TABLE track}}
+} {0 0 0 {SCAN TABLE artist (~1000000 rows)} 0 0 0 {SCAN TABLE track (~100000 rows)}}
do_test e_fkey-25.3 {
execsql {
PRAGMA foreign_keys = ON;
EXPLAIN QUERY PLAN DELETE FROM artist WHERE 1;
}
-} {0 0 {TABLE artist} 0 0 {TABLE track}}
+} {0 0 0 {SCAN TABLE artist (~1000000 rows)} 0 0 0 {SCAN TABLE track (~100000 rows)}}
do_test e_fkey-25.4 {
execsql {
INSERT INTO artist VALUES(5, 'artist 5');
do_test e_fkey-27.3 {
eqp { UPDATE artist SET artistid = ?, artistname = ? }
} [list \
- 0 0 {TABLE artist} \
- 0 0 {TABLE track WITH INDEX trackindex} \
- 0 0 {TABLE track WITH INDEX trackindex}
+ 0 0 0 {SCAN TABLE artist (~1000000 rows)} \
+ 0 0 0 {SEARCH TABLE track USING COVERING INDEX trackindex (trackartist=?) (~10 rows)} \
+ 0 0 0 {SEARCH TABLE track USING COVERING INDEX trackindex (trackartist=?) (~10 rows)}
]
do_test e_fkey-27.4 {
eqp { DELETE FROM artist }
} [list \
- 0 0 {TABLE artist} \
- 0 0 {TABLE track WITH INDEX trackindex}
+ 0 0 0 {SCAN TABLE artist (~1000000 rows)} \
+ 0 0 0 {SEARCH TABLE track USING COVERING INDEX trackindex (trackartist=?) (~10 rows)}
]
INSERT INTO t1 VALUES('2', 'V', 'five');
INSERT INTO t1 VALUES('3', 'VI', 'six');
COMMIT;
+ PRAGMA automatic_index=OFF;
}
} {}
do_test minmax3-1.1.1 {
select a.*, x.*
from a, (select key,sum(period) from b group by key) as x
- where a.key=x.key;
+ where a.key=x.key order by 1 desc;
}
} {01 data01 01 3 +1 data+1 +1 7}
do_test select6-9.1 {
execsql {
SELECT a.x, b.x FROM t1 AS a, (SELECT x FROM t1 LIMIT 2) AS b
+ ORDER BY 1, 2
}
} {1 1 1 2 2 1 2 2 3 1 3 2 4 1 4 2}
do_test select6-9.2 {
}
proc do_execsql_test {testname sql result} {
- uplevel do_test $testname [list "execsql {$sql}"] [list $result]
+ set r {}
+ foreach x $result {lappend r $x}
+ uplevel do_test $testname [list "execsql {$sql}"] [list $r]
}
proc do_catchsql_test {testname sql result} {
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 [string trim $res]]
+ set r {}
+ foreach x $res {lappend r $x}
+ uplevel do_execsql_test $name [list "EXPLAIN QUERY PLAN $sql"] [list $r]
}
execsql {
EXPLAIN QUERY PLAN SELECT * FROM "" WHERE "" LIKE 'abc%';
}
-} {0 0 {TABLE }}
+} {0 0 0 {SCAN TABLE (~500000 rows)}}
do_test tkt-78e04-1.5 {
execsql {
DROP TABLE "";
CREATE INDEX "" ON t2(x);
EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=5;
}
-} {0 0 {TABLE t2 WITH INDEX }}
+} {0 0 0 {SEARCH TABLE t2 USING COVERING INDEX (x=?) (~10 rows)}}
do_test tkt-78e04-2.2 {
execsql {
DROP INDEX "";
EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE x=2;
}
-} {0 0 {TABLE t2}}
+} {0 0 0 {SCAN TABLE t2 (~100000 rows)}}
finish_test
ifcapable explain {
do_test tkt3442-1.2 {
EQP { SELECT node FROM listhash WHERE id='5000' LIMIT 1; }
- } {0 0 {TABLE listhash WITH INDEX ididx}}
+ } {0 0 0 {SEARCH TABLE listhash USING INDEX ididx (id=?) (~1 rows)}}
do_test tkt3442-1.3 {
EQP { SELECT node FROM listhash WHERE id="5000" LIMIT 1; }
- } {0 0 {TABLE listhash WITH INDEX ididx}}
+ } {0 0 0 {SEARCH TABLE listhash USING INDEX ididx (id=?) (~1 rows)}}
}
ifcapable explain {
do_test tkt3442-1.4 {
EQP { SELECT node FROM listhash WHERE id=5000 LIMIT 1; }
- } {0 0 {TABLE listhash WITH INDEX ididx}}
+ } {0 0 0 {SEARCH TABLE listhash USING INDEX ididx (id=?) (~1 rows)}}
}
do_test tkt3442-1.5 {
catchsql {
CREATE TABLE t2(a INTEGER, b TEXT);
INSERT INTO t2 VALUES(2, 'two');
ANALYZE;
- SELECT * FROM sqlite_stat1;
+ SELECT * FROM sqlite_stat1 ORDER BY 1, 2;
}
-} {t1 t1i1 {1 1 1}}
+} {t1 t1i1 {1 1 1} t2 {} 1}
# Modify statistics in order to make the optimizer then that:
#
lsort [execsql_status {
SELECT a FROM t2 WHERE b=2 AND c IS NULL ORDER BY b;
}]
-} {5 9 sort}
+} {5 9 nosort}
do_test tkt3824-3.1 {
db eval {
explain query plan
SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y;
}
-} {0 0 {TABLE t302} 1 1 {TABLE t301 USING PRIMARY KEY}}
+} {0 0 0 {SCAN TABLE t302 (~1 rows)} 0 1 1 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
do_test where3-3.1 {
execsql {
explain query plan
SELECT * FROM t301, t302 WHERE t302.x=5 AND t301.a=t302.y;
}
-} {0 1 {TABLE t302} 1 0 {TABLE t301 USING PRIMARY KEY}}
+} {0 0 1 {SCAN TABLE t302 (~1 rows)} 0 1 0 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
# Verify that when there are multiple tables in a join which must be
# full table scans that the query planner attempts put the table with
EXPLAIN QUERY PLAN
SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*';
}
-} {0 2 {TABLE t402} 1 0 {TABLE t400} 2 1 {TABLE t401}}
+} {0 0 2 {SCAN TABLE t402 (~500000 rows)} 0 1 0 {SCAN TABLE t400 (~1000000 rows)} 0 2 1 {SCAN TABLE t401 (~1000000 rows)}}
do_test where3-4.1 {
execsql {
EXPLAIN QUERY PLAN
SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*';
}
-} {0 1 {TABLE t401} 1 0 {TABLE t400} 2 2 {TABLE t402}}
+} {0 0 1 {SCAN TABLE t401 (~500000 rows)} 0 1 0 {SCAN TABLE t400 (~1000000 rows)} 0 2 2 {SCAN TABLE t402 (~1000000 rows)}}
do_test where3-4.2 {
execsql {
EXPLAIN QUERY PLAN
SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*';
}
-} {0 0 {TABLE t400} 1 1 {TABLE t401} 2 2 {TABLE t402}}
+} {0 0 0 {SCAN TABLE t400 (~500000 rows)} 0 1 1 {SCAN TABLE t401 (~1000000 rows)} 0 2 2 {SCAN TABLE t402 (~1000000 rows)}}
finish_test
ifcapable explain {
- do_test where9-3.1 {
- set r [db eval {
- EXPLAIN QUERY PLAN
- SELECT t2.a FROM t1, t2
- WHERE t1.a=80
- AND ((t1.c=t2.c AND t1.d=t2.d) OR t1.f=t2.f)
- }]
- set a [expr {[lsearch $r {TABLE t2 VIA MULTI-INDEX UNION}]>=0}]
- set b [expr {[lsearch $r {TABLE t2 WITH INDEX t2f}]>=0}]
- set c [expr {([lsearch $r {TABLE t2 WITH INDEX t2c}]>=0)+
- [lsearch $r {TABLE t2 WITH INDEX t2d}]>=0}]
- concat $a $b $c
- } {1 1 1}
- do_test where9-3.2 {
- set r [db eval {
- EXPLAIN QUERY PLAN
- SELECT coalesce(t2.a,9999)
- FROM t1 LEFT JOIN t2 ON (t1.c+1=t2.c AND t1.d=t2.d) OR (t1.f||'x')=t2.f
- WHERE t1.a=80
- }]
- set a [expr {[lsearch $r {TABLE t2 VIA MULTI-INDEX UNION}]>=0}]
- set b [expr {[lsearch $r {TABLE t2 WITH INDEX t2f}]>=0}]
- set c [expr {([lsearch $r {TABLE t2 WITH INDEX t2c}]>=0)+
- [lsearch $r {TABLE t2 WITH INDEX t2d}]>=0}]
- concat $a $b $c
- } {1 1 1}
+ do_execsql_test where9-3.1 {
+ EXPLAIN QUERY PLAN
+ SELECT t2.a FROM t1, t2
+ WHERE t1.a=80 AND ((t1.c=t2.c AND t1.d=t2.d) OR t1.f=t2.f)
+ } {
+ 0 0 0 {SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING INDEX t2d (d=?) (~2 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2f (f=?) (~10 rows)}
+ }
+ do_execsql_test where9-3.2 {
+ EXPLAIN QUERY PLAN
+ SELECT coalesce(t2.a,9999)
+ FROM t1 LEFT JOIN t2 ON (t1.c+1=t2.c AND t1.d=t2.d) OR (t1.f||'x')=t2.f
+ WHERE t1.a=80
+ } {
+ 0 0 0 {SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING INDEX t2d (d=?) (~2 rows)}
+ 0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2f (f=?) (~10 rows)}
+ }
}
# Make sure that INDEXED BY and multi-index OR clauses play well with
# The (c=31031 OR d IS NULL) clause is preferred over b>1000 because
# the former is an equality test which is expected to return fewer rows.
#
- do_test where9-5.1 {
- set r [db eval {
- EXPLAIN QUERY PLAN
- SELECT a FROM t1
- WHERE b>1000
- AND (c=31031 OR d IS NULL)
- }]
- set a [expr {[lsearch $r {TABLE t1 VIA MULTI-INDEX UNION}]>=0}]
- set b [expr {[lsearch $r {TABLE t1 WITH INDEX t1b}]>=0}]
- concat $a $b
- } {1 0}
+ do_execsql_test where9-5.1 {
+ EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>1000 AND (c=31031 OR d IS NULL)
+ } {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c=?) (~10 rows)}
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1d (d=?) (~10 rows)}
+ }
# In contrast, b=1000 is preferred over any OR-clause.
#
- do_test where9-5.2 {
- set r [db eval {
- EXPLAIN QUERY PLAN
- SELECT a FROM t1
- WHERE b=1000
- AND (c=31031 OR d IS NULL)
- }]
- set a [expr {[lsearch $r {TABLE t1 VIA MULTI-INDEX UNION}]>=0}]
- set b [expr {[lsearch $r {TABLE t1 WITH INDEX t1b}]>=0}]
- concat $a $b
- } {0 1}
+ do_execsql_test where9-5.2 {
+ EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b=1000 AND (c=31031 OR d IS NULL)
+ } {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?) (~5 rows)}
+ }
# Likewise, inequalities in an AND are preferred over inequalities in
# an OR.
#
- do_test where9-5.3 {
- set r [db eval {
- EXPLAIN QUERY PLAN
- SELECT a FROM t1
- WHERE b>1000
- AND (c>=31031 OR d IS NULL)
- }]
- set a [expr {[lsearch $r {TABLE t1 VIA MULTI-INDEX UNION}]>=0}]
- set b [expr {[lsearch $r {TABLE t1 WITH INDEX t1b}]>=0}]
- concat $a $b
- } {0 1}
+ do_execsql_test where9-5.3 {
+ EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>1000 AND (c>=31031 OR d IS NULL)
+ } {
+ 0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>?) (~125000 rows)}
+ }
}
############################################################################