sqlite/sqlite-3.35.4-fix-handling-LIKE-expressions.patch

44 lines
1.3 KiB
Diff
Raw Normal View History

Subject: [PATCH] Fix a problem with handling expressions like '(col IS NULL
AND <expr1>) OR col == NULL' in WHERE clauses.
---
src/whereexpr.c | 1 +
test/notnull2.test | 10 ++++++++++
2 files changed, 11 insertions(+)
diff --git a/src/whereexpr.c b/src/whereexpr.c
index b3f48fe..1807fbb 100644
--- a/src/whereexpr.c
+++ b/src/whereexpr.c
@@ -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
diff --git a/test/notnull2.test b/test/notnull2.test
index 9ae190f..0a7a492 100644
--- a/test/notnull2.test
+++ b/test/notnull2.test
@@ -97,5 +97,15 @@ 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
--
2.30.2