} {
CREATE INDEX t7_idx_00000062 ON t7(b);
CREATE INDEX t7_idx_00000061 ON t7(a);
- SEARCH TABLE t7 USING INDEX t7_idx_00000061 (a=?)
- SEARCH TABLE t7 USING INDEX t7_idx_00000062 (b=?)
+ MULTI-INDEX OR
+ SEARCH TABLE t7 USING INDEX t7_idx_00000061 (a=?)
+ SEARCH TABLE t7 USING INDEX t7_idx_00000062 (b=?)
}
# rowid terms.
-C In\sORDER\sBY\sLIMIT\squeries,\stry\sto\sevaluate\sthe\sORDER\sBY\sterms\sfirst,\sand\sit\nit\sbecomes\sclear\sthat\sthe\srow\swill\snot\scome\sin\sunder\sthe\sLIMIT,\sthen\sskip\nevaluation\sof\sthe\sother\scolumns.
-D 2018-05-03T23:20:06.057
+C Make\sa\sseparate\slimb\sin\sthe\sEXPLAIN\sQUERY\sPLAN\soutput\sfor\sthe\svarious\slines\nassociated\swith\sthe\sOR-optimization.
+D 2018-05-04T00:39:43.856
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
F ext/async/sqlite3async.h f489b080af7e72aec0e1ee6f1d98ab6cf2e4dcef
F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3
F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4
-F ext/expert/expert1.test 81c8834822181d009c08b18d2afb3b0fce8167a8bbbf23496a0e598d2b21623d
+F ext/expert/expert1.test 87e54effda905d991edfe4bcd28098460a568246129ab7263f71b25420ea727f
F ext/expert/sqlite3expert.c 95fdee74be2912d962951d984f1123e55d3f44bd643da7a48ff6ea9426a47f69
F ext/expert/sqlite3expert.h af6354f8ee5c9e025024e63fec3bd640a802afcc3099a44d804752cf0791d811
F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72
F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
F src/where.c aa94ef44ef36763817ca952e68c03db7eee5e2d4f1f0c3a98823a58c074157bd
F src/whereInt.h 2610cb87dd95509995b63decc674c60f2757697a206cfe0c085ee53d9c43cfff
-F src/wherecode.c 3368f0797a4b166e0773a4137d270d92ddcbce91618b11d1e9f11f7c39f33068
+F src/wherecode.c 300f945eb4552fb82ccf237b34dccb22f47522882faa9adcc04388e6e3f1d4b0
F src/whereexpr.c e90b2e76dcabc81edff56633bf281bc01d93b71e0c81482dc06925ce39f5844a
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
F test/bc_common.tcl b5e42d80305be95697e6370e015af571e5333a1c
F test/bestindex1.test 852170bddbb21daa121fabcc274640ff83d7d8705912e8b5fe7ed2c5a9a9224a
F test/bestindex2.test 9a0ccd320b6525eec3a706aae6cdab7e1b7b5abca75027e39f39f755e76e5928
-F test/bestindex3.test 92a34c82f1ae245ef71f8c999f50a9dccd097a310cb070244c7b5cd0d2e07d73
+F test/bestindex3.test 001788a114ad96d81d5154fe77c7f1e26e84b3a2b5635ca29e4f96f6decc534e
F test/bestindex4.test 4cb5ff7dbaebadb87d366f51969271778423b455
F test/bestindex5.test 412b42f8036b28d8b2f3534d89389ad946a4b1a65a12263f51936f7424296f1b
F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c
F test/corruptI.test 075fe1d75aa1d84e2949be56b6264376c41502e4
F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4
F test/corruptK.test 91550557849244a9904f4e090052e3f2c1c3f1106840d58b00ffaa3a8c2d3fc0
-F test/cost.test dadd9905a9f34631a1821ff3d1b3e571ebad8afcd14ba0dca6d0818d9fd91237
+F test/cost.test b37db8a10d467a69e71a9f3d40bbb266c2f587742b37c6912f6e3f7185a0e216
F test/count.test cb2e0f934c6eb33670044520748d2ecccd46259c
F test/coveridxscan.test 5ec98719a2e2914e8908dc75f7247d9b54a26df04625f846ac7900d5483f7296
F test/crash.test fb9dc4a02dcba30d4aa5c2c226f98b220b2b959f
F test/enc2.test 83437a79ba1545a55fb549309175c683fb334473
F test/enc3.test 6807f7a7740a00361ca8d0ccd66bc60c8dc5f2b6
F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
-F test/eqp.test 2ac18a1d6aa0a0a8f0eea1cc0ba7d63391e2f968a47f59643f889c7c87d238a4
+F test/eqp.test 4fd69d25f21d8679f5fce13e639975879d89abf6acce4bd9cede133b7482aba7
F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9
F test/eval.test a64c9105d6ff163df7cf09d6ac29cdad5922078c
F test/exclusive.test 1206b87e192497d78c7f35552e86a9d05421498da300fb1cce5ca5351ccde3c3
F test/join2.test 10f7047e723ebd68b2f47189be8eed20451a6f665d8bf46f1774c640d1062417
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
-F test/join5.test 196e0cbb552dd91815a43b5a26b64d40bdf9ff881c7a8413821dbd5f7154e3f8
+F test/join5.test 5a2da0c3ea852a7063d3e72fc7d5a04a6de5ef6e6d85092582f69033f7459adc
F test/join6.test cfe6503791ceb0cbb509966740286ec423cbf10b
F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4
F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
-F test/where7.test 9bfbfdf0ee238f15a6eea29060f4bb22e8b43b724efe67fd8bf6febfbe54429d
+F test/where7.test e579da972eb3372edc9de850efc221848c763f9e4feafc8426d84a4453b92b23
F test/where8.test 461ca40265ed996a6305da99bb024b0e41602bb586acf544c08f95922358e49f
-F test/where9.test 74f9dfddb42016d13b6ab0f6c943d7b993da9b2f7303faa2d465e02e340c2b5e
+F test/where9.test ad2ddb339d10d324763c3da60502b8631f15a2397b869192fbd4e82f40e167d3
F test/whereA.test 6c6a420ca7d313242f9b1bd471dc80e4d0f8323700ba9c78df0bb843d4daa3b4
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
F test/whereF.test 3d9412b1199d3e2bed34fcb76b4c48d0bf4df95d27e3f8dd27b6f8b4716d0d89
F test/whereG.test 0158783235a6dd82fc0e37652b8522b186b9510594ac0a4bff0c4101b4396a52
F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
-F test/whereI.test 0f30efab13000309f340cada83f5cf888814de0d056431fb2f0251a91c58becf
+F test/whereI.test b7769ee8dbefd987fb266715fee887f05f9ff180016b06fca7fa402df739193b
F test/whereJ.test 88287550f6ee604422403b053455b1ad894eeaa5c35d348532dfa1439286cb9a
F test/whereK.test f8e3cf26a8513ecc7f514f54df9f0572c046c42b
F test/wherefault.test 1374c3aa198388925246475f84ad4cd5f9528864
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 81ab5e0d106fb9f2de80d17c8167d8542c6721b8d7ec69c43e1571c2dcadeddd ce4ef46058f4aaea6623a41255a2e4b69bb24f16a287391df48f6bacdb4c4989
-R df0ac85de3cdeeeca99ef241c3f826a6
-T +closed ce4ef46058f4aaea6623a41255a2e4b69bb24f16a287391df48f6bacdb4c4989
+P c381f0ea57002a264fd958b28e4921cb9c9e73a10fb592f6bb64e6bc9bd16d39
+R 7ee652618bc90464537faa57c51e2376
U drh
-Z e934c97462a3a7876abf79aae9b0d67e
+Z 3b006aad05b3a8fada8579b5e6d167ef
-c381f0ea57002a264fd958b28e4921cb9c9e73a10fb592f6bb64e6bc9bd16d39
\ No newline at end of file
+75ac7b4e4fd0811ca80c719badacff207e0bbd00ac64dde3b3d4ec676fad472d
\ No newline at end of file
** sub-WHERE clause is to to invoke the main loop body as a subroutine.
*/
wctrlFlags = WHERE_OR_SUBCLAUSE | (pWInfo->wctrlFlags & WHERE_SEEK_TABLE);
+ ExplainQueryPlan((pParse, 1, "MULTI-INDEX OR"));
for(ii=0; ii<pOrWc->nTerm; ii++){
WhereTerm *pOrTerm = &pOrWc->a[ii];
if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){
}
}
}
+ ExplainQueryPlanPop(pParse);
pLevel->u.pCovidx = pCov;
if( pCov ) pLevel->iIdxCur = iCovCur;
if( pAndExpr ){
SELECT * FROM t1 WHERE a = 'abc' OR b = 'def';
} {
QUERY PLAN
- |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a EQ ?
- `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
+ `--MULTI-INDEX OR
+ |--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';
} {
QUERY PLAN
- |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?
- `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
+ `--MULTI-INDEX OR
+ |--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:a LIKE ?
+ `--SCAN TABLE t1 VIRTUAL TABLE INDEX 0:b EQ ?
}
do_execsql_test 1.5 {
SELECT * FROM t2 WHERE x LIKE 'abc%' OR y = 'def'
} [string map {"\n " \n} {
QUERY PLAN
- |--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)
- `--SEARCH TABLE t2 USING INDEX t2y (y=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t2 USING INDEX t2x (x>? AND x<?)
+ `--SEARCH TABLE t2 USING INDEX t2y (y=?)
}]
}
ORDER BY a;
} {
QUERY PLAN
- |--SEARCH TABLE t5 USING INDEX t5b (b=?)
- |--SEARCH TABLE t5 USING INDEX t5c (c=?)
- |--SEARCH TABLE t5 USING INDEX t5d (d=?)
+ |--MULTI-INDEX OR
+ | |--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
}
SELECT a FROM t3 WHERE (b BETWEEN 2 AND 4) OR c=100 ORDER BY a
} {
QUERY PLAN
- |--SEARCH TABLE t3 USING INDEX t3i1 (b>? AND b<?)
- |--SEARCH TABLE t3 USING INDEX t3i2 (c=?)
+ |--MULTI-INDEX OR
+ | |--SEARCH TABLE t3 USING INDEX t3i1 (b>? AND b<?)
+ | `--SEARCH TABLE t3 USING INDEX t3i2 (c=?)
`--USE TEMP B-TREE FOR ORDER BY
}
ORDER BY a
} {
QUERY PLAN
- |--SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)
- |--SEARCH TABLE t1 USING INDEX t1b (b=?)
+ |--MULTI-INDEX OR
+ | |--SEARCH TABLE t1 USING INDEX t1b (b>? AND b<?)
+ | `--SEARCH TABLE t1 USING INDEX t1b (b=?)
`--USE TEMP B-TREE FOR ORDER BY
}
SELECT * FROM t2, t1 WHERE t1.a=1 OR t1.b=2;
} {
QUERY PLAN
- |--SEARCH TABLE t1 USING INDEX i1 (a=?)
- |--SEARCH TABLE t1 USING INDEX i2 (b=?)
+ |--MULTI-INDEX OR
+ | |--SEARCH TABLE t1 USING INDEX i1 (a=?)
+ | `--SEARCH TABLE t1 USING INDEX i2 (b=?)
`--SCAN TABLE t2
}
do_eqp_test 1.3 {
} {
QUERY PLAN
|--SCAN TABLE t2
- |--SEARCH TABLE t1 USING INDEX i1 (a=?)
- `--SEARCH TABLE t1 USING INDEX i2 (b=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t1 USING INDEX i1 (a=?)
+ `--SEARCH TABLE t1 USING INDEX i2 (b=?)
}
do_eqp_test 1.3 {
SELECT a FROM t1 ORDER BY a
} {
QUERY PLAN
|--SCAN TABLE t1
- |--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
- `--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
+ `--SEARCH TABLE t2 USING INDEX t2xy (x=? AND y=?)
}
do_execsql_test 7.3 {
ORDER BY t302.c5 LIMIT 200;
} {
QUERY PLAN
- |--SEARCH TABLE t301 USING COVERING INDEX t301_c4 (c4=?)
- |--SEARCH TABLE t301 USING INTEGER PRIMARY KEY (rowid=?)
+ |--MULTI-INDEX OR
+ | |--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
}
} [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=?)
+ `--MULTI-INDEX OR
+ |--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)
} [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=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t2 USING INDEX t2d (d=?)
+ `--SEARCH TABLE t2 USING COVERING INDEX t2f (f=?)
}]
}
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=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t1 USING INDEX t1c (c=?)
+ `--SEARCH TABLE t1 USING INDEX t1d (d=?)
}
# In contrast, b=1000 is preferred over any OR-clause.
SELECT a FROM t1 WHERE b='b' OR c='x'
} {
QUERY PLAN
- |--SEARCH TABLE t1 USING INDEX i1 (b=?)
- `--SEARCH TABLE t1 USING INDEX i2 (c=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t1 USING INDEX i1 (b=?)
+ `--SEARCH TABLE t1 USING INDEX i2 (c=?)
}
do_execsql_test 1.2 {
SELECT a FROM t2 WHERE b='b' OR c='x'
} {
QUERY PLAN
- |--SEARCH TABLE t2 USING INDEX i3 (b=?)
- `--SEARCH TABLE t2 USING INDEX i4 (c=?)
+ `--MULTI-INDEX OR
+ |--SEARCH TABLE t2 USING INDEX i3 (b=?)
+ `--SEARCH TABLE t2 USING INDEX i4 (c=?)
}
do_execsql_test 2.2 {