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]