]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with handling expressions like "(col IS NULL AND <expr1>) OR col =...
authordrh <>
Tue, 13 Apr 2021 18:39:32 +0000 (18:39 +0000)
committerdrh <>
Tue, 13 Apr 2021 18:39:32 +0000 (18:39 +0000)
FossilOrigin-Name: e8c7bd34d0cb8c595d58b6b24621fdd3cc02f05ac7dc59f450fa08c0e394a4b4

manifest
manifest.uuid
src/whereexpr.c
test/notnull2.test

index 7ae1becbfebfdede1bd29e110927c331f593a1a0..65b8ddac5b50ce8f8a2b648191727e8dd0075447 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.35.4
-D 2021-04-02T15:20:15.843
+C Fix\sa\sproblem\swith\shandling\sexpressions\slike\s"(col\sIS\sNULL\sAND\s<expr1>)\sOR\scol\s==\sNULL"\sin\sWHERE\sclauses.\sReported\sat\s[https://sqlite.org/forum/forumpost/1c4f2fdcc4].
+D 2021-04-13T18:39:32.427
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -632,7 +632,7 @@ F src/walker.c d42d6c80ea363ef689a462e65eefcfe87deab924c50de5baa37ecb6af7d7ddaa
 F src/where.c 10d06b16670a1d2a992d52a9f08e49426d38a08fb0a7ae5f7f62fd023d560e1e
 F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4
 F src/wherecode.c e57a8690311a75d06e723e8d379f9831de04aba300e07174d236e32a7f9c7a13
-F src/whereexpr.c 4ba94b8ebbff97c658b212de6ccdb6d3a41847800bdf99e7a2a967c250269f2c
+F src/whereexpr.c d8cafcf6781cf871082f04d7540862cf0fe30cb381dd1b2145a380376364fe8e
 F src/window.c 32b03808aff2e7263889cce0cbcb2a68efefc2a9d5187514ddb6a2a1046dc7f5
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
@@ -1225,7 +1225,7 @@ F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf
 F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161
 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934
 F test/notnull.test a37b663d5bb728d66fc182016613fb8e4a0a4bbf3d75b8876a7527f7d4ed3f18
-F test/notnull2.test 965a893619751255e59c911a8c58504b3174a3788b1458b7c7365b232209711b
+F test/notnull2.test d5e27e7eb9ff80c587998088a3c40dcc9e4faa71c7ec27a41b4435b0f3b8fdc9
 F test/notnullfault.test 6126e31300632070ca6021698393c7fcf61ab4791bc2aa1d6d704242c0fcd4f8
 F test/null.test b7ff206a1c60fe01aa2abd33ef9ea83c93727d993ca8a613de86e925c9f2bc6f
 F test/nulls1.test 82c5bc33148405f21205865abf13c786084438d573a4ac4e87e11b6091cde526
@@ -1910,9 +1910,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 64b0eb7e1171611436031b8d2923ce947c37addbd8a776a7ded461fc486c3640
-R 55c5b4b708ce6050b44359864678297d
-T +sym-release *
-T +sym-version-3.35.4 *
-U dan
-Z 77a9a4e15883c7141df67ebe55a2c0d2
+P 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
+Q +40852ca8e215e51f63652a67817361b835b6fbbff7f66af50089af91007505f1
+R a373d96bf44029d511bc1cb5056d253a
+U drh
+Z 79d45f9744305292935fbcc773375095
index e9636d1bb8c1d5d4a15974b8cf8b72973c1d9ce5..5fa0305af74b79b75aa56d51c0e1748ee654ef6f 100644 (file)
@@ -1 +1 @@
-5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
\ No newline at end of file
+e8c7bd34d0cb8c595d58b6b24621fdd3cc02f05ac7dc59f450fa08c0e394a4b4
\ No newline at end of file
index b3f48feaa2612821a8c278721bb7c7d9eeb57bc3..1807fbb000c5fd64697ac323d45be87218b4c230 100644 (file)
@@ -511,6 +511,7 @@ static void whereCombineDisjuncts(
   int op;                /* Operator for the combined expression */
   int idxNew;            /* Index in pWC of the next virtual term */
 
+  if( (pOne->wtFlags | pTwo->wtFlags) & TERM_VNULL ) return;
   if( (pOne->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return;
   if( (pTwo->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return;
   if( (eOp & (WO_EQ|WO_LT|WO_LE))!=eOp
index 9ae190fe196c099244caa06d09142587cfd4a14b..adc35e7d1d1913b5c288c9f96efe019875c92a6d 100644 (file)
@@ -97,5 +97,17 @@ do_execsql_test 2.1 {
   SELECT * FROM (SELECT a, b FROM t1) LEFT JOIN t3 ON a IS NULL;
 }
 
+
+
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 3.0 {
+  CREATE TABLE t0(c0 PRIMARY KEY);
+  INSERT INTO t0(c0) VALUES (0);
+}
+do_execsql_test 3.1 {
+  SELECT * FROM t0 WHERE ((c0 NOT NULL) AND 1) OR (c0 == NULL);
+} {0}
+
 finish_test