]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix test cases so that they work with the new EXPLAIN QUERY PLAN output
authordrh <drh@noemail.net>
Wed, 2 May 2018 18:00:17 +0000 (18:00 +0000)
committerdrh <drh@noemail.net>
Wed, 2 May 2018 18:00:17 +0000 (18:00 +0000)
format.  Only some of the cases have been fixed.  This is an incremental
check-in.

FossilOrigin-Name: 5f0e803e33aa557865d5fc830d9202d628de9a94c9757058ca48f1a560702cd3

43 files changed:
ext/fts5/test/fts5plan.test
manifest
manifest.uuid
src/where.c
test/analyzeA.test
test/analyzeD.test
test/analyzeF.test
test/autoindex3.test
test/bestindex1.test
test/bestindex2.test
test/bestindex3.test
test/bigmmap.test
test/cost.test
test/coveridxscan.test
test/fts3join.test
test/fts3query.test
test/index6.test
test/index7.test
test/indexedby.test
test/indexexpr2.test
test/join2.test
test/join5.test
test/mallocK.test
test/orderby1.test
test/rollback2.test
test/rowvalue.test
test/rowvalue4.test
test/scanstatus.test
test/selectA.test
test/skipscan2.test
test/skipscan6.test
test/tkt-385a5b56b9.test
test/tkt-b75a9ca6b0.test
test/tpch01.test
test/unordered.test
test/where7.test
test/where9.test
test/whereG.test
test/whereI.test
test/whereJ.test
test/with1.test
test/with3.test
test/without_rowid1.test

