mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Show LEFT and RIGHT JOIN processing in the EXPLAIN QUERY PLAN output.
FossilOrigin-Name: d91faeffea5cf0585fb71e5311fdcc6b8be85c7e9c732050b4448e617c970101
This commit is contained in:
@ -342,7 +342,7 @@ do_eqp_execsql_test 7.2 {
|
|||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN xdir
|
|--SCAN xdir
|
||||||
|--SCAN rt VIRTUAL TABLE INDEX 2:B0D1
|
|--SCAN rt VIRTUAL TABLE INDEX 2:B0D1
|
||||||
`--SCAN ydir
|
`--SCAN ydir LEFT-JOIN
|
||||||
} {
|
} {
|
||||||
5 1 2 7 12 14 {}
|
5 1 2 7 12 14 {}
|
||||||
5 2 2 7 8 12 10
|
5 2 2 7 8 12 10
|
||||||
|
30
manifest
30
manifest
@ -1,5 +1,5 @@
|
|||||||
C New\stest\scases.
|
C Show\sLEFT\sand\sRIGHT\sJOIN\sprocessing\sin\sthe\sEXPLAIN\sQUERY\sPLAN\soutput.
|
||||||
D 2022-04-11T13:13:57.688
|
D 2022-04-11T14:26:37.296
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@ -409,7 +409,7 @@ F ext/rtree/rtree8.test 2d99006a1386663978c9e1df167554671e4f711c419175b39f332719
|
|||||||
F ext/rtree/rtree9.test fd3c9384ef8aabbc127b3878764070398f136eebc551cd20484b570f2cc1956a
|
F ext/rtree/rtree9.test fd3c9384ef8aabbc127b3878764070398f136eebc551cd20484b570f2cc1956a
|
||||||
F ext/rtree/rtreeA.test a7fd235d8194115fa2e14d300337931eb2e960fe8a46cdfb66add2206412ea41
|
F ext/rtree/rtreeA.test a7fd235d8194115fa2e14d300337931eb2e960fe8a46cdfb66add2206412ea41
|
||||||
F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9
|
F ext/rtree/rtreeB.test 4cec297f8e5c588654bbf3c6ed0903f10612be8a2878055dd25faf8c71758bc9
|
||||||
F ext/rtree/rtreeC.test c4bfa9a61c6788c03e4a9ce40ab2cfc6100982559effd9842d1b658e1d47aa5f
|
F ext/rtree/rtreeC.test 2978b194d09b13e106bdb0e1c5b408b9d42eb338c1082bf43c87ef43bd626147
|
||||||
F ext/rtree/rtreeD.test fe46aa7f012e137bd58294409b16c0d43976c3bb92c8f710481e577c4a1100dc
|
F ext/rtree/rtreeD.test fe46aa7f012e137bd58294409b16c0d43976c3bb92c8f710481e577c4a1100dc
|
||||||
F ext/rtree/rtreeE.test e65d3fc625da1800b412fc8785817327d43ccfec5f5973912d8c9e471928caa9
|
F ext/rtree/rtreeE.test e65d3fc625da1800b412fc8785817327d43ccfec5f5973912d8c9e471928caa9
|
||||||
F ext/rtree/rtreeF.test 81ffa7ef51c4e4618d497a57328c265bf576990c7070633b623b23cd450ed331
|
F ext/rtree/rtreeF.test 81ffa7ef51c4e4618d497a57328c265bf576990c7070633b623b23cd450ed331
|
||||||
@ -557,7 +557,7 @@ F src/shell.c.in eb7f10d5e2c47bd014d92ec5db1def21fcc1ed56ffaaa4ee715b6c37c370b47
|
|||||||
F src/sqlite.h.in 2a35f62185eb5e7ecc64a2f68442b538ce9be74f80f28a00abc24837edcf1c17
|
F src/sqlite.h.in 2a35f62185eb5e7ecc64a2f68442b538ce9be74f80f28a00abc24837edcf1c17
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h f49e28c25bd941e79794db5415fdf7b202deb3bc072ed6f1ed273d578703684e
|
F src/sqlite3ext.h f49e28c25bd941e79794db5415fdf7b202deb3bc072ed6f1ed273d578703684e
|
||||||
F src/sqliteInt.h fa220cb1b04ae45fa34de634efec4c04ce668ddcb6316c8f3260a8cf1a31310b
|
F src/sqliteInt.h cfdfe65eeb87d3fa8319481fb541586f49e93d5715e9f487ae83362844a9abc7
|
||||||
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
||||||
F src/status.c 4a3da6d77eeb3531cb0dbdf7047772a2a1b99f98c69e90ce009c75fe6328b2c0
|
F src/status.c 4a3da6d77eeb3531cb0dbdf7047772a2a1b99f98c69e90ce009c75fe6328b2c0
|
||||||
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
||||||
@ -639,9 +639,9 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
|||||||
F src/wal.c b9df133a705093da8977da5eb202eaadb844839f1c7297c08d33471f5491843d
|
F src/wal.c b9df133a705093da8977da5eb202eaadb844839f1c7297c08d33471f5491843d
|
||||||
F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
|
F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
|
||||||
F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b
|
F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b
|
||||||
F src/where.c 8d8e54e2e29ac503ac5824cac0d368a9a45b0a2a3f129b0f2d50a1e3a891c62f
|
F src/where.c d5ad5f449c937f78b60a154c4ed9b6ccc6d4874ae14f7375e910f07addd143ab
|
||||||
F src/whereInt.h ecf0d9fe3e35f2546e660c6389e56aedb6fd2434e31a0449b261ff55ebc6df2d
|
F src/whereInt.h ecf0d9fe3e35f2546e660c6389e56aedb6fd2434e31a0449b261ff55ebc6df2d
|
||||||
F src/wherecode.c 808e94b66f1bf052cbb77665ba08625ba93fbb0c343fe0ecafdfdd264bf0c6c9
|
F src/wherecode.c bdf7de22c7ac38ad92e78214231a6054019521bfab943c2bfd5ddfb9e8ad9255
|
||||||
F src/whereexpr.c 174d4ad5be165c610c907abb779ef4a97974d22b84e1ce7898d2d9f6947249e5
|
F src/whereexpr.c 174d4ad5be165c610c907abb779ef4a97974d22b84e1ce7898d2d9f6947249e5
|
||||||
F src/window.c 42a71595263dbd8ef8248218e4fc7d4b5ddccece52146ad48e079342d93f6f8f
|
F src/window.c 42a71595263dbd8ef8248218e4fc7d4b5ddccece52146ad48e079342d93f6f8f
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
@ -704,7 +704,7 @@ F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1
|
|||||||
F test/auth3.test 76d20a7fa136d63bcfcf8bcb65c0b1455ed71078d81f22bcd0550d3eb18594ab
|
F test/auth3.test 76d20a7fa136d63bcfcf8bcb65c0b1455ed71078d81f22bcd0550d3eb18594ab
|
||||||
F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec
|
F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec
|
||||||
F test/autoinc.test 997d6f185f138229dc4251583a1d04816423dddc2fc034871a01aeb1d728cb39
|
F test/autoinc.test 997d6f185f138229dc4251583a1d04816423dddc2fc034871a01aeb1d728cb39
|
||||||
F test/autoindex1.test fe27af92eaf884bd9c38f94be3e8afa04ec494e5eefb189902026181a6175f5e
|
F test/autoindex1.test 523b26034dc5e0c5ff0865055b4593f75863b82f17748dec9ca64bb8b267c502
|
||||||
F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df
|
F test/autoindex2.test 12ef578928102baaa0dc23ad397601a2f4ecb0df
|
||||||
F test/autoindex3.test 2d13958a5617e987624a428d7aed91bf51f322b49b476e3573fadec697ce6da5
|
F test/autoindex3.test 2d13958a5617e987624a428d7aed91bf51f322b49b476e3573fadec697ce6da5
|
||||||
F test/autoindex4.test 75cb1191a552b8201351f5a50d160fcb9387a0fbbfb820c77798bfee7da3f8cf
|
F test/autoindex4.test 75cb1191a552b8201351f5a50d160fcb9387a0fbbfb820c77798bfee7da3f8cf
|
||||||
@ -1008,7 +1008,7 @@ F test/fts3fault.test 798e45af84be7978ca33d5bdc94246eb44724db24174b5d8e9b1ac46c5
|
|||||||
F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f94341e9da0
|
F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f94341e9da0
|
||||||
F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
|
F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
|
||||||
F test/fts3fuzz001.test e3c7b0ce9b04cc02281dcc96812a277f02df03cd7dc082055d87e11eb18aaf56
|
F test/fts3fuzz001.test e3c7b0ce9b04cc02281dcc96812a277f02df03cd7dc082055d87e11eb18aaf56
|
||||||
F test/fts3join.test b285c919559af5b093c51abb2c07ce7ec0156dbc9573f444b78dabd9f3040db2
|
F test/fts3join.test ee25def5e763ea8879c19e74f862d5191410ccc7259338887a3685e97f512662
|
||||||
F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
|
F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
|
||||||
F test/fts3matchinfo.test aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a
|
F test/fts3matchinfo.test aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a
|
||||||
F test/fts3matchinfo2.test 00144e841704b8debfcdf6097969cd9f2a1cf759e2203cda42583648f2e6bf58
|
F test/fts3matchinfo2.test 00144e841704b8debfcdf6097969cd9f2a1cf759e2203cda42583648f2e6bf58
|
||||||
@ -1110,7 +1110,7 @@ F test/index2.test f835d5e13ca163bd78c4459ca15fd2e4ed487407
|
|||||||
F test/index3.test 51685f39345462b84fcf77eb8537af847fdf438cc96b05c45d6aaca4e473ade0
|
F test/index3.test 51685f39345462b84fcf77eb8537af847fdf438cc96b05c45d6aaca4e473ade0
|
||||||
F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6
|
F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6
|
||||||
F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7
|
F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7
|
||||||
F test/index6.test 5a7ab531c692ff3b3d139ef8ea6709fab40f9c6862ed418b4976752a5481da3a
|
F test/index6.test 6e5b6943f6a97a34898e48c4d0d4990caf55c12c00465a43a9c33d2fd9a3a820
|
||||||
F test/index7.test b238344318e0b4e42126717f6554f0e7dfd0b39cecad4b736039b43e1e3b6eb3
|
F test/index7.test b238344318e0b4e42126717f6554f0e7dfd0b39cecad4b736039b43e1e3b6eb3
|
||||||
F test/index8.test caa097735c91dbc23d8a402f5e63a2a03c83840ba3928733ed7f9a03f8a912a3
|
F test/index8.test caa097735c91dbc23d8a402f5e63a2a03c83840ba3928733ed7f9a03f8a912a3
|
||||||
F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721
|
F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721
|
||||||
@ -1141,10 +1141,10 @@ F test/ioerr5.test 2edfa4fb0f896f733071303b42224df8bedd9da4
|
|||||||
F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b
|
F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b
|
||||||
F test/istrue.test e7f285bb70282625c258e866ce6337d4c762922f5a300e1b50f958aef6e7d9c9
|
F test/istrue.test e7f285bb70282625c258e866ce6337d4c762922f5a300e1b50f958aef6e7d9c9
|
||||||
F test/join.test a1832675aa30f2b422ff934b553e30294ca899484710242a2119ebf21f20a66a
|
F test/join.test a1832675aa30f2b422ff934b553e30294ca899484710242a2119ebf21f20a66a
|
||||||
F test/join2.test 9bdc615841b91c97a16d68bad9508aea11fa0c6b34e5689847bcc4dac70e4990
|
F test/join2.test bf5ce6bfcef40dd49cfa51dd338eee62551e1efd85cadc68456c9beb43a06914
|
||||||
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
|
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
|
||||||
F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
|
F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
|
||||||
F test/join5.test 0d63c7e43b3160b9d4b93f196ef83b6efc7751b9edd0d18c53a46fbec7a49cfc
|
F test/join5.test c4df54e2e204d7f1417bfbdd21ca324b4b07415c647595cc47798eacfddc96d3
|
||||||
F test/join6.test f809c025fa253f9e150c0e9afd4cef8813257bceeb6f46e04041228c9403cc2c
|
F test/join6.test f809c025fa253f9e150c0e9afd4cef8813257bceeb6f46e04041228c9403cc2c
|
||||||
F test/join7.test 1046604adf0c14d511b9fdd32d0ae0dbd0b72bf5bdb743f8c2e2308ab2ece16d
|
F test/join7.test 1046604adf0c14d511b9fdd32d0ae0dbd0b72bf5bdb743f8c2e2308ab2ece16d
|
||||||
F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
|
F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
|
||||||
@ -1778,7 +1778,7 @@ F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
|
|||||||
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
|
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
|
||||||
F test/where7.test 1c1bf436bf31b913d4764a2b62ac6e98b9681e5c7ae2b562605592a56b7e946b
|
F test/where7.test 1c1bf436bf31b913d4764a2b62ac6e98b9681e5c7ae2b562605592a56b7e946b
|
||||||
F test/where8.test 461ca40265ed996a6305da99bb024b0e41602bb586acf544c08f95922358e49f
|
F test/where8.test 461ca40265ed996a6305da99bb024b0e41602bb586acf544c08f95922358e49f
|
||||||
F test/where9.test 1ffb75edc50a8faa6e7bd77f8221d783febb00b44b0bdb32fb48cec6e38eca95
|
F test/where9.test 2db942671a002621eff4f713e347bb25243295f79d8990297cd160bebcfde3f7
|
||||||
F test/whereA.test 9d1077b117f1b68d5f739d94f36956c36cf995eb87bb19b77b2e81af020edd20
|
F test/whereA.test 9d1077b117f1b68d5f739d94f36956c36cf995eb87bb19b77b2e81af020edd20
|
||||||
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
|
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
|
||||||
F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
|
F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
|
||||||
@ -1946,8 +1946,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 0f6f61c3664cc87209c2a6f9b6df3a750d1510723fcde209c33db8feaf48bcf3
|
P d5f6791b86f946b348f5ddc9cedc0df4a86b17854a97554140799caf74c602f3
|
||||||
R f9db99ab6a64191d51c5383e6585d61d
|
R e0e6850d0795cb014db7acec54c6d9c7
|
||||||
U drh
|
U drh
|
||||||
Z 5631bbf7326a120ea1b6b188ec3bde18
|
Z 41018e27e5349147bcae79649d9ca497
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
d5f6791b86f946b348f5ddc9cedc0df4a86b17854a97554140799caf74c602f3
|
d91faeffea5cf0585fb71e5311fdcc6b8be85c7e9c732050b4448e617c970101
|
@ -3163,7 +3163,7 @@ struct SrcList {
|
|||||||
#define WHERE_SORTBYGROUP 0x0200 /* Support sqlite3WhereIsSorted() */
|
#define WHERE_SORTBYGROUP 0x0200 /* Support sqlite3WhereIsSorted() */
|
||||||
#define WHERE_AGG_DISTINCT 0x0400 /* Query is "SELECT agg(DISTINCT ...)" */
|
#define WHERE_AGG_DISTINCT 0x0400 /* Query is "SELECT agg(DISTINCT ...)" */
|
||||||
#define WHERE_ORDERBY_LIMIT 0x0800 /* ORDERBY+LIMIT on the inner loop */
|
#define WHERE_ORDERBY_LIMIT 0x0800 /* ORDERBY+LIMIT on the inner loop */
|
||||||
/* 0x1000 not currently used */
|
#define WHERE_RIGHT_JOIN 0x1000 /* Processing a RIGHT JOIN */
|
||||||
/* 0x2000 not currently used */
|
/* 0x2000 not currently used */
|
||||||
#define WHERE_USE_LIMIT 0x4000 /* Use the LIMIT in cost estimates */
|
#define WHERE_USE_LIMIT 0x4000 /* Use the LIMIT in cost estimates */
|
||||||
/* 0x8000 not currently used */
|
/* 0x8000 not currently used */
|
||||||
|
@ -6191,8 +6191,9 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
|
|||||||
sFrom.nAlloc = 1;
|
sFrom.nAlloc = 1;
|
||||||
memcpy(&sFrom.a[0], pTabItem, sizeof(SrcItem));
|
memcpy(&sFrom.a[0], pTabItem, sizeof(SrcItem));
|
||||||
sFrom.a[0].fg.jointype = 0;
|
sFrom.a[0].fg.jointype = 0;
|
||||||
|
ExplainQueryPlan((pParse, 1, "RIGHT-JOIN %s", pTab->zName));
|
||||||
pSubWInfo = sqlite3WhereBegin(pParse, &sFrom, pSubWhere, 0, 0, 0,
|
pSubWInfo = sqlite3WhereBegin(pParse, &sFrom, pSubWhere, 0, 0, 0,
|
||||||
WHERE_OR_SUBCLAUSE, 0);
|
WHERE_RIGHT_JOIN, 0);
|
||||||
if( pSubWInfo ){
|
if( pSubWInfo ){
|
||||||
int iCur = pLevel->iTabCur;
|
int iCur = pLevel->iTabCur;
|
||||||
int r = ++pParse->nMem;
|
int r = ++pParse->nMem;
|
||||||
@ -6219,6 +6220,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
|
|||||||
sqlite3WhereEnd(pSubWInfo);
|
sqlite3WhereEnd(pSubWInfo);
|
||||||
}
|
}
|
||||||
sqlite3ExprDelete(pParse->db, pSubWhere);
|
sqlite3ExprDelete(pParse->db, pSubWhere);
|
||||||
|
ExplainQueryPlanPop(pParse);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,6 +204,9 @@ int sqlite3WhereExplainOneScan(
|
|||||||
pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr);
|
pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if( pItem->fg.jointype & JT_LEFT ){
|
||||||
|
sqlite3_str_appendf(&str, " LEFT-JOIN");
|
||||||
|
}
|
||||||
#ifdef SQLITE_EXPLAIN_ESTIMATED_ROWS
|
#ifdef SQLITE_EXPLAIN_ESTIMATED_ROWS
|
||||||
if( pLoop->nOut>=10 ){
|
if( pLoop->nOut>=10 ){
|
||||||
sqlite3_str_appendf(&str, " (~%llu rows)",
|
sqlite3_str_appendf(&str, " (~%llu rows)",
|
||||||
@ -1150,7 +1153,7 @@ static void codeDeferredSeek(
|
|||||||
|
|
||||||
pWInfo->bDeferredSeek = 1;
|
pWInfo->bDeferredSeek = 1;
|
||||||
sqlite3VdbeAddOp3(v, OP_DeferredSeek, iIdxCur, 0, iCur);
|
sqlite3VdbeAddOp3(v, OP_DeferredSeek, iIdxCur, 0, iCur);
|
||||||
if( (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)
|
if( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))
|
||||||
&& DbMaskAllZero(sqlite3ParseToplevel(pParse)->writeMask)
|
&& DbMaskAllZero(sqlite3ParseToplevel(pParse)->writeMask)
|
||||||
){
|
){
|
||||||
int i;
|
int i;
|
||||||
@ -1502,7 +1505,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
|||||||
** initialize a memory cell that records if this table matches any
|
** initialize a memory cell that records if this table matches any
|
||||||
** row of the left table of the join.
|
** row of the left table of the join.
|
||||||
*/
|
*/
|
||||||
assert( (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)
|
assert( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))
|
||||||
|| pLevel->iFrom>0 || (pTabItem[0].fg.jointype & JT_LEFT)==0
|
|| pLevel->iFrom>0 || (pTabItem[0].fg.jointype & JT_LEFT)==0
|
||||||
);
|
);
|
||||||
if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){
|
if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){
|
||||||
@ -2140,7 +2143,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
|||||||
|
|
||||||
/* Seek the table cursor, if required */
|
/* Seek the table cursor, if required */
|
||||||
omitTable = (pLoop->wsFlags & WHERE_IDX_ONLY)!=0
|
omitTable = (pLoop->wsFlags & WHERE_IDX_ONLY)!=0
|
||||||
&& (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)==0;
|
&& (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))==0;
|
||||||
if( omitTable ){
|
if( omitTable ){
|
||||||
/* pIdx is a covering index. No need to access the main table. */
|
/* pIdx is a covering index. No need to access the main table. */
|
||||||
}else if( HasRowid(pIdx->pTable) ){
|
}else if( HasRowid(pIdx->pTable) ){
|
||||||
@ -2174,7 +2177,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
|||||||
** move forward to the next index.
|
** move forward to the next index.
|
||||||
** https://sqlite.org/src/info/4e8e4857d32d401f
|
** https://sqlite.org/src/info/4e8e4857d32d401f
|
||||||
*/
|
*/
|
||||||
if( (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)==0 ){
|
if( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))==0 ){
|
||||||
whereIndexExprTrans(pIdx, iCur, iIdxCur, pWInfo);
|
whereIndexExprTrans(pIdx, iCur, iIdxCur, pWInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2193,7 +2196,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
|||||||
/* The following assert() is not a requirement, merely an observation:
|
/* The following assert() is not a requirement, merely an observation:
|
||||||
** The OR-optimization doesn't work for the right hand table of
|
** The OR-optimization doesn't work for the right hand table of
|
||||||
** a LEFT JOIN: */
|
** a LEFT JOIN: */
|
||||||
assert( (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)==0 );
|
assert( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))==0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Record the instruction used to terminate the loop. */
|
/* Record the instruction used to terminate the loop. */
|
||||||
|
@ -283,7 +283,7 @@ do_eqp_test autoindex1-600a {
|
|||||||
| `--CORRELATED SCALAR SUBQUERY xxxxxx
|
| `--CORRELATED SCALAR SUBQUERY xxxxxx
|
||||||
| `--SEARCH later USING COVERING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date>? AND owner_change_date<?)
|
| `--SEARCH later USING COVERING INDEX sqlite_autoindex_flock_owner_1 (flock_no=? AND owner_change_date>? AND owner_change_date<?)
|
||||||
|--SCAN x USING INDEX sheep_reg_flock_index
|
|--SCAN x USING INDEX sheep_reg_flock_index
|
||||||
`--SEARCH y USING AUTOMATIC COVERING INDEX (sheep_no=?)
|
`--SEARCH y USING AUTOMATIC COVERING INDEX (sheep_no=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ do_eqp_test 4.2 {
|
|||||||
|--MATERIALIZE rr
|
|--MATERIALIZE rr
|
||||||
| `--SCAN ft4 VIRTUAL TABLE INDEX 3:
|
| `--SCAN ft4 VIRTUAL TABLE INDEX 3:
|
||||||
|--SCAN t4
|
|--SCAN t4
|
||||||
`--SEARCH rr USING AUTOMATIC COVERING INDEX (docid=?)
|
`--SEARCH rr USING AUTOMATIC COVERING INDEX (docid=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
@ -320,7 +320,7 @@ do_eqp_test index6-8.1 {
|
|||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN t8a
|
|--SCAN t8a
|
||||||
`--SEARCH t8b USING INDEX i8c (y=?)
|
`--SEARCH t8b USING INDEX i8c (y=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
do_execsql_test index6-8.2 {
|
do_execsql_test index6-8.2 {
|
||||||
|
@ -114,7 +114,7 @@ do_eqp_test 3.1 {
|
|||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN t1
|
|--SCAN t1
|
||||||
`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?)
|
`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
do_eqp_test 3.2 {
|
do_eqp_test 3.2 {
|
||||||
@ -122,7 +122,7 @@ do_eqp_test 3.2 {
|
|||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN t1
|
|--SCAN t1
|
||||||
`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?)
|
`--SEARCH t2 USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -162,15 +162,15 @@ do_eqp_test 4.1.5 {
|
|||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN c1
|
|--SCAN c1
|
||||||
|--SEARCH c2 USING INTEGER PRIMARY KEY (rowid=?)
|
|--SEARCH c2 USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
|
||||||
`--SEARCH c3 USING INTEGER PRIMARY KEY (rowid=?)
|
`--SEARCH c3 USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
do_eqp_test 4.1.6 {
|
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);
|
SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1);
|
||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN c1
|
|--SCAN c1
|
||||||
`--SEARCH c3 USING INTEGER PRIMARY KEY (rowid=?)
|
`--SEARCH c3 USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
do_execsql_test 4.2.0 {
|
do_execsql_test 4.2.0 {
|
||||||
@ -209,15 +209,15 @@ do_eqp_test 4.2.5 {
|
|||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN c1
|
|--SCAN c1
|
||||||
|--SEARCH c2 USING INDEX sqlite_autoindex_c2_1 (k=?)
|
|--SEARCH c2 USING INDEX sqlite_autoindex_c2_1 (k=?) LEFT-JOIN
|
||||||
`--SEARCH c3 USING INDEX sqlite_autoindex_c3_1 (k=?)
|
`--SEARCH c3 USING INDEX sqlite_autoindex_c3_1 (k=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
do_eqp_test 4.2.6 {
|
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);
|
SELECT v1, v3 FROM c1 LEFT JOIN c2 ON (c2.k=v1) LEFT JOIN c3 ON (c3.k=v1+1);
|
||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN c1
|
|--SCAN c1
|
||||||
`--SEARCH c3 USING INDEX sqlite_autoindex_c3_1 (k=?)
|
`--SEARCH c3 USING INDEX sqlite_autoindex_c3_1 (k=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
# 2017-11-23 (Thanksgiving day)
|
# 2017-11-23 (Thanksgiving day)
|
||||||
|
@ -280,9 +280,9 @@ do_eqp_test 7.2 {
|
|||||||
|--SCAN t1
|
|--SCAN t1
|
||||||
`--MULTI-INDEX OR
|
`--MULTI-INDEX OR
|
||||||
|--INDEX 1
|
|--INDEX 1
|
||||||
| `--SEARCH t2 USING INDEX t2xy (x=? AND y=?)
|
| `--SEARCH t2 USING INDEX t2xy (x=? AND y=?) LEFT-JOIN
|
||||||
`--INDEX 2
|
`--INDEX 2
|
||||||
`--SEARCH t2 USING INDEX t2xy (x=? AND y=?)
|
`--SEARCH t2 USING INDEX t2xy (x=? AND y=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
|
|
||||||
do_execsql_test 7.3 {
|
do_execsql_test 7.3 {
|
||||||
@ -303,7 +303,7 @@ do_eqp_test 7.4 {
|
|||||||
} {
|
} {
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|--SCAN t3
|
|--SCAN t3
|
||||||
`--SEARCH t4 USING INDEX t4xz (x=?)
|
`--SEARCH t4 USING INDEX t4xz (x=?) LEFT-JOIN
|
||||||
}
|
}
|
||||||
do_eqp_test 7.4b {
|
do_eqp_test 7.4b {
|
||||||
SELECT * FROM t3 CROSS JOIN t4 ON (t4.x = t3.x) WHERE (+t4.y = ? OR t4.z = ?);
|
SELECT * FROM t3 CROSS JOIN t4 ON (t4.x = t3.x) WHERE (+t4.y = ? OR t4.z = ?);
|
||||||
|
@ -378,9 +378,9 @@ ifcapable explain {
|
|||||||
|--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?)
|
|--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?)
|
||||||
`--MULTI-INDEX OR
|
`--MULTI-INDEX OR
|
||||||
|--INDEX 1
|
|--INDEX 1
|
||||||
| `--SEARCH t2 USING INDEX t2d (d=?)
|
| `--SEARCH t2 USING INDEX t2d (d=?) LEFT-JOIN
|
||||||
`--INDEX 2
|
`--INDEX 2
|
||||||
`--SEARCH t2 USING COVERING INDEX t2f (f=?)
|
`--SEARCH t2 USING COVERING INDEX t2f (f=?) LEFT-JOIN
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user