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

some property fixes


diffs (90 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
@@ -133,8 +133,10 @@ DICTcompress(Client cntxt, MalBlkPtr mb,
                }
                BUN minpos = BUN_NONE, maxpos = BUN_NONE;
                bte m = BATcount(u) - 1;
-               bte minval = m<0?m:0;
+               bte minval = m<0?-128:0;
                bte maxval = m<0?127:m;
+               o->tnil = m<0?true:false;
+               o->tnonil = m<=0?false:true;
                BATloop(o, p, q) {
                        if (op[p] == minval) {
                                minpos = p;
@@ -172,8 +174,10 @@ DICTcompress(Client cntxt, MalBlkPtr mb,
                }
                BUN minpos = BUN_NONE, maxpos = BUN_NONE;
                sht m = BATcount(u) - 1;
-               sht minval = m<0?m:0;
+               sht minval = m<0?-32768:0;
                sht maxval = m<0?32767:m;
+               o->tnil = m<0?true:false;
+               o->tnonil = m<=0?false:true;
                BATloop(o, p, q) {
                        if (op[p] == minval) {
                                minpos = p;
@@ -317,6 +321,7 @@ convert_oid( BAT *o, int rt)
        BUN p, q;
        BATiter oi = bat_iterator(o);
        BAT *b = COLnew(o->hseqbase, rt, BATcount(o), TRANSIENT);
+       int brokenrange = 0, nil = 0;
 
        if (!b)
                return NULL;
@@ -324,24 +329,32 @@ convert_oid( BAT *o, int rt)
                unsigned char *rp = Tloc(b, 0);
                if (o->ttype == TYPE_void) {
                        BATloop(o, p, q) {
-                               rp[p] = (unsigned char) (p+o->T.seq);
+                               rp[p] = (unsigned char) (p+o->tseqbase);
+                               brokenrange |= ((bte)rp[p] < 0);
+                               nil |= ((bte)rp[p] == bte_nil);
                        }
                } else {
                        oid *op = Tloc(o, 0);
                        BATloop(o, p, q) {
                                rp[p] = (unsigned char) op[p];
+                               brokenrange |= ((bte)rp[p] < 0);
+                               nil |= ((bte)rp[p] == bte_nil);
                        }
                }
        } else if (rt == TYPE_sht) {
                unsigned short *rp = Tloc(b, 0);
                if (o->ttype == TYPE_void) {
                        BATloop(o, p, q) {
-                               rp[p] = (unsigned short) (p+o->T.seq);
+                               rp[p] = (unsigned short) (p+o->tseqbase);
+                               brokenrange |= ((short)rp[p] < 0);
+                               nil |= ((short)rp[p] == sht_nil);
                        }
                } else {
                        oid *op = Tloc(o, 0);
                        BATloop(o, p, q) {
                                rp[p] = (unsigned short) op[p];
+                               brokenrange |= ((short)rp[p] < 0);
+                               nil |= ((short)rp[p] == sht_nil);
                        }
                }
        } else {
@@ -349,8 +362,17 @@ convert_oid( BAT *o, int rt)
        }
        bat_iterator_end(&oi);
        BATsetcount(b, BATcount(o));
-       b->T.sorted = o->T.sorted;
-       b->T.key = o->T.key;
+       BATnegateprops(b);
+       if (!brokenrange)
+               b->tsorted = o->tsorted;
+       b->tkey = o->tkey;
+       if (nil) {
+               b->tnil = true;
+               b->tnonil = false;
+       } else {
+               b->tnil = false;
+               b->tnonil = true;
+       }
        return b;
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to