index a7b70f5b736e89167bb9ffb6dea167de1d55c458..de6ab907618ff198426bc5756bdc6e6bd8885f2d 100644 (file)
@@ -29,38 +29,37 @@ do_execsql_test 1.0 {
 do_eqp_test 1.1 {
   SELECT * FROM t1, f1 WHERE f1 MATCH t1.x
 } {
-  0 0 0 {SCAN TABLE t1} 
-  0 1 1 {SCAN TABLE f1 VIRTUAL TABLE INDEX 65537:}
+  QUERY PLAN
+  |--SCAN TABLE t1
+  `--SCAN TABLE f1 VIRTUAL TABLE INDEX 65537:
 }
 
 do_eqp_test 1.2 {
   SELECT * FROM t1, f1 WHERE f1 > t1.x
 } {
-  0 0 1 {SCAN TABLE f1 VIRTUAL TABLE INDEX 0:}
-  0 1 0 {SCAN TABLE t1} 
+  QUERY PLAN
+  |--SCAN TABLE f1 VIRTUAL TABLE INDEX 0:
+  `--SCAN TABLE t1
 }
 
 do_eqp_test 1.3 {
   SELECT * FROM f1 WHERE f1 MATCH ? ORDER BY ff
 } {
-  0 0 0 {SCAN TABLE f1 VIRTUAL TABLE INDEX 65537:}
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SCAN TABLE f1 VIRTUAL TABLE INDEX 65537:
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 do_eqp_test 1.4 {
   SELECT * FROM f1 ORDER BY rank
 } {
-  0 0 0 {SCAN TABLE f1 VIRTUAL TABLE INDEX 0:}
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SCAN TABLE f1 VIRTUAL TABLE INDEX 0:
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 do_eqp_test 1.5 {
   SELECT * FROM f1 WHERE rank MATCH ?
-} {
-  0 0 0 {SCAN TABLE f1 VIRTUAL TABLE INDEX 2:}
-}
-
-
-
+} {SCAN TABLE f1 VIRTUAL TABLE INDEX 2:
 
 finish_test
index bc6fd620e63f09af4b86d65218d22c4e00a7c2f8..3863052746fbca06efec086afe9e7958aee26665 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\sEQP\soutput\sfor\srecursive\sCTEs\sand\smulti-value\sVALUES\sclauses.
-D 2018-05-02T16:13:48.365
+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.
+D 2018-05-02T18:00:17.259
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
@@ -187,7 +187,7 @@ F ext/fts5/test/fts5near.test 211477940142d733ac04fad97cb24095513ab2507073a99c27
 F ext/fts5/test/fts5onepass.test f9b7d9b2c334900c6542a869760290e2ab5382af8fbd618834bf1fcc3e7b84da
 F ext/fts5/test/fts5optimize.test 36a752d24c818792032e4ff502936fc9cc5ef938721696396fdc79214b2717f1
 F ext/fts5/test/fts5phrase.test 13e5d8e9083077b3d9c74315b3c92ec723cc6eb37c8155e0bfe1bba00559f07b
-F ext/fts5/test/fts5plan.test e30e8378441114ef6977a3dc24ecd203caa670d782124dfc9a6e9af09f7abc4d
+F ext/fts5/test/fts5plan.test b932afb6248a21d2eb1696d2dc40eeb580ea1da79b383adb1a4f7d613fbdd4ec
 F ext/fts5/test/fts5porter.test 8d08010c28527db66bc3feebd2b8767504aaeb9b101a986342fa7833d49d0d15
 F ext/fts5/test/fts5porter2.test 0d251a673f02fa13ca7f011654873b3add20745f7402f108600a23e52d8c7457
 F ext/fts5/test/fts5prefix.test a0fa67b06650f2deaa7bf27745899d94e0fb547ad9ecbd08bfad98c04912c056
@@ -577,7 +577,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c aa9cffc7a2bad6b826a86c8562dd4978398720ed41cb8ee7aa9d054eb8b456a0
 F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
 F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
-F src/where.c aa94ef44ef36763817ca952e68c03db7eee5e2d4f1f0c3a98823a58c074157bd
+F src/where.c 8265aec8b13c19c9971b0012b004a8d18384dad619a07616c0a9f04401326451
 F src/whereInt.h 2610cb87dd95509995b63decc674c60f2757697a206cfe0c085ee53d9c43cfff
 F src/wherecode.c 3368f0797a4b166e0773a4137d270d92ddcbce91618b11d1e9f11f7c39f33068
 F src/whereexpr.c e90b2e76dcabc81edff56633bf281bc01d93b71e0c81482dc06925ce39f5844a
@@ -602,12 +602,12 @@ F test/analyze6.test f1c552ce39cca4ec922a7e4e0e5d0203d6b3281f
 F test/analyze7.test bb1409afc9e8629e414387ef048b8e0e3e0bdc4f
 F test/analyze8.test c05a461d0a6b05991106467d0c47480f2e709c82
 F test/analyze9.test 9fbf0e0101eef4f5dc149769aa14e10b76ee06e7c28598264b32173cd1999a54
-F test/analyzeA.test 3335697f6700c7052295cfd0067fc5b2aacddf9a
+F test/analyzeA.test 22a892d67bd2223126335b99774cce56ba91122cfe82446d2927afc43ad667dc
 F test/analyzeB.test a4c1c3048f6d9e090eb76e83eecb18bcf6d31a70
 F test/analyzeC.test 555a6cc388b9818b6eda6df816f01ce0a75d3a93
-F test/analyzeD.test 42af58de25a6436502e43006e9e59e2d71bcb0cf
+F test/analyzeD.test e50cd0b3e6063216cc0c88a1776e8645dc0bd65a6bb275769cbee33b7fd8d90c
 F test/analyzeE.test 8684e8ac5722fb97c251887ad97e5d496a98af1d
-F test/analyzeF.test f423125b557f11ad71bb29765ef9c34b6dcf4ab7
+F test/analyzeF.test 9e1a0537949eb5483642b1140a5c39e5b4025939024b935398471fa552f4dabb
 F test/analyzer1.test 459fa02c445ddbf0101a3bad47b34290a35f2e49
 F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b
 F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b
@@ -628,7 +628,7 @@ F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e188
 F test/autoinc.test 83aad64411583aac9ff0b629159ab4662029ab4e3f47090fce4efd132b304484
 F test/autoindex1.test 788d0894aa3aee1220036d20696e98733fb7ca02265cb1e801700177120c1aeb
 F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df
-F test/autoindex3.test a3be0d1a53a7d2edff208a5e442312957047e972
+F test/autoindex3.test 2dd997d6590438b53e4f715f9278aa91c9299cf3f81246a0915269c35beb790e
 F test/autoindex4.test 49d3cd791a9baa16fb461d7ea3de80d019a819cf
 F test/autoindex5.test 96f084a5e6024ea07cace5888df3223f3ea86990
 F test/autovacuum.test 0831cd34e14695d297187f7f6519265e3121c5b0a1720e548e86829e796129e9
@@ -644,15 +644,15 @@ F test/backup_malloc.test 0c9abdf74c51e7bedb66d504cd684f28d4bd4027
 F test/badutf.test d5360fc31f643d37a973ab0d8b4fb85799c3169f
 F test/badutf2.test f5bc7f2d280670ecd79b9cf4f0f1760c607fe51f
 F test/bc_common.tcl b5e42d80305be95697e6370e015af571e5333a1c
-F test/bestindex1.test a9b831613b46baae213798cd3a71257833d5d3d2692e0e50c7ff0c3fbaeb0200
-F test/bestindex2.test 4a06b8922ab2fd09434870da8d1cdf525aaf7060
-F test/bestindex3.test 578b6a52dab819e63f28e3640e04b32c85aed320
+F test/bestindex1.test 852170bddbb21daa121fabcc274640ff83d7d8705912e8b5fe7ed2c5a9a9224a
+F test/bestindex2.test 9a0ccd320b6525eec3a706aae6cdab7e1b7b5abca75027e39f39f755e76e5928
+F test/bestindex3.test dfa5bcb1ae2f96463fb4106308908c8ed7348312de3519d981e632a0a2b6cd43
 F test/bestindex4.test 4cb5ff7dbaebadb87d366f51969271778423b455
 F test/bestindex5.test 412b42f8036b28d8b2f3534d89389ad946a4b1a65a12263f51936f7424296f1b
 F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c
 F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59
 F test/bigfile2.test 1b489a3a39ae90c7f027b79110d6b4e1dbc71bfc
-F test/bigmmap.test abe819e6e1ac1db0c3bfe364ff58889d96e7896b2bbc8bdf1afc77cdeb7d7a9b
+F test/bigmmap.test 31dad31573638bd32de866cdefd11843f75685be4ba6aec1a47918f098f1899b
 F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747
 F test/bigsort.test 8299fa9298f4f1e02fc7d2712e8b77d6cd60e5a2
 F test/bind.test 1e136709b306f7ed3192d349c2930d89df6ab621654ad6f1a72381d3fe76f483
@@ -723,9 +723,9 @@ F test/corruptH.test 79801d97ec5c2f9f3c87739aa1ec2eb786f96454
 F test/corruptI.test 075fe1d75aa1d84e2949be56b6264376c41502e4
 F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4
 F test/corruptK.test 91550557849244a9904f4e090052e3f2c1c3f1106840d58b00ffaa3a8c2d3fc0
-F test/cost.test 1eedbfd868f806f3fa08ff072b04cf270dcf61c8
+F test/cost.test dadd9905a9f34631a1821ff3d1b3e571ebad8afcd14ba0dca6d0818d9fd91237
 F test/count.test cb2e0f934c6eb33670044520748d2ecccd46259c
-F test/coveridxscan.test b629e896b14df2f000a99b8d170d80589c46562c
+F test/coveridxscan.test 5ec98719a2e2914e8908dc75f7247d9b54a26df04625f846ac7900d5483f7296
 F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f
 F test/crash2.test 5b14d4eb58b880e231361d3b609b216acda86651
 F test/crash3.test 8f5de9d32ab9ab95475a9efe7f47a940aa889418
@@ -893,7 +893,7 @@ F test/fts3expr5.test f9abfffbf5e53d48a33e12a1e8f8ba2c551c9b49
 F test/fts3fault.test 9fb7d6266a38806de841f7244bac1b0fe3a1477184bbb10b172d19d2ca6ad692
 F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f94341e9da0
 F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
-F test/fts3join.test 69aeb460d0ea17527a2b1b8d24ce18f29c7f207a7261867a2618f639c8020459
+F test/fts3join.test 949b4f5ae3ae9cc2423cb865d711e32476bdb205ab2be923fdf48246e4a44166
 F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
 F test/fts3matchinfo.test ce864e0bd92429df8008f31cf557269ba172482a
 F test/fts3misc.test ba03a83b831555cfd18c6c862b24b70a53ce7497fe55077f7c4b7c9ce83c2eed
@@ -901,7 +901,7 @@ F test/fts3near.test 7e3354d46f155a822b59c0e957fd2a70c1d7e905
 F test/fts3offsets.test b85fd382abdc78ebce721d8117bd552dfb75094c
 F test/fts3prefix.test fa794eaab0bdae466494947b0b153d7844478ab2
 F test/fts3prefix2.test e1f0a822ca661dced7f12ce392e14eaf65609dce
-F test/fts3query.test f33eb71a1fe1084ea585eeb7ee76b390729f5170
+F test/fts3query.test ca5dffabdfe9aef2ebcc89e02ce515898f86f8c30a365283831c53e0e08e5821
 F test/fts3rank.test cd99bc83a3c923c8d52afd90d86979cf05fc41849f892faeac3988055ef37b99
 F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0
 F test/fts3shared.test 57e26a801f21027b7530da77db54286a6fe4997e
@@ -980,13 +980,13 @@ F test/index2.test f835d5e13ca163bd78c4459ca15fd2e4ed487407
 F test/index3.test 81bc47890b8abfb181bc35f8d10b56c069803386
 F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6
 F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7
-F test/index6.test b4fc812290067a578b98bb2667b676db89e202a7
-F test/index7.test 7feababe16f2091b229c22aff2bcc1d4d6b9d2bb
+F test/index6.test d07ea75b8c21f125c6f325522e8df8c05c91e9251ec923a31d0582b2ba4a617d
+F test/index7.test 72b59b8ddc5c13f4962886b4011eb9975014317d17ef36c6297921362fb7dd98
 F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7
 F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721
-F test/indexedby.test faa585e315e868f09bce0eb39c41d6134649b13d2801638294d3ae616edf1609
+F test/indexedby.test 5a4a451412e3723b36214f2f98acc4ecbb7fd67fd11bbe9fa46ffb6e18cfd987
 F test/indexexpr1.test 635261197bcdc19b9b2c59bbfa7227d525c00e9587faddb2d293c44d287ce60e
-F test/indexexpr2.test 13247bac49143196556eb3f65e97ef301bd3e993f4511558b5db322ddc370ea6
+F test/indexexpr2.test 08551aa8956a91582979e17b6d369f321a5cb6ed6d3e952925a3e54e9e7de216
 F test/indexfault.test 31d4ab9a7d2f6e9616933eb079722362a883eb1d
 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
 F test/insert.test 38742b5e9601c8f8d76e9b7555f7270288c2d371
@@ -1009,10 +1009,10 @@ F test/ioerr5.test 2edfa4fb0f896f733071303b42224df8bedd9da4
 F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b
 F test/istrue.test 62372ad3ddcc5d0eb8ff9097dcb0aad8961bf1b9cb45ba634f6e284695126f9a
 F test/join.test 2ad9d7fe10e0cc06bc7803c22e5533be11cdadbc592f5f95d789a873b57a5a66
-F test/join2.test f5ea0fd3b0a441c8e439706339dcd17cec63a896a755c04a30bfd442ecce1190
+F test/join2.test 10f7047e723ebd68b2f47189be8eed20451a6f665d8bf46f1774c640d1062417
 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
-F test/join5.test 000a18e9ccc9fc716e550eb2337729d3aee99031d0ddd9682f6b7d73aa99b924
+F test/join5.test 196e0cbb552dd91815a43b5a26b64d40bdf9ff881c7a8413821dbd5f7154e3f8
 F test/join6.test cfe6503791ceb0cbb509966740286ec423cbf10b
 F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
 F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4
@@ -1065,7 +1065,7 @@ F test/mallocG.test 0ff91b65c50bdaba680fb75d87fe4ad35bb7934f
 F test/mallocH.test 79b65aed612c9b3ed2dcdaa727c85895fd1bfbdb
 F test/mallocI.test 6c23a71df077fa5d387be90e7e669c5b368ca38a
 F test/mallocJ.test b5d1839da331d96223e5f458856f8ffe1366f62e
-F test/mallocK.test 27cb5566a6e5f2d76f9d4aa2eca45524401fd61e
+F test/mallocK.test 1f4b5efbf61715ab79b20b38739ff4b3d110ceb53f54e5db6da1f01c083707ab
 F test/mallocL.test fb311ff80afddf3b1a75e52289081f4754d901dc
 F test/mallocM.test 78bbe9d3da84a5c679123cdb40d7b2010b18fc46e13897e4f253c6ba6fbff134
 F test/malloc_common.tcl aac62499b76be719fac31e7a3e54a7fd53272e7f
@@ -1118,7 +1118,7 @@ F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394
 F test/optfuzz-db01.c a0c256905c8ac79f9a5de2f374a3d9f757bef0dca2a238dc7c10cc8a38031834
 F test/optfuzz-db01.txt 21f6bdeadc701cf11528276e2a55c70bfcb846ba42df327f979bd9e7b6ce7041
 F test/optfuzz.c 50e330304eb1992e15ddd11f3daaad9bcc0d9aaad09cb2bcc77f9515df2e88b1
-F test/orderby1.test 4d22a7c75f6a83fc1f188cc7bb5192285fdf2552
+F test/orderby1.test c4bbefbdbc0b9c6046c88d3c996ab81b41f799c0885b3e656c02f9295c4773ba
 F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
 F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
 F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
@@ -1173,15 +1173,15 @@ F test/releasetest.tcl 5f15ab8056799e9a6e26a310d49236d2e774d6a30d0ec74601e18d4ce
 F test/resetdb.test 7fda92e443233208ec5e1825b176a9df63fb5bf962248e08b76eb4296c630cdf
 F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb
 F test/rollback.test 06680159bc6746d0f26276e339e3ae2f951c64812468308838e0a3362d911eaa
-F test/rollback2.test 8435d6ff0f13f51d2a4181c232e706005fa90fc5
+F test/rollback2.test bc868d57899dc6972e2b4483faae0e03365a0556941474eec487ae21d8d38bb6
 F test/rollbackfault.test 0e646aeab8840c399cfbfa43daab46fd609cf04a
 F test/rowallock.test 3f88ec6819489d0b2341c7a7528ae17c053ab7cc
 F test/rowhash.test 0bc1d31415e4575d10cacf31e1a66b5cc0f8be81
 F test/rowid.test 5b7509f384f4f6fae1af3c8c104c8ca299fea18d
-F test/rowvalue.test 32861d6a933ded868035f2ec79aeb993a2a46eb7a6d282ae13415a4c2e369463
+F test/rowvalue.test ef851a80f7e6de93b51caca9e4b6b7d2dcd540bbcca7d51860e80435b8b4c0de
 F test/rowvalue2.test 060d238b7e5639a7c5630cb5e63e311b44efef2b
 F test/rowvalue3.test 3068f508753af69884b12125995f023da0dbb256
-F test/rowvalue4.test 4b556d7de161a0dd8cff095c336e913986398bea
+F test/rowvalue4.test cbd1cead27a797d11ec93301fd801c89e97eb1809b3d984b7f16a3876e362eac
 F test/rowvalue5.test c81c7d8cf36711ab37675ad7376084ae2a359cb6
 F test/rowvalue6.test d19b54feb604d5601f8614b15e214e0774c01087
 F test/rowvalue7.test 5d06ff19d9e6969e574a2e662a531dd0c67801a8
@@ -1197,7 +1197,7 @@ F test/savepoint5.test 0735db177e0ebbaedc39812c8d065075d563c4fd
 F test/savepoint6.test f41279c5e137139fa5c21485773332c7adb98cd7
 F test/savepoint7.test cde525ea3075283eb950cdcdefe23ead4f700daa
 F test/savepointfault.test f044eac64b59f09746c7020ee261734de82bf9b2
-F test/scanstatus.test 1ba0e2ee25dcd1d55ec770803b19832cffaecbf0b15d376807759ebeed3669b0
+F test/scanstatus.test d14842d0a2757ee059bcffa365746453d60952ba1077980c9a348a9fefbd232a
 F test/schema.test 8f7999be894260f151adf15c2c7540f1c6d6a481
 F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5
 F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38
@@ -1215,7 +1215,7 @@ F test/select6.test 39eac4a5c03650b2b473c532882273283ee8b7a0
 F test/select7.test f659f231489349e8c5734e610803d7654207318f
 F test/select8.test 8c8f5ae43894c891efc5755ed905467d1d67ad5d
 F test/select9.test aebc2bb0c3bc44606125033cbcaac2c8d1f33a95
-F test/selectA.test 101e722370ac6e84978c2958b8931c78b10a1709
+F test/selectA.test b8a590f6493cad5b0bb4dfe1709bf7dcda0b6c40bb4caf32d1e36a89eebc8fc5
 F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
 F test/selectC.test e25243f8ca503e06f252eb0218976d07cfeceac3
 F test/selectD.test b0f02a04ef7737decb24e08be2c39b9664b43394
@@ -1251,10 +1251,10 @@ F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
 F test/shrink.test 1b4330b1fd9e818c04726d45cb28db73087535ce
 F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
 F test/skipscan1.test 8ab5d2c7c5cd3fe7f172d366e6e74e887cb33cb4
-F test/skipscan2.test d1d1450952b7275f0b0a3a981f0230532743951a
+F test/skipscan2.test ef143c6e4a5ba4f19c1d1e3f517811f7942bdf2142736cc568feb34e0b5fb763
 F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5
 F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2
-F test/skipscan6.test 5866039d03a56f5bd0b3d172a012074a1d90a15b
+F test/skipscan6.test 0b4cd1b4ac9f84d91454df513c99a4932fa07e8f27b8049bea605068b3e34ac7
 F test/snapshot.test 85735bd997a4f6d710140c28fd860519a299649f
 F test/snapshot2.test 925e42427e923262db63c9d7155183f889e3e99feaedec4075f659e51608344f
 F test/snapshot3.test 9719443594a04778861bd20d12596c5f880af177d6cd62f111da3198cafc6096
@@ -1337,7 +1337,7 @@ F test/tkt-2d1a5c67d.test be1326f3061caec85085f4c9ee4490561ca037c0
 F test/tkt-2ea2425d34.test 1cf13e6f75d149b3209a0cb32927a82d3d79fb28
 F test/tkt-31338dca7e.test 6fb8807851964da0d24e942f2e19c7c705b9fb58
 F test/tkt-313723c356.test 4b306ad45c736cedf2f5221f6155b92143244b6d
-F test/tkt-385a5b56b9.test c0a06ada41d7f06b1686da0e718553f853771d1e
+F test/tkt-385a5b56b9.test 5204a7cba0e28c99df0acbf95af5e1af4d32965a7a14de6eccebf949607618b1
 F test/tkt-38cb5df375.test f3cc8671f1eb604d4ae9cf886ed4366bec656678
 F test/tkt-3998683a16.test 6d1d04d551ed1704eb3396ca87bb9ccc8c5c1eb7
 F test/tkt-3a77c9714e.test b08bca26de1140bdf004a37716582a43d7bd8be8
@@ -1370,7 +1370,7 @@ F test/tkt-a8a0d2996a.test 76662ff0622c90e7ce7bbcb4d9e1129acddf877d17c3489f2da7f
 F test/tkt-b1d3a2e531.test 8f7576e41ca179289ee1a8fee28386fd8e4b0550
 F test/tkt-b351d95f9.test d14a503c414c5c58fdde3e80f9a3cfef986498c0
 F test/tkt-b72787b1.test a95e8cdad0b98af1853ac7f0afd4ab27b77bf5f3
-F test/tkt-b75a9ca6b0.test 97cc2d5eeaf82799eb42138c0a1ff64370238ce4
+F test/tkt-b75a9ca6b0.test 1bc0381538fd21f96a10dbabc10ffc51b5b2e5f412d34bae571273ca784003d7
 F test/tkt-ba7cbfaedc.test b4c0deccc12aeb55cfdb57935b16b5d67c5a9877
 F test/tkt-bd484a090c.test 60460bf946f79a79712b71f202eda501ca99b898
 F test/tkt-bdc6bbbb38.test fc38bb09bdd440e3513a1f5f98fc60a075182d7d
@@ -1471,7 +1471,7 @@ F test/tkt3992.test f3e7d548ac26f763b47bc0f750da3d03c81071da
 F test/tkt3997.test a335fa41ca3985660a139df7b734a26ef53284bd
 F test/tkt4018.test 18dbc6617f7a4b90e938d1bd6d26ad18daafaf08
 F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
-F test/tpch01.test 04adbf8d8300fa60a222f28d901abd76e7be6dd4
+F test/tpch01.test 7c4eb8cdd79c568f46d344b3e789c9fdb8a766d112871352704861f3fca32a2a
 F test/trace.test a659a9862957f4789e37a92b3bf6d2caf5c86b02cdeefc41e850ae53acf6992a
 F test/trace2.test f5cb67ad3bc09e0c58e8cca78dfd0b5639259983
 F test/trace3.test 1dff966888773ff1bfea01c080caf15417892b3f998408fe920c4791f7337144
@@ -1508,7 +1508,7 @@ F test/unionvtabfault.test 26b6854d5aef9005cd630513025690bff1b7378ae9c97b81e2a3c
 F test/unique.test 93f8b2ef5ea51b9495f8d6493429b1fd0f465264
 F test/unique2.test 3674e9f2a3f1fbbfd4772ac74b7a97090d0f77d2
 F test/unixexcl.test d936ba2b06794018e136418addd59a2354eeae97
-F test/unordered.test ca7adce0419e4ca0c50f039885e76ed2c531eda8
+F test/unordered.test ffeea7747d5ba962a8009a20b7e53d68cbae05b063604c68702c5998eb50c981
 F test/update.test 1148de8d913e9817717990603aadeca07aab9ddbb10a30f167cbfd8d3a3ccb60
 F test/update2.test 5e67667e1c54017d964e626db765cf8bedcf87483c184f4c575bdb8c1dd2313e
 F test/upsert1.test d587db593f131e112a98a05685c418e0eacc28df5905403e4ca04cd74c39a3fc
@@ -1588,19 +1588,19 @@ F test/where3.test 54cdeb02157acc979de41530b804ae7b09552bf1
 F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8
 F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
 F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
-F test/where7.test f520bcec2c3d12dc4615623b06b2aec7c2d67e94
+F test/where7.test 9bfbfdf0ee238f15a6eea29060f4bb22e8b43b724efe67fd8bf6febfbe54429d
 F test/where8.test 461ca40265ed996a6305da99bb024b0e41602bb586acf544c08f95922358e49f
-F test/where9.test 729c3ba9b47e8f9f1aab96bae7dad2a524f1d1a2
+F test/where9.test 74f9dfddb42016d13b6ab0f6c943d7b993da9b2f7303faa2d465e02e340c2b5e
 F test/whereA.test 6c6a420ca7d313242f9b1bd471dc80e4d0f8323700ba9c78df0bb843d4daa3b4
 F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
 F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
 F test/whereD.test 711d4df58d6d4fb9b3f5ce040b818564198be002
 F test/whereE.test b3a055eef928c992b0a33198a7b8dc10eea5ad2f
 F test/whereF.test 3d9412b1199d3e2bed34fcb76b4c48d0bf4df95d27e3f8dd27b6f8b4716d0d89
-F test/whereG.test dde4c52a97385a55be6a7cd46be8373f0cf35501
+F test/whereG.test 0158783235a6dd82fc0e37652b8522b186b9510594ac0a4bff0c4101b4396a52
 F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
-F test/whereI.test eab5b226bbc344ac70d7dc09b963a064860ae6d7
-F test/whereJ.test 55a3221706a7ab706293f17cc8f96da563bf0767
+F test/whereI.test 0f30efab13000309f340cada83f5cf888814de0d056431fb2f0251a91c58becf
+F test/whereJ.test 88287550f6ee604422403b053455b1ad894eeaa5c35d348532dfa1439286cb9a
 F test/whereK.test f8e3cf26a8513ecc7f514f54df9f0572c046c42b
 F test/wherefault.test 1374c3aa198388925246475f84ad4cd5f9528864
 F test/wherelfault.test 9012e4ef5259058b771606616bd007af5d154e64cc25fa9fd4170f6411db44e3
@@ -1611,12 +1611,12 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
 F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
-F test/with1.test ca08e291249a810a2ec9b72ceef5575e07d5925b360fcf6652ae6fe06ac4dced
+F test/with1.test 6b98f6f2adef8909b171d0d1e3b0439e3f4d4b75be94533aaddf7f15fe002e16
 F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab
-F test/with3.test e71604a0e53cba82bc04c703987cb1d6751ec0b6
+F test/with3.test 2829c3de40a9e18d13f35f8f1670f549d26a4778acbd82a3454ad9b0a07de40b
 F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f198205
 F test/withM.test 693b61765f2b387b5e3e24a4536e2e82de15ff64
-F test/without_rowid1.test 1cb47a1a5ba5b2946f18703fabf9fb2a237b0a8180538793ecbaed834d0df765
+F test/without_rowid1.test 533add9100255e4cc430d371b3ecfb79f11f956b86c3a1b9d34413bf8e482d8f
 F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99
 F test/without_rowid3.test 2724c787a51a5dce09d078453a758117b4b728f1
 F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a
@@ -1727,7 +1727,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 82ca44b82fed6814c84440ba8bfaa019488ab956e84ac165180e2fcece6facb2
-R 3f4d92e6f36c13f28acf97e5748fc904
+P f2f525548c65f89f55cbe91da8a21512dedc6f7b68b58b7906d653e800a2963a
+R c2fb03c3c8d3bca714f50d297b15ed28
 U drh
-Z d63cca701f2753aa768f8453fb7efc49
+Z 275fa11767369a8ceab0cb6be2ece9b6
index ef75472325431bf1a0cb61aa70bc4021cde6c976..7d9d7d33188f8eb0f6e0dc26a331ea4cc3c50e97 100644 (file)
@@ -1 +1 @@
-f2f525548c65f89f55cbe91da8a21512dedc6f7b68b58b7906d653e800a2963a
\ No newline at end of file
+5f0e803e33aa557865d5fc830d9202d628de9a94c9757058ca48f1a560702cd3
\ No newline at end of file
index d76d9f81e296c574f628ec49b6e3993c62b711c2..1145a554a5391bbf1b5033649ecdc41c72b03d4b 100644 (file)
@@ -4592,7 +4592,7 @@ WhereInfo *sqlite3WhereBegin(
     if( wctrlFlags & WHERE_WANT_DISTINCT ){
       pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
     }
-    ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW"));
+    /* ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW")); */
   }else{
     /* Assign a bit from the bitmask to every term in the FROM clause.
     **
index a2da10edff570bda6216b569fc897028d28d6670..afcbe84b83b1cefcdfd9b07a81bf3a0d73f5a9b8 100644 (file)
@@ -136,10 +136,10 @@ foreach {tn analyze_cmd} {
 
   do_eqp_test 1.$tn.2.5 {
     SELECT * FROM t1 WHERE b = 31 AND c = 0;
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)}}
+  } {SEARCH TABLE t1 USING INDEX t1b (b=?)}
   do_eqp_test 1.$tn.2.6 {
     SELECT * FROM t1 WHERE b = 125 AND c = 16;
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c=?)}}
+  } {SEARCH TABLE t1 USING INDEX t1c (c=?)}
 
   do_execsql_test 1.$tn.3.1 { 
     SELECT count(*) FROM t1 WHERE b BETWEEN 0 AND 50
@@ -156,31 +156,31 @@ foreach {tn analyze_cmd} {
 
   do_eqp_test 1.$tn.3.5 {
     SELECT * FROM t1 WHERE b BETWEEN 0 AND 50 AND c BETWEEN 0 AND 50
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}}
+  } {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}
 
   do_eqp_test 1.$tn.3.6 {
     SELECT * FROM t1 WHERE b BETWEEN 75 AND 125 AND c BETWEEN 75 AND 125
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}}
+  } {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}
 
   do_eqp_test 1.$tn.3.7 {
     SELECT * FROM t1 WHERE b BETWEEN +0 AND +50 AND c BETWEEN +0 AND +50
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}}
+  } {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}
 
   do_eqp_test 1.$tn.3.8 {
     SELECT * FROM t1
      WHERE b BETWEEN cast('0' AS int) AND cast('50.0' AS real)
        AND c BETWEEN cast('0' AS numeric) AND cast('50.0' AS real)
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}}
+  } {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)}
 
   do_eqp_test 1.$tn.3.9 {
     SELECT * FROM t1 WHERE b BETWEEN +75 AND +125 AND c BETWEEN +75 AND +125
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}}
+  } {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}
 
   do_eqp_test 1.$tn.3.10 {
     SELECT * FROM t1
      WHERE b BETWEEN cast('75' AS int) AND cast('125.0' AS real)
        AND c BETWEEN cast('75' AS numeric) AND cast('125.0' AS real)
-  } {0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}}
+  } {SEARCH TABLE t1 USING INDEX t1c (c>? AND c<?)}
 }
 
 finish_test
index 4588aaeebc48e53fad1a4830c4b4a74d5b00bc5c..9c7ed7586d99b38319ed73a28e94568f712e12fa 100644 (file)
@@ -63,9 +63,7 @@ do_test 1.1 {
 #
 do_eqp_test 1.2 {
   SELECT * FROM t1 WHERE a=3001 AND c=150;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX t1_c (c=?)}
-}
+} {SEARCH TABLE t1 USING INDEX t1_c (c=?)}
 
 do_test 1.3 {
   execsql { DELETE FROM sqlite_stat1 }
@@ -80,9 +78,7 @@ do_test 1.3 {
 #
 do_eqp_test 1.4 {
   SELECT * FROM t1 WHERE a=3001 AND c=150;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX t1_ab (a=?)}
-}
+} {SEARCH TABLE t1 USING INDEX t1_ab (a=?)}
 
 do_test 1.5 {
   execsql { 
@@ -93,9 +89,7 @@ do_test 1.5 {
 
 do_eqp_test 1.6 {
   SELECT * FROM t1 WHERE a=13 AND c=150;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX t1_c (c=?)}
-}
+} {SEARCH TABLE t1 USING INDEX t1_c (c=?)}
 
 do_test 1.7 {
   execsql { DELETE FROM sqlite_stat1 }
@@ -108,8 +102,6 @@ do_test 1.7 {
 # gets this right, even without stat1 data.
 do_eqp_test 1.8 {
   SELECT * FROM t1 WHERE a=13 AND c=150;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX t1_c (c=?)}
-}
+} {SEARCH TABLE t1 USING INDEX t1_c (c=?)}
 
 finish_test
index 76891ddfe3e6b1c93ff9b8c173caa8c474886fc9..143cecdf575e690ccc57900848d17df76c6b2cdf 100644 (file)
@@ -62,7 +62,7 @@ foreach {tn where idx} {
   11 "x = nullif('19', 0) AND y = nullif('4', 0)" {t1y (y=?)}
   12 "x = nullif('4', 0) AND y = nullif('19', 0)" {t1y (y=?)}
 } {
-  set res "0 0 0 {SEARCH TABLE t1 USING INDEX $idx}"
+  set res "SEARCH TABLE t1 USING INDEX $idx"
   do_eqp_test 1.$tn "SELECT * FROM t1 WHERE $where" $res
 }
 
@@ -92,7 +92,7 @@ foreach {tn where idx} {
   3 "x = nondet4() AND y = nondet19()"     {t1y (y=?)}
   4 "x = nondet19() AND y = nondet4()"     {t1y (y=?)}
 } {
-  set res "0 0 0 {SEARCH TABLE t1 USING INDEX $idx}"
+  set res "SEARCH TABLE t1 USING INDEX $idx"
   do_eqp_test 3.$tn "SELECT * FROM t1 WHERE $where" $res
 }
 
index c99a175c6db830702d90ff312ead9e5ff68bc33a..9dcf2491ffc2c4a26e7692a3e4480e43e19ba058 100644 (file)
@@ -84,8 +84,9 @@ do_execsql_test 210 {
 do_eqp_test 220 {
   select count(*) from u, v where u.b = v.b and v.e > 34;
 } {
-  0 0 1 {SEARCH TABLE v USING INDEX ve (e>?)} 
-  0 1 0 {SEARCH TABLE u USING AUTOMATIC COVERING INDEX (b=?)}
+  QUERY PLAN
+  |--SEARCH TABLE v USING INDEX ve (e>?)
+  `--SEARCH TABLE u USING AUTOMATIC COVERING INDEX (b=?)
 }
 
 
index 5857e7f002c5f8f6535d6eea6b18aba9759f8094..1d79c73166854bdab41f91dd4f48b842e2807ad4 100644 (file)
@@ -51,15 +51,11 @@ do_execsql_test 1.0 {
 
 do_eqp_test 1.1 {
   SELECT * FROM x1 WHERE a = 'abc'
-} {
-  0 0 0 {SCAN TABLE x1 VIRTUAL TABLE INDEX 555:eq!}
-}
+} {SCAN TABLE x1 VIRTUAL TABLE INDEX 555:eq!}
 
 do_eqp_test 1.2 {
   SELECT * FROM x1 WHERE a IN ('abc', 'def');
-} {
-  0 0 0 {SCAN TABLE x1 VIRTUAL TABLE INDEX 555:eq!}
-}
+} {SCAN TABLE x1 VIRTUAL TABLE INDEX 555:eq!}
 
 #-------------------------------------------------------------------------
 #
@@ -144,21 +140,24 @@ foreach {tn mode} {
   } {1 4} 
 
   set plan(use) {
-    0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%'}
-    0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+    QUERY PLAN
+    |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%'
+    `--USE TEMP B-TREE FOR ORDER BY
   }
   set plan(omit) {
-    0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%'}
-    0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+    QUERY PLAN
+    |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%'
+    `--USE TEMP B-TREE FOR ORDER BY
   }
   set plan(use2) {
-    0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x}
-    0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+    QUERY PLAN
+    |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x
+    `--USE TEMP B-TREE FOR ORDER BY
   }
 
   do_eqp_test 2.2.$mode.6 { 
     SELECT rowid FROM t1 WHERE a IN ('one', 'four') ORDER BY +rowid
-  } $plan($mode)
+  } [string map {"\n  " "\n"} $plan($mode)]
 }
 
 # 2016-04-09.
index 8bc3fbc3233eb446ddc2227ac7b4d6aea3c8a567..c17665f6f5bf065d09b08db333609383491fa211 100644 (file)
@@ -89,40 +89,40 @@ do_execsql_test 1.0 {
 
 do_eqp_test 1.1 {
   SELECT * FROM t1 WHERE a='abc'
-} {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=?)}
-}
+} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=?)}
+
 do_eqp_test 1.2 {
   SELECT * FROM t1 WHERE a='abc' AND b='def'
-} {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=? AND b=?)}
-}
+} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=? AND b=?)}
+
 do_eqp_test 1.3 {
   SELECT * FROM t1 WHERE a='abc' AND a='def'
-} {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=?)}
-}
+} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:indexed(a=?)}
+
 do_eqp_test 1.4 {
   SELECT * FROM t1,t2 WHERE c=a
 } {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:} 
-  0 1 1 {SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:
+  `--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)
 }
 
 do_eqp_test 1.5 {
   SELECT * FROM t1, t2 CROSS JOIN t3 WHERE t2.c = +t1.b AND t3.e=t2.d
 } {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:} 
-  0 1 1 {SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)} 
-  0 2 2 {SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:
+  |--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)
+  `--SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?)
 }
 
 do_eqp_test 1.6 {
   SELECT * FROM t1, t2, t3 WHERE t2.c = +t1.b AND t3.e = t2.d
 } {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:} 
-  0 1 1 {SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)} 
-  0 2 2 {SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:
+  |--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)
+  `--SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?)
 }
 
 do_execsql_test 1.7.1 {
@@ -132,10 +132,11 @@ do_eqp_test 1.7.2 {
   SELECT * FROM x1 CROSS JOIN t1, t2, t3 
     WHERE t1.a = t2.c AND t1.b = t3.e
 } {
-  0 0 0 {SCAN TABLE x1} 
-  0 1 1 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:}
-  0 2 2 {SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)} 
-  0 3 3 {SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?)}
+  QUERY PLAN
+  |--SCAN TABLE x1
+  |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:
+  |--SCAN TABLE t2 VIRTUAL TABLE INDEX 0:indexed(c=?)
+  `--SCAN TABLE t3 VIRTUAL TABLE INDEX 0:indexed(e=?)
 }
 
 finish_test
index 70c60d66dd8e26a8c1f52bb43c900ca887918a52..3e9fb4f96801c8368b7193e41768e947782f8256 100644 (file)
@@ -79,28 +79,26 @@ do_execsql_test 1.0 {
 
 do_eqp_test 1.1 {
   SELECT * FROM t1 WHERE a LIKE 'abc';
-} {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?}
-}
+} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?}
 
 do_eqp_test 1.2 {
   SELECT * FROM t1 WHERE a = 'abc';
-} {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?}
-}
+} {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?}
 
 do_eqp_test 1.3 {
   SELECT * FROM t1 WHERE a = 'abc' OR b = 'def';
 } {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?}
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?}
+  QUERY PLAN
+  |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?
+  `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
 }
 
 do_eqp_test 1.4 {
   SELECT * FROM t1 WHERE a LIKE 'abc%' OR b = 'def';
 } {
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?}
-  0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?}
+  QUERY PLAN
+  |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?
+  `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
 }
 
 do_execsql_test 1.5 {
@@ -148,8 +146,9 @@ ifcapable !icu {
   do_eqp_test 2.2 {
     SELECT * FROM t2 WHERE x LIKE 'abc%' OR y = 'def'
   } {
-    0 0 0 {SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)}
-    0 0 0 {SEARCH TABLE t2 USING INDEX t2y (y=?)}
+  QUERY PLAN
+  |--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)
+  `--SEARCH TABLE t2 USING INDEX t2y (y=?)
   }
 }
 
index 9284bda37d8da4e31e2e6a9e68acc834e273151d..7da1df247ea8266e226f0c7f2519b47354ffccd3 100644 (file)
@@ -92,13 +92,13 @@ for {set i 0} {$i < 9} {incr i} {
       SELECT * FROM t$t AS o WHERE 
         NOT EXISTS( SELECT * FROM t$t AS i WHERE a=o.a AND +b=o.b AND +c=o.c )
       ORDER BY b, c;
-    " "
-      0 0 0 {SCAN TABLE t$t AS o USING COVERING INDEX sqlite_autoindex_t${t}_1}
-      0 0 0 {EXECUTE CORRELATED SCALAR SUBQUERY 1}
-      1 0 0 {SEARCH TABLE t$t AS i USING INTEGER PRIMARY KEY (rowid=?)}
-    "
+    " [string map {"\n    " "\n"} "
+      QUERY PLAN
+      |--SCAN TABLE t$t AS o USING COVERING INDEX sqlite_autoindex_t${t}_1
+      `--CORRELATED SCALAR SUBQUERY
+         `--SEARCH TABLE t$t AS i USING INTEGER PRIMARY KEY (rowid=?)
+    "]
   }
 }
 
 finish_test
-
index 9c10d821d927c6126c8b0e3faea6e72f8a6411f5..c2591b147a00e9dbed46abc7555373bb8b00f436 100644 (file)
@@ -24,8 +24,9 @@ do_execsql_test 1.1 {
 do_eqp_test 1.2 {
   SELECT e FROM t3, t4 WHERE b=c ORDER BY b, d;
 } {
-  0 0 0 {SCAN TABLE t3 USING COVERING INDEX i3} 
-  0 1 1 {SEARCH TABLE t4 USING INDEX i4 (c=?)}
+  QUERY PLAN
+  |--SCAN TABLE t3 USING COVERING INDEX i3
+  `--SEARCH TABLE t4 USING INDEX i4 (c=?)
 }
 
 
@@ -38,9 +39,7 @@ do_execsql_test 2.1 {
 # if the index is a non-covering index.
 do_eqp_test 2.2 {
   SELECT * FROM t1 ORDER BY a;
-} {
-  0 0 0 {SCAN TABLE t1 USING INDEX i1}
-}
+} {SCAN TABLE t1 USING INDEX i1}
 
 do_execsql_test 3.1 {
   CREATE TABLE t5(a INTEGER PRIMARY KEY,b,c,d,e,f,g);
@@ -57,10 +56,11 @@ do_eqp_test 3.2 {
   WHERE b IS NULL OR c IS NULL OR d IS NULL 
   ORDER BY a;
 } {
-  0 0 0 {SEARCH TABLE t5 USING INDEX t5b (b=?)} 
-  0 0 0 {SEARCH TABLE t5 USING INDEX t5c (c=?)} 
-  0 0 0 {SEARCH TABLE t5 USING INDEX t5d (d=?)} 
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SEARCH TABLE t5 USING INDEX t5b (b=?)
+  |--SEARCH TABLE t5 USING INDEX t5c (c=?)
+  |--SEARCH TABLE t5 USING INDEX t5d (d=?)
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 #-------------------------------------------------------------------------
@@ -79,14 +79,11 @@ do_execsql_test 4.1 {
 }
 do_eqp_test 4.2 {
   SELECT * FROM t1 WHERE likelihood(a=?, 0.014) AND b BETWEEN ? AND ?;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}
-}
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+
 do_eqp_test 4.3 {
   SELECT * FROM t1 WHERE likelihood(a=?, 0.016) AND b BETWEEN ? AND ?;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i2 (b>? AND b<?)}
-}
+} {SEARCH TABLE t1 USING INDEX i2 (b>? AND b<?)}
 
 
 #-------------------------------------------------------------------------
@@ -100,15 +97,17 @@ do_execsql_test 5.1 {
 do_eqp_test 5.2 {
   SELECT * FROM t2 ORDER BY x, y;
 } {
-  0 0 0 {SCAN TABLE t2 USING INDEX t2i1} 
-  0 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY}
+  QUERY PLAN
+  |--SCAN TABLE t2 USING INDEX t2i1
+  `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
 }
 
 do_eqp_test 5.3 {
   SELECT * FROM t2 WHERE x BETWEEN ? AND ? ORDER BY rowid;
 } {
-  0 0 0 {SEARCH TABLE t2 USING INDEX t2i1 (x>? AND x<?)} 
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SEARCH TABLE t2 USING INDEX t2i1 (x>? AND x<?)
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 # where7.test, where8.test:
@@ -122,9 +121,10 @@ do_execsql_test 6.1 {
 do_eqp_test 6.2 {
   SELECT a FROM t3 WHERE (b BETWEEN 2 AND 4) OR c=100 ORDER BY a
 } {
-  0 0 0 {SEARCH TABLE t3 USING INDEX t3i1 (b>? AND b<?)} 
-  0 0 0 {SEARCH TABLE t3 USING INDEX t3i2 (c=?)}
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SEARCH TABLE t3 USING INDEX t3i1 (b>? AND b<?)
+  |--SEARCH TABLE t3 USING INDEX t3i2 (c=?)
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 #-------------------------------------------------------------------------
@@ -145,9 +145,10 @@ do_eqp_test 7.2 {
      WHERE (b>=950 AND b<=1010) OR (b IS NULL AND c NOT NULL)
   ORDER BY a
 } {
-  0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)} 
-  0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?)} 
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)
+  |--SEARCH TABLE t1 USING INDEX t1b (b=?)
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 do_eqp_test 7.3 {
@@ -155,15 +156,11 @@ do_eqp_test 7.3 {
   WHERE (+b IS NULL AND c NOT NULL AND d NOT NULL)
         OR (b NOT NULL AND c IS NULL AND d NOT NULL)
         OR (b NOT NULL AND c NOT NULL AND d IS NULL)
-} {
-  0 0 0 {SCAN TABLE t1}
-}
+} {SCAN TABLE t1}
 
 do_eqp_test 7.4 {
   SELECT rowid FROM t1 WHERE (+b IS NULL AND c NOT NULL) OR c IS NULL
-} {
-  0 0 0 {SCAN TABLE t1}
-}
+} {SCAN TABLE t1}
 
 #-------------------------------------------------------------------------
 #
@@ -194,10 +191,11 @@ do_eqp_test 8.2 {
      AND unlikely(composer.cid=track.cid)
      AND unlikely(album.aid=track.aid);
 } {
-  0 0 2 {SCAN TABLE track} 
-  0 1 0 {SEARCH TABLE album USING INTEGER PRIMARY KEY (rowid=?)}
-  0 2 1 {SEARCH TABLE composer USING INTEGER PRIMARY KEY (rowid=?)}
-  0 0 0 {USE TEMP B-TREE FOR DISTINCT}
+  QUERY PLAN
+  |--SCAN TABLE track
+  |--SEARCH TABLE album USING INTEGER PRIMARY KEY (rowid=?)
+  |--SEARCH TABLE composer USING INTEGER PRIMARY KEY (rowid=?)
+  `--USE TEMP B-TREE FOR DISTINCT
 }
 
 #-------------------------------------------------------------------------
@@ -263,27 +261,19 @@ ifcapable stat4 {
 
   do_eqp_test 10.3 {
     SELECT rowid FROM t6 WHERE a=0 AND c=0
-  } {
-    0 0 0 {SEARCH TABLE t6 USING INDEX t6i2 (c=?)}
-  }
+  } {SEARCH TABLE t6 USING INDEX t6i2 (c=?)}
 
   do_eqp_test 10.4 {
     SELECT rowid FROM t6 WHERE a=0 AND b='xyz' AND c=0
-  } {
-    0 0 0 {SEARCH TABLE t6 USING INDEX t6i2 (c=?)}
-  }
+  } {SEARCH TABLE t6 USING INDEX t6i2 (c=?)}
 
   do_eqp_test 10.5 {
     SELECT rowid FROM t6 WHERE likelihood(a=0, 0.1) AND c=0
-  } {
-    0 0 0 {SEARCH TABLE t6 USING INDEX t6i1 (a=?)}
-  }
+  } {SEARCH TABLE t6 USING INDEX t6i1 (a=?)}
 
   do_eqp_test 10.6 {
     SELECT rowid FROM t6 WHERE likelihood(a=0, 0.1) AND b='xyz' AND c=0
-  } {
-    0 0 0 {SEARCH TABLE t6 USING INDEX t6i1 (a=? AND b=?)}
-  }
+  } {SEARCH TABLE t6 USING INDEX t6i1 (a=? AND b=?)}
 }
 
 finish_test
index a8d1a8ff75ced45f336dd8971cb3e39ccfcbaf78..cc9864439031cefb2d98472644e1d40b592acc23 100644 (file)
@@ -109,16 +109,11 @@ do_execsql_test 5.1.0 "
 
 do_eqp_test 5.1.1 {
   SELECT * FROM t1 ORDER BY c1, c2;
-} {
-  0 0 0 {SCAN TABLE t1 USING COVERING INDEX i1}
-}
+} {SCAN TABLE t1 USING COVERING INDEX i1}
 
 do_eqp_test 5.1.2 {
   SELECT * FROM t2 ORDER BY c1, c2;
-} {
-  0 0 0 {SCAN TABLE t2 USING COVERING INDEX i2}
-}
-
+} {SCAN TABLE t2 USING COVERING INDEX i2}
 
 
 finish_test
index 0eb7f47c697003d274c1510ea5e68a84c4790bc1..f3b9b3639a187335b754f2fbd41f74c4baa2b05d 100644 (file)
@@ -96,9 +96,11 @@ do_eqp_test 4.2 {
   ) AS rr ON t4.rowid=rr.docid 
   WHERE t4.y = ?;
 } {
-  1 0 0 {SCAN TABLE ft4 VIRTUAL TABLE INDEX 3:} 
-  0 0 0 {SCAN TABLE t4}
-  0 1 1 {SEARCH SUBQUERY 1 AS rr USING AUTOMATIC COVERING INDEX (docid=?)}
+  QUERY PLAN
+  |--MATERIALIZE xxxxxx
+  |  `--SCAN TABLE ft4 VIRTUAL TABLE INDEX 3:
+  |--SCAN TABLE t4
+  `--SEARCH SUBQUERY xxxxxx AS rr USING AUTOMATIC COVERING INDEX (docid=?)
 }
 
 finish_test
index 7d5ae991f70da1ae8f9d63834253ef6f42ae49a4..bc25699e12ba7f31d3cd9a763d0a67865a8a3c64 100644 (file)
@@ -118,26 +118,30 @@ do_test fts3query-4.1 {
 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} 
-  0 1 1 {SCAN TABLE ft VIRTUAL TABLE INDEX 1:}
+  QUERY PLAN
+  |--SCAN TABLE t1 USING COVERING INDEX i1
+  `--SCAN TABLE ft VIRTUAL TABLE INDEX 1:
 }
 do_eqp_test fts3query-4.3 {
   SELECT t1.number FROM ft, t1 WHERE t1.number=ft.rowid ORDER BY t1.date
 } {
-  0 0 1 {SCAN TABLE t1 USING COVERING INDEX i1} 
-  0 1 0 {SCAN TABLE ft VIRTUAL TABLE INDEX 1:}
+  QUERY PLAN
+  |--SCAN TABLE t1 USING COVERING INDEX i1
+  `--SCAN TABLE ft VIRTUAL TABLE INDEX 1:
 }
 do_eqp_test fts3query-4.4 {
   SELECT t1.number FROM t1, bt WHERE t1.number=bt.rowid ORDER BY t1.date
 } {
-  0 0 0 {SCAN TABLE t1 USING COVERING INDEX i1} 
-  0 1 1 {SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1 USING COVERING INDEX i1
+  `--SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?)
 }
 do_eqp_test fts3query-4.5 {
   SELECT t1.number FROM bt, t1 WHERE t1.number=bt.rowid ORDER BY t1.date
 } {
-  0 0 1 {SCAN TABLE t1 USING COVERING INDEX i1} 
-  0 1 0 {SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1 USING COVERING INDEX i1
+  `--SEARCH TABLE bt USING INTEGER PRIMARY KEY (rowid=?)
 }
 
 
index f6177b44e9571ad959fbe52c26fd6db13db2451b..4ddce453fd2aca49fc77acdc6e24c40318382d55 100644 (file)
@@ -318,8 +318,9 @@ do_execsql_test index6-8.0 {
 do_eqp_test index6-8.1 {
   SELECT * FROM t8a LEFT JOIN t8b ON (x = 'value' AND y = a)
 } {
-  0 0 0 {SCAN TABLE t8a} 
-  0 1 1 {SEARCH TABLE t8b USING INDEX i8c (y=?)}
+  QUERY PLAN
+  |--SCAN TABLE t8a
+  `--SEARCH TABLE t8b USING INDEX i8c (y=?)
 }
 
 do_execsql_test index6-8.2 {
index 0037a8a44d879c3cd46d4dc45a48aea6b0e53b9b..aa0cf8c1f76a8a2753161b2be42f85d7537593c7 100644 (file)
@@ -321,9 +321,8 @@ do_execsql_test index7-6.3 {
 }
 do_eqp_test index7-6.4 {
   SELECT * FROM v4 WHERE d='xyz' AND c='def'
-} {
-  0 0 0 {SEARCH TABLE t4 USING INDEX i4 (c=?)}
-}
+} {SEARCH TABLE t4 USING INDEX i4 (c=?)}
+
 do_catchsql_test index7-6.5 {
   CREATE INDEX t5a ON t5(a) WHERE a=#1;
 } {1 {near "#1": syntax error}}
index a0f7bea76aa72d31d774dee960309fba2a47038c..836da80e53b8c0fcd60fe62bebc60974ac530e74 100644 (file)
@@ -40,17 +40,18 @@ proc EQP {sql} {
 
 # These tests are to check that "EXPLAIN QUERY PLAN" is working as expected.
 #
-do_execsql_test indexedby-1.2 {
-  EXPLAIN QUERY PLAN select * from t1 WHERE a = 10; 
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-do_execsql_test indexedby-1.3 {
-  EXPLAIN QUERY PLAN select * from t1 ; 
-} {0 0 0 {SCAN TABLE t1}}
-do_execsql_test indexedby-1.4 {
-  EXPLAIN QUERY PLAN select * from t1, t2 WHERE c = 10; 
+do_eqp_test indexedby-1.2 {
+  select * from t1 WHERE a = 10; 
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+do_eqp_test indexedby-1.3 {
+  select * from t1 ; 
+} {SCAN TABLE t1}
+do_eqp_test indexedby-1.4 {
+  select * from t1, t2 WHERE c = 10; 
 } {
-  0 0 1 {SEARCH TABLE t2 USING INDEX i3 (c=?)} 
-  0 1 0 {SCAN TABLE t1}
+  QUERY PLAN
+  |--SEARCH TABLE t2 USING INDEX i3 (c=?)
+  `--SCAN TABLE t1
 }
 
 # Parser tests. Test that an INDEXED BY or NOT INDEX clause can be 
@@ -115,25 +116,23 @@ do_test indexedby-2.7 {
 # the rowid can still be used to look up entries even when "NOT INDEXED"
 # is specified.
 #
-do_execsql_test indexedby-3.1 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a = 'one' AND b = 'two'
+do_eqp_test indexedby-3.1 {
+  SELECT * FROM t1 WHERE a = 'one' AND b = 'two'
 } {/SEARCH TABLE t1 USING INDEX/}
-do_execsql_test indexedby-3.1.1 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1 NOT INDEXED WHERE a = 'one' AND b = 'two'
-} {0 0 0 {SCAN TABLE t1}}
-do_execsql_test indexedby-3.1.2 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1 NOT INDEXED WHERE rowid=1
+do_eqp_test indexedby-3.1.1 {
+  SELECT * FROM t1 NOT INDEXED WHERE a = 'one' AND b = 'two'
+} {SCAN TABLE t1}
+do_eqp_test indexedby-3.1.2 {
+  SELECT * FROM t1 NOT INDEXED WHERE rowid=1
 } {/SEARCH TABLE t1 USING INTEGER PRIMARY KEY .rowid=/}
 
 
-do_execsql_test indexedby-3.2 {
-  EXPLAIN QUERY PLAN 
+do_eqp_test indexedby-3.2 {
   SELECT * FROM t1 INDEXED BY i1 WHERE a = 'one' AND b = 'two'
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-do_execsql_test indexedby-3.3 {
-  EXPLAIN QUERY PLAN 
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+do_eqp_test indexedby-3.3 {
   SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' AND b = 'two'
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i2 (b=?)}}
+} {SEARCH TABLE t1 USING INDEX i2 (b=?)}
 do_test indexedby-3.4 {
   catchsql { SELECT * FROM t1 INDEXED BY i2 WHERE a = 'one' }
 } {1 {no query solution}}
@@ -147,14 +146,12 @@ do_test indexedby-3.7 {
   catchsql { SELECT * FROM t1 INDEXED BY i1 ORDER BY a }
 } {0 {}}
 
-do_execsql_test indexedby-3.8 {
-  EXPLAIN QUERY PLAN 
+do_eqp_test indexedby-3.8 {
   SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 ORDER BY e 
-} {0 0 0 {SCAN TABLE t3 USING INDEX sqlite_autoindex_t3_1}}
-do_execsql_test indexedby-3.9 {
-  EXPLAIN QUERY PLAN 
+} {SCAN TABLE t3 USING INDEX sqlite_autoindex_t3_1}
+do_eqp_test indexedby-3.9 {
   SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE e = 10 
-} {0 0 0 {SEARCH TABLE t3 USING INDEX sqlite_autoindex_t3_1 (e=?)}}
+} {SEARCH TABLE t3 USING INDEX sqlite_autoindex_t3_1 (e=?)}
 do_test indexedby-3.10 {
   catchsql { SELECT * FROM t3 INDEXED BY sqlite_autoindex_t3_1 WHERE f = 10 }
 } {1 {no query solution}}
@@ -164,17 +161,19 @@ do_test indexedby-3.11 {
 
 # Tests for multiple table cases.
 #
-do_execsql_test indexedby-4.1 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1, t2 WHERE a = c 
+do_eqp_test indexedby-4.1 {
+  SELECT * FROM t1, t2 WHERE a = c 
 } {
-  0 0 0 {SCAN TABLE t1} 
-  0 1 1 {SEARCH TABLE t2 USING INDEX i3 (c=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1
+  `--SEARCH TABLE t2 USING INDEX i3 (c=?)
 }
-do_execsql_test indexedby-4.2 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1 INDEXED BY i1, t2 WHERE a = c 
+do_eqp_test indexedby-4.2 {
+  SELECT * FROM t1 INDEXED BY i1, t2 WHERE a = c 
 } {
-  0 0 1 {SCAN TABLE t2} 
-  0 1 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+  QUERY PLAN
+  |--SCAN TABLE t2
+  `--SEARCH TABLE t1 USING INDEX i1 (a=?)
 }
 do_test indexedby-4.3 {
   catchsql {
@@ -194,10 +193,10 @@ do_test indexedby-4.4 {
 do_execsql_test indexedby-5.1 {
   CREATE VIEW v2 AS SELECT * FROM t1 INDEXED BY i1 WHERE a > 5;
   EXPLAIN QUERY PLAN SELECT * FROM v2 
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a>?)}}
+} {/*SEARCH TABLE t1 USING INDEX i1 (a>?)*/}
 do_execsql_test indexedby-5.2 {
   EXPLAIN QUERY PLAN SELECT * FROM v2 WHERE b = 10 
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a>?)}}
+} {/*SEARCH TABLE t1 USING INDEX i1 (a>?)*/}
 do_test indexedby-5.3 {
   execsql { DROP INDEX i1 }
   catchsql { SELECT * FROM v2 }
@@ -216,12 +215,12 @@ do_test indexedby-5.5 {
 
 # Test that "NOT INDEXED" may use the rowid index, but not others.
 # 
-do_execsql_test indexedby-6.1 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b = 10 ORDER BY rowid 
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i2 (b=?)}}
-do_execsql_test indexedby-6.2 {
-  EXPLAIN QUERY PLAN SELECT * FROM t1 NOT INDEXED WHERE b = 10 ORDER BY rowid 
-} {0 0 0 {SCAN TABLE t1}}
+do_eqp_test indexedby-6.1 {
+  SELECT * FROM t1 WHERE b = 10 ORDER BY rowid 
+} {SEARCH TABLE t1 USING INDEX i2 (b=?)}
+do_eqp_test indexedby-6.2 {
+  SELECT * FROM t1 NOT INDEXED WHERE b = 10 ORDER BY rowid 
+} {SCAN TABLE t1}
 
 # EVIDENCE-OF: R-40297-14464 The INDEXED BY phrase forces the SQLite
 # query planner to use a particular named index on a DELETE, SELECT, or
