Changeset: 76f30a18ea67 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/76f30a18ea67
Modified Files:
gdk/gdk_aggr.c
sql/backends/monet5/bin_partition_by_slice.c
Branch: default
Log Message:
Fix some undefined behavior.
diffs (73 lines):
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -2357,6 +2357,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
o = canditer_next(&ci) - b->hseqbase;
if (ngrp > 1)
gid = (gids ? gids[o] : g->tseqbase + o) - min;
+ if (inout && cnts[gid] == 0)
+ avgs[gid] = 0;
if (is_bte_nil(vals[o])) {
if (!skip_nils) {
avgs[gid] = bte_nil;
@@ -2405,6 +2407,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
o = canditer_next(&ci) - b->hseqbase;
if (ngrp > 1)
gid = (gids ? gids[o] : g->tseqbase + o) - min;
+ if (inout && cnts[gid] == 0)
+ avgs[gid] = 0;
if (is_sht_nil(vals[o])) {
if (!skip_nils) {
avgs[gid] = sht_nil;
@@ -2453,6 +2457,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
o = canditer_next(&ci) - b->hseqbase;
if (ngrp > 1)
gid = (gids ? gids[o] : g->tseqbase + o) - min;
+ if (inout && cnts[gid] == 0)
+ avgs[gid] = 0;
if (is_int_nil(vals[o])) {
if (!skip_nils) {
avgs[gid] = int_nil;
@@ -2501,6 +2507,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
o = canditer_next(&ci) - b->hseqbase;
if (ngrp > 1)
gid = (gids ? gids[o] : g->tseqbase + o) - min;
+ if (inout && cnts[gid] == 0)
+ avgs[gid] = 0;
if (is_lng_nil(vals[o])) {
if (!skip_nils) {
avgs[gid] = lng_nil;
@@ -2550,6 +2558,8 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT
o = canditer_next(&ci) - b->hseqbase;
if (ngrp > 1)
gid = (gids ? gids[o] : g->tseqbase + o) - min;
+ if (inout && cnts[gid] == 0)
+ avgs[gid] = 0;
if (is_hge_nil(vals[o])) {
if (!skip_nils) {
avgs[gid] = hge_nil;
diff --git a/sql/backends/monet5/bin_partition_by_slice.c
b/sql/backends/monet5/bin_partition_by_slice.c
--- a/sql/backends/monet5/bin_partition_by_slice.c
+++ b/sql/backends/monet5/bin_partition_by_slice.c
@@ -68,7 +68,7 @@ exp_getcard(mvc *sql, sql_rel *rel, sql_
if (c) {
int de = mvc_is_duplicate_eliminated(sql, c);
- if (de && (((lng)1)<<(de*8)) < cnt)
+ if (de < 8 && (((lng)1)<<(de*8)) < cnt)
cnt = (((lng)1)<<(de*8));
}
}
@@ -112,10 +112,10 @@ rel_groupby_2_phases(mvc *sql, sql_rel *
break;
}
card *= lcard; /* TODO check for overflow */
+ if (card > 64*1024) /* TODO add tunable */
+ return false;
}
}
- if (card > 64*1024) /* TODO add tunable */
- return false;
for(node *n = rel->exps->h; n; n = n->next ) {
sql_exp *e = n->data;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]