]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid evaluating special vtab operators (e.g. MATCH) that are part of ON clauses...
authordan <Dan Kennedy>
Sat, 12 Jul 2025 18:14:41 +0000 (18:14 +0000)
committerdan <Dan Kennedy>
Sat, 12 Jul 2025 18:14:41 +0000 (18:14 +0000)
FossilOrigin-Name: 18ba07c152294a96d510a7851a0860f982ff1e0725afeebed9a343f550f6925a

ext/fts5/test/fts5leftjoin.test
manifest
manifest.uuid
src/whereexpr.c
test/between.test

index 4ef6a8961b0577099fbb537d47ac5937d02310a1..69a172bd4552a113957e96c121c1dfcdd6e68b28 100644 (file)
@@ -40,4 +40,53 @@ do_execsql_test 1.2 {
   SELECT * FROM t1 LEFT JOIN vt ON (vt MATCH 'abc')
 } {1 abc 2 abc}
 
+
+do_execsql_test 1.3 {
+  DELETE FROM t1;
+  INSERT INTO t1 VALUES(14);
+}
+
+do_execsql_test 1.4 {
+  SELECT * FROM vt LEFT JOIN t1 ON vt.rowid = 1;
+} {
+  abc 14
+  xyz {}
+}
+
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 2.0 {
+  CREATE VIRTUAL TABLE t0 USING fts5(a,b);
+  INSERT INTO t0(a,b)VALUES(1,0);
+  CREATE TABLE t1(x);
+}
+
+do_execsql_test 2.1 {
+  SELECT * FROM t0 LEFT JOIN t1;
+} {1 0 {}}
+
+breakpoint
+do_catchsql_test 2.2 {
+  SELECT * FROM t0 LEFT JOIN t1 ON t0.b MATCH '1';
+} {1 {no query solution}}
+
+do_execsql_test 2.3 {
+  SELECT * FROM t0 LEFT JOIN t1 ON +b MATCH '1';
+} {1 0 {}}
+
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 3.0 {
+  CREATE VIRTUAL TABLE t0 USING fts5(c0, c1);
+  INSERT INTO t0(c0,c1) VALUES (1,0);
+}
+
+do_catchsql_test 3.1 {
+  SELECT * FROM  t0 
+  LEFT JOIN ( SELECT 0 AS col_0 ) 
+  ON ((((t0.c1 MATCH '1')AND(CASE WHEN t0.c0 THEN CAST(t0.c1 AS INTEGER) ELSE 1 END))));
+} {1 {no query solution}}
+
+
 finish_test
index e8a27b895666f0e298ff376bc951bd257b336620..87abca403e4c4636662268f9b35ec9e582735e17 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C wasm:\sintroduce\sthe\ssqlite3.oo1.DB.wrapHandle()\sand\sStmt.wrapHandle()\sAPIs,\swhich\senable\sclients\sto\swrap\s(sqlite3*)\sresp.\s(sqlite3_stmt*)\spointers\sin\stheir\soo1\sAPI\scounterparts,\soptionally\swith\sor\swithout\staking\sover\sownership\sof\sthe\spointer.
-D 2025-07-11T19:52:36.729
+C Avoid\sevaluating\sspecial\svtab\soperators\s(e.g.\sMATCH)\sthat\sare\spart\sof\sON\sclauses\sattached\sto\sleft\sjoins\sfrom\sbeing\sevaluated\stoo\searly.\sPossible\sfix\sfor\s[forum:/forumpost/428ef7c468\s|\sforum\spost\s428ef7c468].
+D 2025-07-12T18:14:41.159
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -201,7 +201,7 @@ F ext/fts5/test/fts5integrity.test c423ce16fd1ccadcac7fc22f794226b2bb00f5a187c0a
 F ext/fts5/test/fts5integrity2.test 4c3636615c0201232c44a8105d5cb14fd5499fd0ee3014d7ffd7e83aac76ece8
 F ext/fts5/test/fts5interrupt.test 20d04204d3e341b104c0c24a41596b6393a3a81eba1044c168db0e106f9ac92c
 F ext/fts5/test/fts5lastrowid.test f36298a1fb9f988bde060a274a7ce638faa9c38a31400f8d2d27ea9373e0c4a1
-F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc2782680740513c4d1fc114b43d4ad
+F ext/fts5/test/fts5leftjoin.test 1c14b51f4d1344a89e488160882f05a2246dd7e70c5cf077c8fb473e03c66338
 F ext/fts5/test/fts5limits.test 8ab67cf5d311c124b6ceb0062d0297767176df4572d955fce79fa43004dff01c
 F ext/fts5/test/fts5locale.test 83ba7ee12628b540d3098f39c39c1de0c0440eddff8f7512c8c698d0c4a3ae3c
 F ext/fts5/test/fts5matchinfo.test bc9e74157773db7f00aec1e85587f1145956ebdf1672c136f0f04323b2752aa0