@@ -229,44 +228,42 @@ do_execsql_test indexedby-6.2 {
 #
 # Test that "INDEXED BY" can be used in a DELETE statement.
 # 
-do_execsql_test indexedby-7.1 {
-  EXPLAIN QUERY PLAN DELETE FROM t1 WHERE a = 5 
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-do_execsql_test indexedby-7.2 {
-  EXPLAIN QUERY PLAN DELETE FROM t1 NOT INDEXED WHERE a = 5 
-} {0 0 0 {SCAN TABLE t1}}
-do_execsql_test indexedby-7.3 {
-  EXPLAIN QUERY PLAN DELETE FROM t1 INDEXED BY i1 WHERE a = 5 
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-do_execsql_test indexedby-7.4 {
-  EXPLAIN QUERY PLAN DELETE FROM t1 INDEXED BY i1 WHERE a = 5 AND b = 10
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-do_execsql_test indexedby-7.5 {
-  EXPLAIN QUERY PLAN DELETE FROM t1 INDEXED BY i2 WHERE a = 5 AND b = 10
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i2 (b=?)}}
+do_eqp_test indexedby-7.1 {
+  DELETE FROM t1 WHERE a = 5 
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+do_eqp_test indexedby-7.2 {
+  DELETE FROM t1 NOT INDEXED WHERE a = 5 
+} {SCAN TABLE t1}
+do_eqp_test indexedby-7.3 {
+  DELETE FROM t1 INDEXED BY i1 WHERE a = 5 
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+do_eqp_test indexedby-7.4 {
+  DELETE FROM t1 INDEXED BY i1 WHERE a = 5 AND b = 10
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+do_eqp_test indexedby-7.5 {
+  DELETE FROM t1 INDEXED BY i2 WHERE a = 5 AND b = 10
+} {SEARCH TABLE t1 USING INDEX i2 (b=?)}
 do_test indexedby-7.6 {
   catchsql { DELETE FROM t1 INDEXED BY i2 WHERE a = 5}
 } {1 {no query solution}}
 
 # Test that "INDEXED BY" can be used in an UPDATE statement.
 # 
-do_execsql_test indexedby-8.1 {
-  EXPLAIN QUERY PLAN UPDATE t1 SET rowid=rowid+1 WHERE a = 5 
-} {0 0 0 {SEARCH TABLE t1 USING COVERING INDEX i1 (a=?)}}
-do_execsql_test indexedby-8.2 {
-  EXPLAIN QUERY PLAN UPDATE t1 NOT INDEXED SET rowid=rowid+1 WHERE a = 5 
-} {0 0 0 {SCAN TABLE t1}}
-do_execsql_test indexedby-8.3 {
-  EXPLAIN QUERY PLAN UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 
-} {0 0 0 {SEARCH TABLE t1 USING COVERING INDEX i1 (a=?)}}
-do_execsql_test indexedby-8.4 {
-  EXPLAIN QUERY PLAN 
+do_eqp_test indexedby-8.1 {
+  UPDATE t1 SET rowid=rowid+1 WHERE a = 5 
+} {SEARCH TABLE t1 USING COVERING INDEX i1 (a=?)}
+do_eqp_test indexedby-8.2 {
+  UPDATE t1 NOT INDEXED SET rowid=rowid+1 WHERE a = 5 
+} {SCAN TABLE t1}
+do_eqp_test indexedby-8.3 {
+  UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 
+} {SEARCH TABLE t1 USING COVERING INDEX i1 (a=?)}
+do_eqp_test indexedby-8.4 {
   UPDATE t1 INDEXED BY i1 SET rowid=rowid+1 WHERE a = 5 AND b = 10
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-do_execsql_test indexedby-8.5 {
-  EXPLAIN QUERY PLAN 
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+do_eqp_test indexedby-8.5 {
   UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5 AND b = 10
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i2 (b=?)}}
+} {SEARCH TABLE t1 USING INDEX i2 (b=?)}
 do_test indexedby-8.6 {
   catchsql { UPDATE t1 INDEXED BY i2 SET rowid=rowid+1 WHERE a = 5}
 } {1 {no query solution}}
@@ -341,7 +338,7 @@ do_execsql_test 11.4 {
 } {1 1 3}
 do_eqp_test 11.5 {
   SELECT a,b,rowid FROM x1 INDEXED BY x1i WHERE a=1 AND b=1 AND rowid='3.0';
-} {0 0 0 {SEARCH TABLE x1 USING COVERING INDEX x1i (a=? AND b=? AND rowid=?)}}
+} {SEARCH TABLE x1 USING COVERING INDEX x1i (a=? AND b=? AND rowid=?)}
 
 do_execsql_test 11.6 {
   CREATE TABLE x2(c INTEGER PRIMARY KEY, a, b TEXT);
@@ -362,7 +359,7 @@ do_execsql_test 11.9 {
 } {1 1 3}
 do_eqp_test 11.10 {
   SELECT a,b,c FROM x2 INDEXED BY x2i WHERE a=1 AND b=1 AND c='3.0';
-} {0 0 0 {SEARCH TABLE x2 USING COVERING INDEX x2i (a=? AND b=? AND rowid=?)}}
+} {SEARCH TABLE x2 USING COVERING INDEX x2i (a=? AND b=? AND rowid=?)}
 
 #-------------------------------------------------------------------------
 # Check INDEXED BY works (throws an exception) with partial indexes that 
index 037db0420a1848aea5797c4c611655bfff5bcdab..aed887a848fbfdb772a86cbb359b486eba4e8518 100644 (file)
@@ -91,10 +91,11 @@ ifcapable json1 {
     WHERE json_extract(x, '$.b') IS NOT NULL AND json_extract(x, '$.a') IS NULL 
     GROUP BY json_extract(x, '$.b') COLLATE nocase
     ORDER BY json_extract(x, '$.b') COLLATE nocase;
-  } {
-    0 0 0 {SCAN TABLE t2} 
-    0 0 0 {USE TEMP B-TREE FOR GROUP BY}
-  }
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--SCAN TABLE t2
+    `--USE TEMP B-TREE FOR GROUP BY
+  }]
   
   do_execsql_test 3.3.2 {
     CREATE INDEX i3 ON t3(json_extract(x, '$.a'), json_extract(x, '$.b'));
@@ -105,10 +106,11 @@ ifcapable json1 {
     WHERE json_extract(x, '$.b') IS NOT NULL AND json_extract(x, '$.a') IS NULL 
     GROUP BY json_extract(x, '$.b') COLLATE nocase
     ORDER BY json_extract(x, '$.b') COLLATE nocase;
-  } {
-    0 0 0 {SEARCH TABLE t3 USING INDEX i3 (<expr>=?)} 
-    0 0 0 {USE TEMP B-TREE FOR GROUP BY}
-  }
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--SEARCH TABLE t3 USING INDEX i3 (<expr>=?)
+    `--USE TEMP B-TREE FOR GROUP BY
+  }]
 }
 
 do_execsql_test 3.4.0 {
index b5b9e6be100bd62892178e92ba76239f5c8fad27..5a70573e0e45d4748592513517da464914728bcf 100644 (file)
@@ -112,15 +112,17 @@ do_execsql_test 3.0 {
 do_eqp_test 3.1 {
   SELECT v2 FROM t1 LEFT JOIN t2 USING (k2) LEFT JOIN t3_1 USING (k3);
 } {
-  0 0 0 {SCAN TABLE t1} 
-  0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1
+  `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?)
 }
 
 do_eqp_test 3.2 {
   SELECT v2 FROM t1 LEFT JOIN t2 USING (k2) LEFT JOIN t3_2 USING (k3);
 } {
-  0 0 0 {SCAN TABLE t1} 
-  0 1 1 {SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1
+  `--SEARCH TABLE t2 USING INTEGER PRIMARY KEY (rowid=?)
 }
 
 #-------------------------------------------------------------------------
@@ -158,15 +160,17 @@ do_execsql_test 4.1.4 {
 do_eqp_test 4.1.5 {
   SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2);
 } {
-  0 0 0 {SCAN TABLE c1} 
-  0 1 1 {SEARCH TABLE c2 USING INTEGER PRIMARY KEY (rowid=?)}
-  0 2 2 {SEARCH TABLE c3 USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--SCAN TABLE c1
+  |--SEARCH TABLE c2 USING INTEGER PRIMARY KEY (rowid=?)
+  `--SEARCH TABLE c3 USING INTEGER PRIMARY KEY (rowid=?)
 }
 do_eqp_test 4.1.6 {
   SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1);
 } {
-  0 0 0 {SCAN TABLE c1} 
-  0 1 2 {SEARCH TABLE c3 USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--SCAN TABLE c1
+  `--SEARCH TABLE c3 USING INTEGER PRIMARY KEY (rowid=?)
 }
 
 do_execsql_test 4.2.0 {
@@ -203,15 +207,17 @@ do_execsql_test 4.2.4 {
 do_eqp_test 4.2.5 {
   SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v2);
 } {
-  0 0 0 {SCAN TABLE c1} 
-  0 1 1 {SEARCH TABLE c2 USING INDEX sqlite_autoindex_c2_1 (k=?)}
-  0 2 2 {SEARCH TABLE c3 USING INDEX sqlite_autoindex_c3_1 (k=?)}
+  QUERY PLAN
+  |--SCAN TABLE c1
+  |--SEARCH TABLE c2 USING INDEX sqlite_autoindex_c2_1 (k=?)
+  `--SEARCH TABLE c3 USING INDEX sqlite_autoindex_c3_1 (k=?)
 }
 do_eqp_test 4.2.6 {
   SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1);
 } {
-  0 0 0 {SCAN TABLE c1} 
-  0 1 2 {SEARCH TABLE c3 USING INDEX sqlite_autoindex_c3_1 (k=?)}
+  QUERY PLAN
+  |--SCAN TABLE c1
+  `--SEARCH TABLE c3 USING INDEX sqlite_autoindex_c3_1 (k=?)
 }
 
 # 2017-11-23 (Thanksgiving day)
@@ -245,14 +251,11 @@ do_execsql_test 5.0 {
 }
 do_eqp_test 5.1 {
   SELECT s1.a FROM s1 left join s2 using (a);
-} {
-  0 0 0 {SCAN TABLE s1}
-}
+} {SCAN TABLE s1}
+
 do_eqp_test 5.2 {
   SELECT s1.a FROM s1 left join s3 using (a);
-} {
-  0 0 0 {SCAN TABLE s1}
-}
+} {SCAN TABLE s1}
 
 do_execsql_test 6.0 {
   CREATE TABLE u1(a INTEGER PRIMARY KEY, b, c);
@@ -261,9 +264,7 @@ do_execsql_test 6.0 {
 }
 do_eqp_test 6.1 {
   SELECT u2.* FROM u2 LEFT JOIN u1 ON( u1.a=u2.a AND u1.b=u2.b AND u1.c=u2.c );
-} {
-  0 0 0 {SCAN TABLE u2}
-}
+} {SCAN TABLE u2}
 
 db close
 sqlite3 db :memory:
index 12fe56cb9273463819b5252fd8d7942d1bcfca22..043c626d4140f35bd384fc4a491e37acd4dab26c 100644 (file)
@@ -264,9 +264,10 @@ do_eqp_test 7.2 {
     t2.x = t1.x AND (t2.y=? OR (t2.y=? AND t2.z IS NOT NULL))
   );
 } {
-  0 0 0 {SCAN TABLE t1} 
-  0 1 1 {SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)} 
-  0 1 1 {SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1
+  |--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
+  `--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
 }
 
 do_execsql_test 7.3 {
@@ -285,9 +286,9 @@ do_execsql_test 7.3 {
 do_eqp_test 7.4 {
   SELECT * FROM t3 LEFT JOIN t4 ON (t4.x = t3.x) WHERE (t4.y = ? OR t4.z = ?);
 } {
-  0 0 0 {SCAN TABLE t3} 
-  0 1 1 {SEARCH TABLE t4 USING INDEX t4xz (x=?)}
+  QUERY PLAN
+  |--SCAN TABLE t3
+  `--SEARCH TABLE t4 USING INDEX t4xz (x=?)
 } 
 
 finish_test
-
index 45ee7905c3adf01c4c2fbd29cc7310aada73a21f..139644d834efd6ff713b9dea51af0607eab15bb7 100644 (file)
@@ -121,10 +121,11 @@ do_execsql_test 6.0 {
 ifcapable stat4 {
   do_eqp_test 6.1 {
     SELECT DISTINCT c FROM t3 WHERE b BETWEEN '.xx..' AND '.xxxx';
-  } {
-    0 0 0 {SEARCH TABLE t3 USING INDEX i3 (ANY(a) AND b>? AND b<?)} 
-    0 0 0 {USE TEMP B-TREE FOR DISTINCT}
-  }
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--SEARCH TABLE t3 USING INDEX i3 (ANY(a) AND b>? AND b<?)
+    `--USE TEMP B-TREE FOR DISTINCT
+  }]
 }
 
 do_faultsim_test 6 -faults oom* -body {
index 831936ae9680997a08a8803bd545355a44e8b144..3983ff5db37b417ff0ab6ab7339e64768060fae3 100644 (file)
@@ -512,8 +512,9 @@ do_execsql_test 8.0 {
 do_eqp_test 8.1 {
   SELECT * FROM t1 ORDER BY a, b;
 } {
-  0 0 0 {SCAN TABLE t1 USING INDEX i1} 
-  0 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY}
+  QUERY PLAN
+  |--SCAN TABLE t1 USING INDEX i1
+  `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
 }
 
 do_execsql_test 8.2 {
index 3ba0f3f9fdb8e2b835c85622e4b9f5e6eabde750..70aecc33776bf724e1170ff229035d5b82c94401 100644 (file)
@@ -101,7 +101,7 @@ do_rollback_test 2.2 -setup {
 #
 do_eqp_test 3.1 {
   SELECT i FROM t1 WHERE (i%2)==0 ORDER BY h DESC;
-} {0 0 0 {SCAN TABLE t1 USING INDEX i1}}
+} {SCAN TABLE t1 USING INDEX i1}
 do_rollback_test 3.2 -setup {
   BEGIN;
     DELETE FROM t1 WHERE (i%2)==1;
@@ -131,7 +131,7 @@ do_execsql_test 4.1 { UPDATE t1 SET h = $leader || h; }
 
 do_eqp_test 4.2 {
   SELECT i FROM t1 WHERE (i%2)==0 ORDER BY h ASC;
-} {0 0 0 {SCAN TABLE t1 USING INDEX i1}}
+} {SCAN TABLE t1 USING INDEX i1}
 do_rollback_test 4.3 -setup {
   BEGIN;
     DELETE FROM t1 WHERE (i%2)==1;
index 00d939533148aafa1a1677d227e11220c2da062c..b8ba2e0447baacc9120c2097867b82a24807f198 100644 (file)
@@ -175,19 +175,19 @@ do_execsql_test 7.0 {
 
 foreach {tn sql res eqp} {
   1 "SELECT * FROM xy WHERE (i, j) IS (2, 2)" {2 2 2} 
-    "0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid=?)}"
+    "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid=?)"
 
   2 "SELECT * FROM xy WHERE (k, j) < (2, 3)" {1 1 1 2 2 2}
-    "0 0 0 {SCAN TABLE xy}"
+    "SCAN TABLE xy"
 
   3 "SELECT * FROM xy WHERE (i, j) < (2, 3)" {1 1 1 2 2 2}
-    "0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid<?)}"
+    "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid<?)"
 
   4 "SELECT * FROM xy WHERE (i, j) > (2, 1)" {2 2 2 3 3 3 4 4 4}
-    "0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)}"
+    "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)"
 
   5 "SELECT * FROM xy WHERE (i, j) > ('2', 1)" {2 2 2 3 3 3 4 4 4}
-    "0 0 0 {SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)}"
+    "SEARCH TABLE xy USING INTEGER PRIMARY KEY (rowid>?)"
 
 } {
   do_eqp_test 7.$tn.1 $sql $eqp
index 2e6a28c230911d475d2e48c0549a92b93c1a6bbb..ce025fc92342ab47afe6f3bb6757da856d3b383a 100644 (file)
@@ -184,34 +184,33 @@ ifcapable stat4 {
     ANALYZE;
   }
 
-  do_eqp_test 3.1.1 { SELECT * FROM c1 WHERE a=1 AND c=2 } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c=?)}
-  }
-  do_eqp_test 3.1.2 { SELECT * FROM c1 WHERE a=1 AND b>'d' AND c=2 } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c=?)}
-  }
-  do_eqp_test 3.1.3 { SELECT * FROM c1 WHERE a=1 AND b>'l' AND c=2 } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=? AND b>?)}
-  }
+  do_eqp_test 3.1.1 { SELECT * FROM c1 WHERE a=1 AND c=2 } \
+     {SEARCH TABLE c1 USING INDEX c1cd (c=?)}
+
+  do_eqp_test 3.1.2 { SELECT * FROM c1 WHERE a=1 AND b>'d' AND c=2 } \
+     {SEARCH TABLE c1 USING INDEX c1cd (c=?)}
+
+  do_eqp_test 3.1.3 { SELECT * FROM c1 WHERE a=1 AND b>'l' AND c=2 } \
+     {SEARCH TABLE c1 USING INDEX c1ab (a=? AND b>?)}
+
+  do_eqp_test 3.2.1 { SELECT * FROM c1 WHERE a=1 AND c>1 } \
+     {SEARCH TABLE c1 USING INDEX c1cd (c>?)}
+
+  do_eqp_test 3.2.2 { SELECT * FROM c1 WHERE a=1 AND c>0 } \
+     {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
+
+  do_eqp_test 3.2.3 { SELECT * FROM c1 WHERE a=1 AND c>=1 } \
+     {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
+
+  do_eqp_test 3.2.4 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'c') } \
+     {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
+
+  do_eqp_test 3.2.5 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'o') } \
+     {SEARCH TABLE c1 USING INDEX c1cd ((c,d)>(?,?))}
+
+  do_eqp_test 3.2.6 { SELECT * FROM c1 WHERE a=1 AND (c, +b)>(1, 'c') } \
+     {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
 
-  do_eqp_test 3.2.1 { SELECT * FROM c1 WHERE a=1 AND c>1 } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1cd (c>?)}
-  }
-  do_eqp_test 3.2.2 { SELECT * FROM c1 WHERE a=1 AND c>0 } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
-  }
-  do_eqp_test 3.2.3 { SELECT * FROM c1 WHERE a=1 AND c>=1 } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
-  }
-  do_eqp_test 3.2.4 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'c') } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
-  }
-  do_eqp_test 3.2.5 { SELECT * FROM c1 WHERE a=1 AND (c, d)>(1, 'o') } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1cd ((c,d)>(?,?))}
-  }
-  do_eqp_test 3.2.6 { SELECT * FROM c1 WHERE a=1 AND (c, +b)>(1, 'c') } {
-    0 0 0 {SEARCH TABLE c1 USING INDEX c1ab (a=?)}
-  }
 }
 
 #------------------------------------------------------------------------
