Changeset: c0eb5e3f42e2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c0eb5e3f42e2
Modified Files:
        gdk/gdk_group.c
Branch: Dec2016
Log Message:

Improve some properties in BATgroup.


diffs (54 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -441,7 +441,7 @@ BATgroup_internal(BAT **groups, BAT **ex
        }
        if (BATordered(b) && BATordered_rev(b)) {
                /* all values are equal */
-               if (g == NULL) {
+               if (g == NULL || (BATordered(g) && BATordered_rev(g))) {
                        /* there's only a single group: 0 */
                        ALGODEBUG fprintf(stderr, "#BATgroup(b=%s#" BUNFMT ","
                                  "g=%s#" BUNFMT ","
@@ -573,9 +573,9 @@ BATgroup_internal(BAT **groups, BAT **ex
                }
        }
 
-       if (((BATordered(b) || BATordered_rev(b)) &&
-            (g == NULL || BATordered(g) || BATordered_rev(g))) ||
-           subsorted) {
+       if (subsorted ||
+           ((BATordered(b) || BATordered_rev(b)) &&
+            (g == NULL || BATordered(g) || BATordered_rev(g)))) {
                /* we only need to compare each entry with the previous */
                ALGODEBUG fprintf(stderr, "#BATgroup(b=%s#" BUNFMT ","
                                  "g=%s#" BUNFMT ","
@@ -935,15 +935,15 @@ BATgroup_internal(BAT **groups, BAT **ex
                BATsetcount(en, (BUN) ngrp);
                en->tkey = 1;
                en->tsorted = 1;
-               en->trevsorted = BATcount(en) <= 1;
+               en->trevsorted = ngrp == 1;
                en->tnonil = 1;
                en->tnil = 0;
-               *extents = en;
+               *extents = virtualize(en);
        }
        if (histo) {
                BATsetcount(hn, (BUN) ngrp);
-               if (BATcount(hn) <= 1) {
-                       hn->tkey = 1;
+               if (ngrp == 1 || ngrp == BATcount(b)) {
+                       hn->tkey = ngrp == 1;
                        hn->tsorted = 1;
                        hn->trevsorted = 1;
                } else {
@@ -956,7 +956,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                *histo = hn;
        }
        gn->tkey = ngrp == BATcount(gn);
-       gn->trevsorted = BATcount(gn) <= 1;
+       gn->trevsorted = ngrp == 1 || BATcount(gn) <= 1;
        gn->tnonil = 1;
        gn->tnil = 0;
        *groups = gn;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to