@@ -870,7 +870,7 @@ F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
 F src/where.c 6a9266dd1a559d48d8c7ca670a3e80143c7913153f7d1ceb0a4eca1087318951
 F src/whereInt.h 8d94cb116c9e06205c3d5ac87af065fc044f8cf08bfdccd94b6ea1c1308e65da
 F src/wherecode.c 2a2d2993fd98c46f525f71b3bfd330fde73d8613aa0ff3e20402dd1fc63470af
-F src/whereexpr.c 0a7fe115adad30def38aeab6ac1d35fb67782cee92a43df7448136240accd4dd
+F src/whereexpr.c 78c28a8da187816d5d82049f2e343fb39f4a8e30b5bf1bda9b96cecde40ca8bd
 F src/window.c d01227141f622f24fbe36ca105fbe6ef023f9fd98f1ccd65da95f88886565db5
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test 4d7a34d328e58ca2a2d78fd76c27614a41ca7ddf4312ded9c68c04f430b3b47d
@@ -964,7 +964,7 @@ F test/bestindexA.test e1b5def6b190797cacf008e6815ffb78fb30261999030d60a728d572e
 F test/bestindexB.test 328b97b69cd1a20928d5997f9ecb04d2e00f1d18e19ab27f9e9adb44d7bc51ce
 F test/bestindexC.test 95b4a527b1a5d07951d731604a6d4cf7e5a806b39cea0e7819d4c9667e11c3fc
 F test/bestindexD.test 6a8f6f84990bcf17dfa59652a1f935beddb7afd96f8302830fbc86b0a13df3c3
-F test/between.test b9a65fb065391980119e8a781a7409d3fcf059d89968279c750e190a9a1d5263
+F test/between.test b301ef0d822a26b31235e10a3b7f1130be1565a7ba080e80a3a1ae3ba5a35ff7
 F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59
 F test/bigfile2.test 1b489a3a39ae90c7f027b79110d6b4e1dbc71bfc
 F test/bigmmap.test 6021e205487347c6d7e5a541aa472a4b8efc4e9f4a3799a823b61a8e6616105d
@@ -2212,9 +2212,11 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 3656acfaa3011321a6e17fb81e5bdedcfffeab6035f133ab89ae9589bf5bef72 53401b5435e30c4b47b6e203976b714d616246d734b5876a34f53f6388f872f8
-R 6e106d1cb56322541040e2b7c468c9ad
-T +closed 53401b5435e30c4b47b6e203976b714d616246d734b5876a34f53f6388f872f8 Closed\sby\sintegrate-merge.
-U stephan
-Z f91aebcbb3981855ba9f714a42d1af4f
+P e5d079549594ca44852773b8919894866394e47ad725dadc7f65242413a219d3
+R eb99b7ab5a76b7191a98fe93227d2428
+T *branch * vtab-leftjoin-fix
+T *sym-vtab-leftjoin-fix *
+T -sym-trunk *
+U dan
+Z c80dd1f4987fe05a4ba000eae17152fd
 # Remove this line to create a well-formed Fossil manifest.
index ac45e07d97dc75d802f241c587bb0f60faef5aaf..786e5c76d3a78c68da7b0df06f30c765bc2f0b6c 100644 (file)
@@ -1 +1 @@
-e5d079549594ca44852773b8919894866394e47ad725dadc7f65242413a219d3
+18ba07c152294a96d510a7851a0860f982ff1e0725afeebed9a343f550f6925a
index e9fa4a14325dc6102b346625020dbee139823da0..0d17b0d7529f110a0da1e3b4d5e9191655020ba2 100644 (file)
@@ -1541,7 +1541,7 @@ static void exprAnalyze(
         idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
         testcase( idxNew==0 );
         pNewTerm = &pWC->a[idxNew];
-        pNewTerm->prereqRight = prereqExpr;
+        pNewTerm->prereqRight = prereqExpr | extraRight;
         pNewTerm->leftCursor = pLeft->iTable;
         pNewTerm->u.x.leftColumn = pLeft->iColumn;
         pNewTerm->eOperator = WO_AUX;
index 16c3913d12b913f9de89233b6f3d96b73b76dc59..4f09f1afeca42076b7c72a29f37f8bdb69a0a2ec 100644 (file)
@@ -140,4 +140,16 @@ foreach {tn expr res} {
   do_execsql_test between-2.1.$tn $sql $res
 }
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test between-3.0 {
+  CREATE TABLE t1(x, y);
+  INSERT INTO t1 VALUES(4, 4);
+  CREATE TABLE t2(a, b);
+}
+
+do_execsql_test between-3.1 {
+  SELECT * FROM t1 LEFT JOIN t2 ON (x BETWEEN 1 AND 3);
+} {4 4 {} {}}
+
 finish_test