@@ -234,11 +233,12 @@ do_eqp_test 5.1 {
     (a, b) IN (SELECT x, y FROM d1) AND
     (c) IN (SELECT y FROM d1)
 } {
-  0 0 0 {SEARCH TABLE d2 USING INDEX d2ab (a=? AND b=?)}
-  0 0 0 {EXECUTE LIST SUBQUERY 1} 
-  1 0 0 {SCAN TABLE d1}
-  0 0 0 {EXECUTE LIST SUBQUERY 2} 
-  2 0 0 {SCAN TABLE d1}
+  QUERY PLAN
+  |--SEARCH TABLE d2 USING INDEX d2ab (a=? AND b=?)
+  |--LIST SUBQUERY
+  |  `--SCAN TABLE d1
+  `--LIST SUBQUERY
+     `--SCAN TABLE d1
 }
 
 do_execsql_test 6.0 {
@@ -249,31 +249,23 @@ do_execsql_test 6.0 {
 
 do_eqp_test 6.1 {
   SELECT * FROM e1 WHERE (a, b) > (?, ?)
-} {
-  0 0 0 {SEARCH TABLE e1 USING INDEX e1ab ((a,b)>(?,?))}
-}
+} {SEARCH TABLE e1 USING INDEX e1ab ((a,b)>(?,?))}
+
 do_eqp_test 6.2 {
   SELECT * FROM e1 WHERE (a, b) < (?, ?)
-} {
-  0 0 0 {SEARCH TABLE e1 USING INDEX e1ab ((a,b)<(?,?))}
-}
+} {SEARCH TABLE e1 USING INDEX e1ab ((a,b)<(?,?))}
+
 do_eqp_test 6.3 {
   SELECT * FROM e1 WHERE c = ? AND (d, e) > (?, ?)
-} {
-  0 0 0 {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)>(?,?))}
-}
+} {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)>(?,?))}
+
 do_eqp_test 6.4 {
   SELECT * FROM e1 WHERE c = ? AND (d, e) < (?, ?)
-} {
-  0 0 0 {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)<(?,?))}
-}
+} {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)<(?,?))}
 
 do_eqp_test 6.5 {
   SELECT * FROM e1 WHERE (d, e) BETWEEN (?, ?) AND (?, ?) AND c = ?
-} {
-  0 0 0 
-  {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)>(?,?) AND (d,e)<(?,?))}
-}
+} {SEARCH TABLE e1 USING INDEX e1cde (c=? AND (d,e)>(?,?) AND (d,e)<(?,?))}
 
 #-------------------------------------------------------------------------
 
index fdd6476ae96fa1a49235ae9bfc7d3aba92b32a21..778a0c911ea5f2e40b44f4319e906fb43f60102c 100644 (file)
@@ -328,7 +328,7 @@ do_scanstatus_test 5.2.2 {
 
 do_eqp_test 5.3.1 {
   SELECT count(*) FROM t2 WHERE y = 'j';
-} {0 0 0 {SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}}
+} {SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}
 do_execsql_test 5.3.2 {
   SELECT count(*) FROM t2 WHERE y = 'j';
 } {19}
@@ -340,8 +340,9 @@ do_scanstatus_test 5.3.3 {
 do_eqp_test 5.4.1 {
   SELECT count(*) FROM t1, t2 WHERE y = c;
 } {
-  0 0 0 {SCAN TABLE t1 USING COVERING INDEX t1bc}
-  0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}
+  QUERY PLAN
+  |--SCAN TABLE t1 USING COVERING INDEX t1bc
+  `--SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)
 }
 do_execsql_test 5.4.2 {
   SELECT count(*) FROM t1, t2 WHERE y = c;
@@ -356,8 +357,9 @@ do_scanstatus_test 5.4.3 {
 do_eqp_test 5.5.1 {
   SELECT count(*) FROM t1, t3 WHERE y = c;
 } {
-  0 0 1 {SCAN TABLE t3} 
-  0 1 0 {SEARCH TABLE t1 USING AUTOMATIC COVERING INDEX (c=?)}
+  QUERY PLAN
+  |--SCAN TABLE t3
+  `--SEARCH TABLE t1 USING AUTOMATIC COVERING INDEX (c=?)
 }
 do_execsql_test 5.5.2 {
   SELECT count(*) FROM t1, t3 WHERE y = c;
index 78d04be15d4ad047347ae57919eac23bf4613088..838e5f432313fa2d05a3e2464a396571bcb02188 100644 (file)
@@ -1336,11 +1336,14 @@ do_eqp_test 4.1.2 {
   SELECT a, b FROM t4 WHERE f()==f()
   ORDER BY 1,2
 } {
-  1 0 0 {SCAN TABLE t5 USING INDEX i2} 
-  1 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY}
-  2 0 0 {SCAN TABLE t4 USING INDEX i1} 
-  2 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY}
-  0 0 0 {COMPOUND SUBQUERIES 1 AND 2 (UNION ALL)}
+  QUERY PLAN
+  `--MERGE (UNION ALL)
+     |--LEFT
+     |  |--SCAN TABLE t5 USING INDEX i2
+     |  `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
+     `--RIGHT
+        |--SCAN TABLE t4 USING INDEX i1
+        `--USE TEMP B-TREE FOR RIGHT PART OF ORDER BY
 }
 
 do_execsql_test 4.1.3 {
index a42ff2d0578de69155c38a3a36c25a8d703d64a9..df526b1dd36d5b2167f8931e7571e513181854cb 100644 (file)
@@ -199,7 +199,7 @@ do_test skipscan2-3.2 {
 } {}
 do_eqp_test skipscan2-3.3eqp {
   SELECT * FROM t3 WHERE b=42;
-} {0 0 0 {SEARCH TABLE t3 USING PRIMARY KEY (ANY(a) AND b=?)}}
+} {SEARCH TABLE t3 USING PRIMARY KEY (ANY(a) AND b=?)}
 
 
 finish_test
index 026c4d7b004736792c35c92f7194c2db92cfeb23..a53be1d9529376c50fb219ce82eba839439c82df 100644 (file)
@@ -179,22 +179,13 @@ do_execsql_test 3.0 {
 #
 do_eqp_test 3.1 {
   SELECT * FROM t3 WHERE a = ? AND c = ?
-} {
-  0 0 0 {SEARCH TABLE t3 USING INDEX t3_a (a=?)}
-}
+} {SEARCH TABLE t3 USING INDEX t3_a (a=?)}
 
 # The same query on table t2. This should use index "t2_a", for the
 # same reason. At one point though, it was mistakenly using a skip-scan.
 #
 do_eqp_test 3.2 {
   SELECT * FROM t2 WHERE a = ? AND c = ?
-} {
-  0 0 0 {SEARCH TABLE t2 USING INDEX t2_a (a=?)}
-}
-
-finish_test
-
-
-
+} {SEARCH TABLE t2 USING INDEX t2_a (a=?)}
 
 finish_test
index 1338435ed68d6f0db50cf5cd0e8e013560bc295a..22a9b38dafeaaba02c70c14a72f73f72c6e05812 100644 (file)
@@ -34,20 +34,17 @@ do_execsql_test 2.0 {
   CREATE UNIQUE INDEX t2y ON t2(y);
 }
 
-do_eqp_test 2.1 { SELECT DISTINCT x FROM t2 } {
-  0 0 0 {SCAN TABLE t2 USING COVERING INDEX t2x}
-}
+do_eqp_test 2.1 { SELECT DISTINCT x FROM t2 } \
+  {SCAN TABLE t2 USING COVERING INDEX t2x}
 
-do_eqp_test 2.2 { SELECT DISTINCT y FROM t2 } {
-  0 0 0 {SCAN TABLE t2 USING COVERING INDEX t2y}
-}
+do_eqp_test 2.2 { SELECT DISTINCT y FROM t2 } \
+  {SCAN TABLE t2 USING COVERING INDEX t2y}
 
-do_eqp_test 2.3 { SELECT DISTINCT x, y FROM t2 WHERE y=10 } {
-  0 0 0 {SEARCH TABLE t2 USING INDEX t2y (y=?)}
-}
+do_eqp_test 2.3 { SELECT DISTINCT x, y FROM t2 WHERE y=10 } \
+  {SEARCH TABLE t2 USING INDEX t2y (y=?)}
+
+do_eqp_test 2.4 { SELECT DISTINCT x, y FROM t2 WHERE x=10 } \
+  {SEARCH TABLE t2 USING INDEX t2x (x=?)}
 
-do_eqp_test 2.4 { SELECT DISTINCT x, y FROM t2 WHERE x=10 } {
-  0 0 0 {SEARCH TABLE t2 USING INDEX t2x (x=?)}
-}
 
 finish_test
index 0c81a534da500031cfe7fca6b0b096ae7cb1bf98..8fceb436c2df95e0c019363e9985fb8eee29c71c 100644 (file)
@@ -32,41 +32,41 @@ do_execsql_test 1.1 {
   CREATE INDEX i1 ON t1(x, y);
 } 
 
-set idxscan {0 0 0 {SCAN TABLE t1 USING COVERING INDEX i1}}
-set tblscan {0 0 0 {SCAN TABLE t1}}
-set grpsort {0 0 0 {USE TEMP B-TREE FOR GROUP BY}}
-set sort    {0 0 0 {USE TEMP B-TREE FOR ORDER BY}}
+set idxscan {SCAN TABLE t1 USING COVERING INDEX i1}
+set tblscan {SCAN TABLE t1}
+set grpsort {USE TEMP B-TREE FOR GROUP BY}
+set sort    {USE TEMP B-TREE FOR ORDER BY}
 
 foreach {tn q res eqp} [subst -nocommands {
   1 "SELECT * FROM t1 GROUP BY x, y ORDER BY x,y"
   {1 3  2 2  3 1} {$idxscan}
 
   2 "SELECT * FROM t1 GROUP BY x, y ORDER BY x"
-  {1 3  2 2  3 1} {$idxscan $sort}
+  {1 3  2 2  3 1} {$idxscan*$sort}
 
   3 "SELECT * FROM t1 GROUP BY y, x ORDER BY y, x"
-  {3 1  2 2  1 3} {$idxscan $sort}
+  {3 1  2 2  1 3} {$idxscan*$sort}
   
   4 "SELECT * FROM t1 GROUP BY x ORDER BY x"
   {1 3  2 2  3 1} {$idxscan}
 
   5 "SELECT * FROM t1 GROUP BY y ORDER BY y"
-  {3 1  2 2  1 3} {$tblscan $grpsort}
+  {3 1  2 2  1 3} {$tblscan*$grpsort}
 
   6 "SELECT * FROM t1 GROUP BY y ORDER BY x"
-  {1 3  2 2  3 1} {$tblscan $grpsort $sort}
+  {1 3  2 2  3 1} {$tblscan*$grpsort*$sort}
 
   7 "SELECT * FROM t1 GROUP BY x, y ORDER BY x, y DESC"
-  {1 3  2 2  3 1} {$idxscan $sort}
+  {1 3  2 2  3 1} {$idxscan*$sort}
 
   8 "SELECT * FROM t1 GROUP BY x, y ORDER BY x DESC, y DESC"
-  {3 1  2 2  1 3} {$idxscan $sort}
+  {3 1  2 2  1 3} {$idxscan*$sort}
 
   9 "SELECT * FROM t1 GROUP BY x, y ORDER BY x ASC, y ASC"
   {1 3  2 2  3 1} {$idxscan}
 
   10 "SELECT * FROM t1 GROUP BY x, y ORDER BY x COLLATE nocase, y"
-  {1 3  2 2  3 1} {$idxscan $sort}
+  {1 3  2 2  3 1} {$idxscan*$sort}
 
 }] {
   do_execsql_test 1.$tn.1 $q $res
index ce48f8ec23d9655be3908bd2f655ec5d5cb2a11d..0e51b82b08d4a3c8ac4a85e3d0f935ef6c025db5 100644 (file)
@@ -165,7 +165,7 @@ do_test tpch01-1.1 {
        order by
                o_year;}]
   set ::eqpres
-} {/0 0 0 {SEARCH TABLE part USING INDEX bootleg_pti .P_TYPE=..} 0 1 2 {SEARCH TABLE lineitem USING INDEX lpki2 .L_PARTKEY=..}.*/}
+} {/*SEARCH TABLE part USING INDEX bootleg_pti *SEARCH TABLE lineitem USING INDEX lpki2*/}
 do_test tpch01-1.1b {
   set ::eqpres
 } {/.* customer .* nation AS n1 .*/}
@@ -187,6 +187,14 @@ group by
     c_custkey,    c_name,    c_acctbal,    c_phone,    n_name, c_address,    c_comment
 order by
     revenue desc;
-} {0 0 1 {SEARCH TABLE orders USING INDEX odi (O_ORDERDATE>? AND O_ORDERDATE<?)} 0 1 0 {SEARCH TABLE customer USING INDEX cpki (C_CUSTKEY=?)} 0 2 3 {SEARCH TABLE nation USING INDEX npki (N_NATIONKEY=?)} 0 3 2 {SEARCH TABLE lineitem USING INDEX lpki (L_ORDERKEY=?)} 0 0 0 {USE TEMP B-TREE FOR GROUP BY} 0 0 0 {USE TEMP B-TREE FOR ORDER BY}}
+} {
+  QUERY PLAN
+  |--SEARCH TABLE orders USING INDEX odi (O_ORDERDATE>? AND O_ORDERDATE<?)
+  |--SEARCH TABLE customer USING INDEX cpki (C_CUSTKEY=?)
+  |--SEARCH TABLE nation USING INDEX npki (N_NATIONKEY=?)
+  |--SEARCH TABLE lineitem USING INDEX lpki (L_ORDERKEY=?)
+  |--USE TEMP B-TREE FOR GROUP BY
+  `--USE TEMP B-TREE FOR ORDER BY
+}
 
 finish_test
index 147e91f0d97318e37d688fe03c7e566dbcf116a3..cdbbabeb3abe64ae8bba56e3f202e965869f3d06 100644 (file)
@@ -40,28 +40,27 @@ foreach idxmode {ordered unordered} {
   sqlite3 db test.db
   foreach {tn sql r(ordered) r(unordered)} {
     1   "SELECT * FROM t1 ORDER BY a"
-        {0 0 0 {SCAN TABLE t1 USING INDEX i1}}
-        {0 0 0 {SCAN TABLE t1} 0 0 0 {USE TEMP B-TREE FOR ORDER BY}}
+        {SCAN TABLE t1 USING INDEX i1}
+        {SCAN TABLE t1*USE TEMP B-TREE FOR ORDER BY}
     2   "SELECT * FROM t1 WHERE a > 100"
-        {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a>?)}}
-        {0 0 0 {SCAN TABLE t1}}
+        {SEARCH TABLE t1 USING INDEX i1 (a>?)}
+        {SCAN TABLE t1}
     3   "SELECT * FROM t1 WHERE a = ? ORDER BY rowid"
-        {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-        {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)} 
-         0 0 0 {USE TEMP B-TREE FOR ORDER BY}}
+        {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+        {SEARCH TABLE t1 USING INDEX i1 (a=?)*USE TEMP B-TREE FOR ORDER BY}
     4   "SELECT max(a) FROM t1"
-        {0 0 0 {SEARCH TABLE t1 USING COVERING INDEX i1}}
-        {0 0 0 {SEARCH TABLE t1}}
+        {SEARCH TABLE t1 USING COVERING INDEX i1}
+        {SEARCH TABLE t1}
     5   "SELECT group_concat(b) FROM t1 GROUP BY a"
-        {0 0 0 {SCAN TABLE t1 USING INDEX i1}}
-        {0 0 0 {SCAN TABLE t1} 0 0 0 {USE TEMP B-TREE FOR GROUP BY}}
+        {SCAN TABLE t1 USING INDEX i1}
+        {SCAN TABLE t1*USE TEMP B-TREE FOR GROUP BY}
 
     6   "SELECT * FROM t1 WHERE a = ?"
-        {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
-        {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
+        {SEARCH TABLE t1 USING INDEX i1 (a=?)}
+        {SEARCH TABLE t1 USING INDEX i1 (a=?)}
     7   "SELECT count(*) FROM t1"
-        {0 0 0 {SCAN TABLE t1 USING COVERING INDEX i1}}
-        {0 0 0 {SCAN TABLE t1}}
+        {SCAN TABLE t1 USING COVERING INDEX i1}
+        {SCAN TABLE t1}
   } {
     do_eqp_test 1.$idxmode.$tn $sql $r($idxmode)
   }
index 00cf5eb278db362599be5ee10fa8969576d38806..983418ae2f5d31b69ce290a29d0c2bf6eaa453aa 100644 (file)
@@ -23341,8 +23341,8 @@ do_execsql_test where7-3.1 {
   CREATE INDEX t302_c3 on t302(c3);
   CREATE INDEX t302_c8_c3 on t302(c8, c3);
   CREATE INDEX t302_c5 on t302(c5);
-  
-  EXPLAIN QUERY PLAN
+}
+do_eqp_test where7-3.2 {
   SELECT t302.c1 
     FROM t302 JOIN t301 ON t302.c8 = +t301.c8
     WHERE t302.c2 = 19571
@@ -23351,10 +23351,11 @@ do_execsql_test where7-3.1 {
            OR t301.c8 = 1407424651264000)
    ORDER BY t302.c5 LIMIT 200;
 } {
-  0 0 1 {SEARCH TABLE t301 USING COVERING INDEX t301_c4 (c4=?)} 
-  0 0 1 {SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)} 
-  0 1 0 {SEARCH TABLE t302 USING INDEX t302_c8_c3 (c8=? AND c3>?)} 
-  0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+  QUERY PLAN
+  |--SEARCH TABLE t301 USING COVERING INDEX t301_c4 (c4=?)
+  |--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)
+  |--SEARCH TABLE t302 USING INDEX t302_c8_c3 (c8=? AND c3>?)
+  `--USE TEMP B-TREE FOR ORDER BY
 }
 
 finish_test
index d073074d439bf447c130b38f9eab29a184b0b50b..c04c17fa95bea372a65bf2cf25a2ed56de7f36e9 100644 (file)
@@ -357,25 +357,25 @@ do_test where9-2.8 {
 
 
 ifcapable explain {
-  do_execsql_test where9-3.1 {
-    EXPLAIN QUERY PLAN
+  do_eqp_test where9-3.1 {
     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=?)} 
-    0 1 1 {SEARCH TABLE t2 USING INDEX t2d (d=?)} 
-    0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)}
-  }
-  do_execsql_test where9-3.2 {
-    EXPLAIN QUERY PLAN
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?)
+    |--SEARCH TABLE t2 USING INDEX t2d (d=?)
+    `--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
+  }]
+  do_eqp_test where9-3.2 {
     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=?)} 
