Changeset: d44142158174 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d44142158174 Modified Files: gdk/gdk_aggr.c Branch: Jul2021 Log Message:
Fixed group handling in grouped min and max aggregates. diffs (104 lines): diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -3252,12 +3252,11 @@ BATgroupsize(BAT *b, BAT *g, BAT *e, BAT i = canditer_next(ci) - b->hseqbase; \ if (!skip_nils || \ !is_##TYPE##_nil(vals[i])) { \ - oids[i] = i + b->hseqbase; \ + oids[gid++] = i + b->hseqbase; \ nils--; \ } \ } \ } else { \ - gid = 0; /* in case gids == NULL */ \ while (ncand > 0) { \ ncand--; \ i = canditer_next(ci) - b->hseqbase; \ @@ -3288,7 +3287,7 @@ do_groupmin(oid *restrict oids, BAT *b, oid min, oid max, struct canditer *restrict ci, BUN ncand, bool skip_nils, bool gdense) { - oid gid; + oid gid = 0; BUN i, nils; int t; const void *nil; @@ -3341,15 +3340,16 @@ do_groupmin(oid *restrict oids, BAT *b, while (ncand > 0) { ncand--; i = canditer_next(ci); - oids[i - b->hseqbase] = i; + oids[gid++] = i; nils--; } } else { while (ncand > 0) { ncand--; i = canditer_next(ci); - if (is_oid_nil(oids[i - b->hseqbase])) { - oids[i - b->hseqbase] = i; + gid = gids[i - b->hseqbase] - min; + if (is_oid_nil(oids[gid])) { + oids[gid] = i; nils--; } } @@ -3366,12 +3366,11 @@ do_groupmin(oid *restrict oids, BAT *b, i = canditer_next(ci) - b->hseqbase; if (!skip_nils || (*atomcmp)(BUNtail(bi, i), nil) != 0) { - oids[i] = i + b->hseqbase; + oids[gid++] = i + b->hseqbase; nils--; } } } else { - gid = 0; /* in case gids == NULL */ while (ncand > 0) { ncand--; i = canditer_next(ci) - b->hseqbase; @@ -3413,7 +3412,7 @@ do_groupmax(oid *restrict oids, BAT *b, oid min, oid max, struct canditer *restrict ci, BUN ncand, bool skip_nils, bool gdense) { - oid gid; + oid gid = 0; BUN i, nils; int t; const void *nil; @@ -3466,16 +3465,17 @@ do_groupmax(oid *restrict oids, BAT *b, while (ncand > 0) { ncand--; i = canditer_next(ci); - oids[i - b->hseqbase] = i; + oids[gid++] = i; nils--; } } else { while (ncand > 0) { ncand--; i = canditer_next(ci); - if (is_oid_nil(oids[i - b->hseqbase])) + gid = gids[i - b->hseqbase] - min; + if (is_oid_nil(oids[gid])) nils--; - oids[i - b->hseqbase] = i; + oids[gid] = i; } } } @@ -3490,12 +3490,11 @@ do_groupmax(oid *restrict oids, BAT *b, i = canditer_next(ci) - b->hseqbase; if (!skip_nils || (*atomcmp)(BUNtail(bi, i), nil) != 0) { - oids[i] = i + b->hseqbase; + oids[gid++] = i + b->hseqbase; nils--; } } } else { - gid = 0; /* in case gids == NULL */ while (ncand > 0) { ncand--; i = canditer_next(ci) - b->hseqbase; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list