Changeset: 2a686e131757 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2a686e131757
Modified Files:
        sql/backends/monet5/dict.c
        sql/test/dict/Tests/dict04.test
Branch: default
Log Message:

For > and < thetaselects on dictionary values, don't forget to filter null 
values out


diffs (83 lines):

diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c
--- a/sql/backends/monet5/dict.c
+++ b/sql/backends/monet5/dict.c
@@ -735,10 +735,25 @@ DICTthetaselect(Client cntxt, MalBlkPtr 
                                bn =  BATthetaselect(lo, lc, &val, op);
                        } else
                                assert(0);
+                       if (bn && (op[0] == '<' || op[0] == '>') && (!lvi.nonil 
|| lvi.nil)) { /* filter the NULL value out */
+                               p = BUNfnd(lv, ATOMnilptr(lvi.type));
+                               if (p != BUN_NONE) {
+                                       BAT *nbn = NULL;
+                                       if (loi.type == TYPE_bte) {
+                                               bte val = (bte)p;
+                                               nbn =  BATthetaselect(lo, bn, 
&val, "<>");
+                                       } else if (loi.type == TYPE_sht) {
+                                               sht val = (sht)p;
+                                               nbn =  BATthetaselect(lo, bn, 
&val, "<>");
+                                       } else
+                                               assert(0);
+                                       BBPreclaim(bn);
+                                       bn = nbn;
+                               }
+                       }
                } else if (op[0] == '!') {
                        if (!lvi.nonil || lvi.nil) { /* find a possible NULL 
value */
-                               const void *nilp = ATOMnilptr(lvi.type);
-                               p = BUNfnd(lv, nilp);
+                               p = BUNfnd(lv, ATOMnilptr(lvi.type));
                        } else {
                                p = BUN_NONE;
                        }
diff --git a/sql/test/dict/Tests/dict04.test b/sql/test/dict/Tests/dict04.test
--- a/sql/test/dict/Tests/dict04.test
+++ b/sql/test/dict/Tests/dict04.test
@@ -261,6 +261,48 @@ statement ok
 START TRANSACTION
 
 statement ok
+CREATE TABLE t0 (c0 INT)
+
+statement ok rowcount 1
+INSERT INTO t0 VALUES (NULL)
+
+statement ok
+COMMIT
+
+statement ok
+CALL "sys"."dict_compress"('sys','t0','c0', true)
+
+query I nosort
+SELECT 1 FROM t0 WHERE t0.c0 < 1
+----
+
+query I nosort
+SELECT 1 FROM t0 WHERE t0.c0 <= 1
+----
+
+query I nosort
+SELECT 1 FROM t0 WHERE t0.c0 > -1
+----
+
+query I nosort
+SELECT 1 FROM t0 WHERE t0.c0 >= -1
+----
+
+query I nosort
+SELECT 1 FROM t0 WHERE t0.c0 = 1
+----
+
+query I nosort
+SELECT 1 FROM t0 WHERE t0.c0 <> 1
+----
+
+statement ok
+DROP TABLE t0
+
+statement ok
+START TRANSACTION
+
+statement ok
 DROP ALL PROCEDURE "sys"."dict_compress"
 
 statement ok
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to