-    0 1 1 {SEARCH TABLE t2 USING INDEX t2d (d=?)} 
-    0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)}
-  }
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?)
+    |--SEARCH TABLE t2 USING INDEX t2d (d=?)
+    `--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
+  }]
 } 
 
 # Make sure that INDEXED BY and multi-index OR clauses play well with
@@ -446,35 +446,30 @@ do_test where9-4.8 {
   }
 } {1 {no query solution}}
 
-ifcapable explain {
-  # 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_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=?)} 
-    0 0 0 {SEARCH TABLE t1 USING INDEX t1d (d=?)}
-  }
-
-  # In contrast, b=1000 is preferred over any OR-clause.
-  #
-  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=?)}
-  }
-
-  # Likewise, inequalities in an AND are preferred over inequalities in
-  # an OR.
-  #
-  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>?)}
-  }
+# 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_eqp_test where9-5.1 {
+  SELECT a FROM t1 WHERE b>1000 AND (c=31031 OR d IS NULL)
+} {
+  QUERY PLAN
+  |--SEARCH TABLE t1 USING INDEX t1c (c=?)
+  `--SEARCH TABLE t1 USING INDEX t1d (d=?)
 }
 
+# In contrast, b=1000 is preferred over any OR-clause.
+#
+do_eqp_test where9-5.2 {
+  SELECT a FROM t1 WHERE b=1000 AND (c=31031 OR d IS NULL)
+} {SEARCH TABLE t1 USING INDEX t1b (b=?)}
+
+# Likewise, inequalities in an AND are preferred over inequalities in
+# an OR.
+#
+do_eqp_test where9-5.3 {
+  SELECT a FROM t1 WHERE b>1000 AND (c>=31031 OR d IS NULL)
+} {SEARCH TABLE t1 USING INDEX t1b (b>?)}
+
 ############################################################################
 # Make sure OR-clauses work correctly on UPDATE and DELETE statements.
 
