Changeset: 4895795b2dbe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4895795b2dbe
Modified Files:
        sql/backends/monet5/dict.c
Branch: Jan2022
Log Message:

Set tnil/tnonil flag after decompressing


diffs (71 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
@@ -283,6 +283,7 @@ DICTcompress_col(Client cntxt, MalBlkPtr
 BAT *
 DICTdecompress_(BAT *o, BAT *u, role_t role)
 {
+       bool nils = false;
        BAT *b = COLnew(o->hseqbase, u->ttype, BATcount(o), role);
 
        if (!b)
@@ -298,19 +299,27 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
                        int *bp = Tloc(b, 0);
 
                        BATloop(o, p, q) {
-                               bp[p] = up[op[p]];
+                               int v = up[op[p]];
+                               nils |= is_int_nil(v);
+                               bp[p] = v;
                        }
                        BATsetcount(b, BATcount(o));
                        BATnegateprops(b);
+                       b->tnil = nils;
+                       b->tnonil = !nils;
                } else if (ATOMstorage(u->ttype) == TYPE_lng) {
                        lng *up = Tloc(u, 0);
                        lng *bp = Tloc(b, 0);
 
                        BATloop(o, p, q) {
-                               bp[p] = up[op[p]];
+                               lng v = up[op[p]];
+                               nils |= is_lng_nil(v);
+                               bp[p] = v;
                        }
                        BATsetcount(b, BATcount(o));
                        BATnegateprops(b);
+                       b->tnil = nils;
+                       b->tnonil = !nils;
                } else {
                        BATloop(o, p, q) {
                                BUN up = op[p];
@@ -330,19 +339,27 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
                        int *bp = Tloc(b, 0);
 
                        BATloop(o, p, q) {
-                               bp[p] = up[op[p]];
+                               int v = up[op[p]];
+                               nils |= is_int_nil(v);
+                               bp[p] = v;
                        }
                        BATsetcount(b, BATcount(o));
                        BATnegateprops(b);
+                       b->tnil = nils;
+                       b->tnonil = !nils;
                } else if (ATOMstorage(u->ttype) == TYPE_lng) {
                        lng *up = Tloc(u, 0);
                        lng *bp = Tloc(b, 0);
 
                        BATloop(o, p, q) {
-                               bp[p] = up[op[p]];
+                               lng v = up[op[p]];
+                               nils |= is_lng_nil(v);
+                               bp[p] = v;
                        }
                        BATsetcount(b, BATcount(o));
                        BATnegateprops(b);
+                       b->tnil = nils;
+                       b->tnonil = !nils;
                } else {
                        BATloop(o, p, q) {
                                BUN up = op[p];
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to