Changeset: 3a51d8edf6af for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3a51d8edf6af
Modified Files:
        sql/server/rel_select.c
        sql/test/2024/Tests/distinct_from.test
Branch: default
Log Message:

fix and test bug #7521


diffs (54 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2318,9 +2318,24 @@ negate_symbol_tree(mvc *sql, symbol *sc)
        case SQL_COMPARE: {
                dnode *cmp_n = sc->data.lval->h;
                comp_type neg_cmp_type = 
negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the 
comparator */
+               if (cmp_n->next->next->next) {
+                       switch(cmp_n->next->next->next->data.i_val)
+                       {
+                       case 0: /* negating ANY/ALL */
+                               cmp_n->next->next->next->data.i_val = 1;
+                               break;
+                       case 1: /* negating ANY/ALL */
+                               cmp_n->next->next->next->data.i_val = 0;
+                               break;
+                       case 2: /* negating IS [NOY] DINSTINCT FROM */
+                               cmp_n->next->next->next->data.i_val = 3;
+                               break;
+                       case 3: /* negating IS [NOY] DINSTINCT FROM */
+                               cmp_n->next->next->next->data.i_val = 2;
+                               break;
+                       }
+               }
                cmp_n->next->data.sval = sa_strdup(sql->sa, 
compare_func(neg_cmp_type, 0));
-               if (cmp_n->next->next->next) /* negating ANY/ALL */
-                       cmp_n->next->next->next->data.i_val = 
cmp_n->next->next->next->data.i_val == 0 ? 1 : 0;
        } break;
        case SQL_AND:
        case SQL_OR: {
diff --git a/sql/test/2024/Tests/distinct_from.test 
b/sql/test/2024/Tests/distinct_from.test
--- a/sql/test/2024/Tests/distinct_from.test
+++ b/sql/test/2024/Tests/distinct_from.test
@@ -34,10 +34,20 @@ SELECT NULL IS DISTINCT FROM NULL
 0
 
 query I nosort
+SELECT NOT (NULL IS DISTINCT FROM NULL)
+----
+1
+
+query I nosort
 SELECT NULL IS NOT DISTINCT FROM NULL
 ----
 1
 
+query I nosort
+SELECT NOT (NULL IS NOT DISTINCT FROM NULL)
+----
+0
+
 statement ok
 create table foo(s) as values (10), (20), (NULL)
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to