index 110ed5dbd46ca5af130934a028067a365ad80133..d2e6a4ee96571b01647061941b161df540c663c2 100644 (file)
@@ -66,7 +66,7 @@ do_eqp_test whereG-1.1 {
    WHERE unlikely(cname LIKE '%bach%')
      AND composer.cid=track.cid
      AND album.aid=track.aid;
-} {/.*composer.*track.*album.*/}
+} {composer*track*album}
 do_execsql_test whereG-1.2 {
   SELECT DISTINCT aname
     FROM album, composer, track
@@ -195,13 +195,13 @@ do_execsql_test 5.1 {
 }
 do_eqp_test 5.1.2 {
   SELECT * FROM t1 WHERE a>?
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a>?)}}
+} {SEARCH TABLE t1 USING INDEX i1 (a>?)}
 do_eqp_test 5.1.3 {
   SELECT * FROM t1 WHERE likelihood(a>?, 0.9)
-} {0 0 0 {SCAN TABLE t1}}
+} {SCAN TABLE t1}
 do_eqp_test 5.1.4 {
   SELECT * FROM t1 WHERE likely(a>?)
-} {0 0 0 {SCAN TABLE t1}}
+} {SCAN TABLE t1}
 
 do_test 5.2 {
   for {set i 0} {$i < 100} {incr i} {
@@ -212,23 +212,23 @@ do_test 5.2 {
 } {}
 do_eqp_test 5.2.2 {
   SELECT * FROM t1 WHERE likelihood(b>?, 0.01)
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>?)}}
+} {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>?)}
 do_eqp_test 5.2.3 {
   SELECT * FROM t1 WHERE likelihood(b>?, 0.9)
-} {0 0 0 {SCAN TABLE t1}}
+} {SCAN TABLE t1}
 do_eqp_test 5.2.4 {
   SELECT * FROM t1 WHERE likely(b>?)
-} {0 0 0 {SCAN TABLE t1}}
+} {SCAN TABLE t1}
 
 do_eqp_test 5.3.1 {
   SELECT * FROM t1 WHERE a=?
-} {0 0 0 {SEARCH TABLE t1 USING INDEX i1 (a=?)}}
+} {SEARCH TABLE t1 USING INDEX i1 (a=?)}
 do_eqp_test 5.3.2 {
   SELECT * FROM t1 WHERE likelihood(a=?, 0.9)
-} {0 0 0 {SCAN TABLE t1}}
+} {SCAN TABLE t1}
 do_eqp_test 5.3.3 {
   SELECT * FROM t1 WHERE likely(a=?)
-} {0 0 0 {SCAN TABLE t1}}
+} {SCAN TABLE t1}
 
 # 2015-06-18
 # Ticket [https://www.sqlite.org/see/tktview/472f0742a1868fb58862bc588ed70]
