]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Cannot use an automatic index on the right table of a RIGHT JOIN because
authordrh <>
Sun, 10 Apr 2022 23:48:47 +0000 (23:48 +0000)
committerdrh <>
Sun, 10 Apr 2022 23:48:47 +0000 (23:48 +0000)
automatic indexes must be WHERE_IDX_ONLY, but the RIGHT JOIN post-processing
does not know how to work with an index-only scan.

FossilOrigin-Name: beb4401dc09fb68e85ddcf3f99598527691535d0eb7693168f440e5a5a076e3f

manifest
manifest.uuid
src/where.c
test/join7.test

index 8ce42c41cd5546d1fefe969f255997fe2865c58f..df80bde0ca9821f91209d336e54c3368d1aee06c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Revisit\s[f84b2beca7197589]:\sdisallow\sco-routine\simplementations\sof\stables\nthat\sare\sto\sthe\sleft\sof\sa\sRIGHT\sJOIN,\sto\savoid\sother\scomplications.
-D 2022-04-10T23:01:20.947
+C Cannot\suse\san\sautomatic\sindex\son\sthe\sright\stable\sof\sa\sRIGHT\sJOIN\sbecause\nautomatic\sindexes\smust\sbe\sWHERE_IDX_ONLY,\sbut\sthe\sRIGHT\sJOIN\spost-processing\ndoes\snot\sknow\show\sto\swork\swith\san\sindex-only\sscan.
+D 2022-04-10T23:48:47.410
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -639,7 +639,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c b9df133a705093da8977da5eb202eaadb844839f1c7297c08d33471f5491843d
 F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
 F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b
-F src/where.c 4e72f26033d0977c4f5a21a06968d319b8c6eae8507f47a6245291cf570151a4
+F src/where.c cfc0926a221884af46cf933c9462e85e391022cb6aa06a65523e7464294b75d0
 F src/whereInt.h ecf0d9fe3e35f2546e660c6389e56aedb6fd2434e31a0449b261ff55ebc6df2d
 F src/wherecode.c 39532c183ea306ae44b5ab3119b244407b46970b088c59d5751c5724b4b6ec15
 F src/whereexpr.c ac8985bbd983f34273b1e0d05cd738ff436331674c1b22f4caf6537e1eca4691
@@ -1146,7 +1146,7 @@ F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
 F test/join5.test 0d63c7e43b3160b9d4b93f196ef83b6efc7751b9edd0d18c53a46fbec7a49cfc
 F test/join6.test f809c025fa253f9e150c0e9afd4cef8813257bceeb6f46e04041228c9403cc2c
-F test/join7.test b3e62ec45f9d8a17a4d13df7533805554e893d214554b4d998815834f7f674fa
+F test/join7.test 790f5fcb7de07fd7e231610ea0e3da7064cba09c1c1e0c3d879adf0c422680e7
 F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
 F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4
 F test/journal3.test 7c3cf23ffc77db06601c1fcfc9743de8441cb77db9d1aa931863d94f5ffa140e
@@ -1946,8 +1946,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P a48902c71ed30c83de7dbd26d1c7956136c35dc53b1076bc8b1ebcba568a3fd3
-R ca36fcb77f7ad090453c7879b10dd2ed
+P cf00ebfc4b77f45ec466b0d57d7c22c7f48acab19e4e55b168eb4b53f390d887
+R ace46715d37ee9d472092f5415672d4e
 U drh
-Z 2c5ea1399770dbe9a9af46dae89e29ee
+Z 7d6e1f7d66be1a3fd82f66b8d4846d22
 # Remove this line to create a well-formed Fossil manifest.
index 550964364edc59fd8cafeef78d35758cea0249bf..f40c2481c6e27a34ca3d021760fa3c18dd759f84 100644 (file)
@@ -1 +1 @@
-cf00ebfc4b77f45ec466b0d57d7c22c7f48acab19e4e55b168eb4b53f390d887
\ No newline at end of file
+beb4401dc09fb68e85ddcf3f99598527691535d0eb7693168f440e5a5a076e3f
\ No newline at end of file
index 56c3a01712d103b19351e390cea9d3a07b1b9c57..adae72a4fedff83d53e4f54af567370296f15e6a 100644 (file)
@@ -3324,6 +3324,7 @@ static int whereLoopAddBtree(
    && HasRowid(pTab)         /* Not WITHOUT ROWID table. (FIXME: Why not?) */
    && !pSrc->fg.isCorrelated /* Not a correlated subquery */
    && !pSrc->fg.isRecursive  /* Not a recursive common table expression. */
+   && (pSrc->fg.jointype & JT_RIGHT)==0 /* Not the right tab of a RIGHT JOIN */
   ){
     /* Generate auto-index WhereLoops */
     LogEst rLogSize;         /* Logarithm of the number of rows in the table */
index 3b496646494341060c0965b2912e4168477ceb3a..e2e45dc94bc4091520e6be8e2d901ff2c0abb5ad 100644 (file)
@@ -69,10 +69,17 @@ foreach {id schema} {
     INSERT INTO t2 VALUES(3,33),(4,44),(5,55);
     CREATE VIEW dual(dummy) AS VALUES('x');
   }
+  8 {
+    CREATE TABLE t1(a INT, b INT);
+    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);
+    CREATE TABLE t2(c INT, d INT);
+    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);
+    CREATE VIEW dual(dummy) AS VALUES('x');
+  }
 } {
   reset_db
   db nullvalue NULL
-  db eval $schema
+  do_execsql_test join7-$id.setup $schema {}
   do_execsql_test join7-$id.1 {
     SELECT b, d FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b;
   } {