Changeset: 6fbb6bf3e9e9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6fbb6bf3e9e9
Modified Files:
        gdk/gdk_align.c
        gdk/gdk_batop.c
Branch: default
Log Message:

Avoid double work: VIEWcreate must set properties, so no need to repeat.


diffs (114 lines):

diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -96,10 +96,11 @@ VIEWboundsbi(BATiter *bi, BAT *view, BUN
        if (h < l)
                h = l;
        cnt = h - l;
-       view->batInserted = 0;
        if (view->ttype != TYPE_void) {
                view->tbaseoff = baseoff + l;
        }
+       if (!is_oid_nil(view->tseqbase))
+               view->tseqbase += l;
        BATsetcount(view, cnt);
        BATsetcapacity(view, cnt);
        if (view->tnosorted > l && view->tnosorted < l + cnt)
@@ -127,6 +128,7 @@ VIEWboundsbi(BATiter *bi, BAT *view, BUN
        else
                view->tmaxpos = BUN_NONE;
        view->tkey |= cnt <= 1;
+       view->tnil = false;     /* we don't know */
 }
 
 void
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1824,8 +1824,6 @@ BATslice(BAT *b, BUN l, BUN h)
 {
        BUN low = l;
        BAT *bn = NULL;
-       BATiter bni;
-       oid foid;               /* first oid value if oid column */
 
        BATcheck(b, NULL);
        BATiter bi = bat_iterator(b);
@@ -1893,12 +1891,13 @@ BATslice(BAT *b, BUN l, BUN h)
                BUN p = l;
                BUN q = h;
 
-               bn = COLnew((oid) (b->hseqbase + low), BATtdensebi(&bi) ? 
TYPE_void : b->ttype, h - l, TRANSIENT);
+               bn = COLnew((oid) (b->hseqbase + low), BATtdensebi(&bi) || 
(b->ttype == TYPE_oid && h == l) ? TYPE_void : b->ttype, h - l, TRANSIENT);
                if (bn == NULL)
                        goto doreturn;
 
                if (bn->ttype == TYPE_void) {
                        BATsetcount(bn, h - l);
+                       BATtseqbase(bn, is_oid_nil(bi.tseq) ? oid_nil : h == l 
? 0 : (oid) (bi.tseq + low));
                } else if (bn->tvheap == NULL) {
                        assert(BATatoms[bn->ttype].atomPut == NULL);
                        memcpy(Tloc(bn, 0), (const char *) bi.base + (p << 
bi.shift),
@@ -1915,54 +1914,29 @@ BATslice(BAT *b, BUN l, BUN h)
                        }
                }
                bn->theap->dirty = true;
-               bn->tsorted = bi.sorted;
-               bn->trevsorted = bi.revsorted;
-               bn->tkey = bi.key;
+               bn->tsorted = bi.sorted || bn->batCount <= 1;
+               bn->trevsorted = bi.revsorted || bn->batCount <= 1;
+               bn->tkey = bi.key || bn->batCount <= 1;
                bn->tnonil = bi.nonil;
-               if (bi.nosorted > l && bi.nosorted < h)
+               bn->tnil = false; /* we don't know */
+               if (bi.nosorted > l && bi.nosorted < h && !bn->tsorted)
                        bn->tnosorted = bi.nosorted - l;
                else
                        bn->tnosorted = 0;
-               if (bi.norevsorted > l && bi.norevsorted < h)
+               if (bi.norevsorted > l && bi.norevsorted < h && !bn->trevsorted)
                        bn->tnorevsorted = bi.norevsorted - l;
                else
                        bn->tnorevsorted = 0;
                if (bi.nokey[0] >= l && bi.nokey[0] < h &&
                    bi.nokey[1] >= l && bi.nokey[1] < h &&
-                   bi.nokey[0] != bi.nokey[1]) {
+                   bi.nokey[0] != bi.nokey[1] &&
+                   !bn->tkey) {
                        bn->tnokey[0] = bi.nokey[0] - l;
                        bn->tnokey[1] = bi.nokey[1] - l;
                } else {
                        bn->tnokey[0] = bn->tnokey[1] = 0;
                }
        }
-       bn->tnonil = bi.nonil || bn->batCount == 0;
-       bn->tnil = false;       /* we just don't know */
-       bn->tnosorted = 0;
-       bn->tnokey[0] = bn->tnokey[1] = 0;
-       bni = bat_iterator_nolock(bn);
-       if (BATtdensebi(&bi)) {
-               BATtseqbase(bn, (oid) (bi.tseq + low));
-       } else if (bn->ttype == TYPE_oid) {
-               if (BATcount(bn) == 0) {
-                       BATtseqbase(bn, 0);
-               } else if (!is_oid_nil((foid = *(oid *) BUNtloc(bni, 0))) &&
-                          (BATcount(bn) == 1 ||
-                           (bn->tkey &&
-                            bn->tsorted &&
-                            foid + BATcount(bn) - 1 == *(oid *) BUNtloc(bni, 
BATcount(bn) - 1)))) {
-                       BATtseqbase(bn, foid);
-               }
-       }
-       if (bn->batCount <= 1) {
-               bn->tsorted = ATOMlinear(b->ttype);
-               bn->trevsorted = ATOMlinear(b->ttype);
-               BATkey(bn, true);
-       } else {
-               bn->tsorted = bi.sorted;
-               bn->trevsorted = bi.revsorted;
-               BATkey(bn, bi.key);
-       }
   doreturn:
        bat_iterator_end(&bi);
        TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",lo=" BUNFMT ",hi=" BUNFMT " -> "
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to