index 29b08549be57f68f72f88f5d92f463d06711db13..73dd9009aa9e105fdf91841c5ebee839e017e026 100644 (file)
@@ -29,8 +29,9 @@ do_execsql_test 1.0 {
 do_eqp_test 1.1 {
   SELECT a FROM t1 WHERE b='b' OR c='x'
 } {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (b=?)} 
-  0 0 0 {SEARCH TABLE t1 USING INDEX i2 (c=?)}
+  QUERY PLAN
+  |--SEARCH TABLE t1 USING INDEX i1 (b=?)
+  `--SEARCH TABLE t1 USING INDEX i2 (c=?)
 }
 
 do_execsql_test 1.2 {
@@ -57,8 +58,9 @@ do_execsql_test 2.0 {
 do_eqp_test 2.1 {
   SELECT a FROM t2 WHERE b='b' OR c='x'
 } {
-  0 0 0 {SEARCH TABLE t2 USING INDEX i3 (b=?)} 
-  0 0 0 {SEARCH TABLE t2 USING INDEX i4 (c=?)}
+  QUERY PLAN
+  |--SEARCH TABLE t2 USING INDEX i3 (b=?)
+  `--SEARCH TABLE t2 USING INDEX i4 (c=?)
 }
 
 do_execsql_test 2.2 {
index 48924d0fcfe30ba2d14b4c8205c933a09898fc47..af6ffafb3ffce8ceac1996d0a469c8ca747d08fc 100644 (file)
@@ -402,9 +402,7 @@ do_eqp_test 3.4 {
     a = 4 AND b BETWEEN 20 AND 80           -- Matches 80 rows
       AND
     c BETWEEN 150 AND 160                   -- Matches 10 rows
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX idx_c (c>? AND c<?)}
-}
+} {SEARCH TABLE t1 USING INDEX idx_c (c>? AND c<?)}
 
 # This one should use index "idx_ab".
 do_eqp_test 3.5 {
@@ -412,9 +410,7 @@ do_eqp_test 3.5 {
     a = 5 AND b BETWEEN 20 AND 80           -- Matches 1 row
       AND
     c BETWEEN 150 AND 160                   -- Matches 10 rows
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX idx_ab (a=? AND b>? AND b<?)}
-}
+} {SEARCH TABLE t1 USING INDEX idx_ab (a=? AND b>? AND b<?)}
 
 ###########################################################################################
 
