Changeset: ff9acdc6d2d6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ff9acdc6d2d6
Modified Files:
        gdk/gdk_group.c
        gdk/gdk_unique.c
Branch: linear-hashing
Log Message:

Use nunique property where useful.


diffs (47 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -737,7 +737,10 @@ BATgroup_internal(BAT **groups, BAT **ex
        if (gn == NULL)
                goto error;
        ngrps = (oid *) Tloc(gn, 0);
-       maxgrps = cnt / 10;
+       if ((prop = BATgetprop(b, GDK_NUNIQUE)) != NULL)
+               maxgrps = prop->v.val.oval;
+       else
+               maxgrps = cnt / 10;
        if (!is_oid_nil(maxgrp) && maxgrps < maxgrp)
                maxgrps += maxgrp;
        if (e && maxgrps < BATcount(e))
@@ -747,7 +750,7 @@ BATgroup_internal(BAT **groups, BAT **ex
        if (maxgrps < GROUPBATINCR)
                maxgrps = GROUPBATINCR;
        if (b->twidth <= 2)
-               maxgrps = (BUN) 1 << (8 << (b->twidth == 2));
+               maxgrps = (BUN) 1 << (8 * b->twidth);
        if (extents) {
                en = COLnew(0, TYPE_oid, maxgrps, TRANSIENT);
                if (en == NULL)
diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -39,6 +39,7 @@ BATunique(BAT *b, BAT *s)
        int (*cmp)(const void *, const void *);
        bat parent;
        struct canditer ci;
+       PROPrec *prop;
 
        BATcheck(b, "BATunique", NULL);
        cnt = canditer_init(&ci, b, s);
@@ -69,7 +70,10 @@ BATunique(BAT *b, BAT *s)
 
        assert(b->ttype != TYPE_void);
 
-       bn = COLnew(0, TYPE_oid, 1024, TRANSIENT);
+       if (s == NULL && (prop = BATgetprop(b, GDK_NUNIQUE)) != NULL)
+               bn = COLnew(0, TYPE_oid, prop->v.val.oval, TRANSIENT);
+       else
+               bn = COLnew(0, TYPE_oid, 1024, TRANSIENT);
        if (bn == NULL)
                return NULL;
        vals = Tloc(b, 0);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to