index 92fbc58fcc13ab1246774997c6fb8c7d8cbec844..f1a06250491b084716efea8697e0cb212021fec4 100644 (file)
@@ -992,16 +992,22 @@ do_execsql_test 18.2 {
 
 # EXPLAIN QUERY PLAN on a self-join of a CTE
 #
-do_execsql_test 19.1 {
+do_execsql_test 19.1a {
   DROP TABLE IF EXISTS t1;
   CREATE TABLE t1(x);
-  EXPLAIN QUERY PLAN
+}
+do_eqp_test 19.1b {
   WITH
     x1(a) AS (values(100))
   INSERT INTO t1(x)
     SELECT * FROM (WITH x2(y) AS (SELECT * FROM x1) SELECT y+a FROM x1, x2);
   SELECT * FROM t1;
-} {0 0 0 {SCAN SUBQUERY 1} 0 1 1 {SCAN SUBQUERY 1}}
+} {
+  QUERY PLAN
+  |--MATERIALIZE xxxxxx
+  |--SCAN SUBQUERY xxxxxx
+  `--SCAN SUBQUERY xxxxxx
+}
 
 # 2017-10-28.
 # See check-in https://sqlite.org/src/info/0926df095faf72c2
index 5540a7fca6de6a561d94e9c36ba44f2cc7ab6e3e..d13544cfa0f568aa25d704b82be71992cc1eebfc 100644 (file)
@@ -79,22 +79,28 @@ ifcapable analyze {
   do_eqp_test 3.1.2 {
     WITH cnt(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM cnt LIMIT 1)
     SELECT * FROM cnt, y1 WHERE i=a
-  } {
-    3 0 0 {SCAN TABLE cnt} 
-    1 0 0 {COMPOUND SUBQUERIES 0 AND 0 (UNION ALL)}
-    0 0 0 {SCAN SUBQUERY 1} 
-    0 1 1 {SEARCH TABLE y1 USING INDEX y1a (a=?)}
-  }
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--MATERIALIZE xxxxxx
+    |  |--SETUP
+    |  `--RECURSIVE STEP
+    |     `--SCAN TABLE cnt
+    |--SCAN SUBQUERY xxxxxx
+    `--SEARCH TABLE y1 USING INDEX y1a (a=?)
+  }]
 
   do_eqp_test 3.1.3 {
     WITH cnt(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM cnt LIMIT 1000000)
     SELECT * FROM cnt, y1 WHERE i=a
-  } {
-    3 0 0 {SCAN TABLE cnt} 
-    1 0 0 {COMPOUND SUBQUERIES 0 AND 0 (UNION ALL)}
-    0 0 1 {SCAN TABLE y1} 
-    0 1 0 {SEARCH SUBQUERY 1 USING AUTOMATIC COVERING INDEX (i=?)}
-  }
+  } [string map {"\n  " \n} {
+    QUERY PLAN
+    |--MATERIALIZE xxxxxx
+    |  |--SETUP
+    |  `--RECURSIVE STEP
+    |     `--SCAN TABLE cnt
+    |--SCAN TABLE y1
+    `--SEARCH SUBQUERY xxxxxx USING AUTOMATIC COVERING INDEX (i=?)
+  }]
 }
 
 do_execsql_test 3.2.1 {
@@ -108,13 +114,17 @@ do_eqp_test 3.2.2 {
      SELECT * FROM c, w2, w1
      WHERE c.id=w2.pk AND c.id=w1.pk;
 } {
-  2 0 0 {EXECUTE SCALAR SUBQUERY 3} 
-  3 0 0 {SCAN TABLE w2} 
-  4 0 0 {SCAN TABLE w1}
-  4 1 1 {SCAN TABLE c} 
-  1 0 0 {COMPOUND SUBQUERIES 0 AND 0 (UNION ALL)} 0 0 0 {SCAN SUBQUERY 1}
-  0 1 1 {SEARCH TABLE w2 USING INTEGER PRIMARY KEY (rowid=?)} 
-  0 2 2 {SEARCH TABLE w1 USING INTEGER PRIMARY KEY (rowid=?)}
+  QUERY PLAN
+  |--MATERIALIZE xxxxxx
+  |  |--SETUP
+  |  |  `--SCALAR SUBQUERY
+  |  |     `--SCAN TABLE w2
+  |  `--RECURSIVE STEP
+  |     |--SCAN TABLE w1
+  |     `--SCAN TABLE c
+  |--SCAN SUBQUERY xxxxxx
+  |--SEARCH TABLE w2 USING INTEGER PRIMARY KEY (rowid=?)
+  `--SEARCH TABLE w1 USING INTEGER PRIMARY KEY (rowid=?)
 }
 
 finish_test
index 644c3da94cadcf981039328fe2f9f8f1ee13c23e..d794420ef22653675355ecf7e1d020478d981ecc 100644 (file)
@@ -238,7 +238,7 @@ do_execsql_test 5.0 {
 
 do_eqp_test 5.1 {
   SELECT * FROM t45 WHERE b=? AND a>?
-} {/*USING INDEX i45 (b=? AND a>?)*/}
+} {USING INDEX i45 (b=? AND a>?)}
 
 do_execsql_test 5.2 {
   SELECT * FROM t45 WHERE b='two' AND a>4
@@ -257,11 +257,11 @@ do_execsql_test 5.4 {
 }
 
 set queries {
-  1    2    "c = 5 AND a = 1"          {/*i46 (c=? AND a=?)*/}
-  2    6    "c = 4 AND a < 3"          {/*i46 (c=? AND a<?)*/}
-  3    4    "c = 2 AND a >= 3"         {/*i46 (c=? AND a>?)*/}
-  4    1    "c = 2 AND a = 1 AND b<10" {/*i46 (c=? AND a=? AND b<?)*/}
-  5    1    "c = 0 AND a = 0 AND b>5"  {/*i46 (c=? AND a=? AND b>?)*/}
+  1    2    "c = 5 AND a = 1"          {i46 (c=? AND a=?)}
+  2    6    "c = 4 AND a < 3"          {i46 (c=? AND a<?)}
+  3    4    "c = 2 AND a >= 3"         {i46 (c=? AND a>?)}
+  4    1    "c = 2 AND a = 1 AND b<10" {i46 (c=? AND a=? AND b<?)}
+  5    1    "c = 0 AND a = 0 AND b>5"  {i46 (c=? AND a=? AND b>?)}
 }
 
 foreach {tn cnt where eqp} $queries {