Changeset: 19775df76ede for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=19775df76ede Modified Files: gdk/gdk_aggr.c sql/server/rel_rel.c sql/storage/store.c Branch: default Log Message:
Merge with Jun2016 branch.
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
@@ -1542,7 +1542,7 @@ BATgroupavg(BAT **bnp, BAT **cntsp, BAT
n++; \
} \
/* the sum fit, so now we can calculate the average */ \
- *avg = (dbl) sum / n; \
+ *avg = n > 0 ? (dbl) sum / n : dbl_nil; \
if (0) { \
overflow##TYPE: \
/* we get here if sum(x[0],...,x[i]) doesn't */ \
@@ -1551,6 +1551,9 @@ BATgroupavg(BAT **bnp, BAT **cntsp, BAT
/* the rest of the calculation is done */ \
/* according to the loop invariant described */ \
/* in the below loop */ \
+ /* note that n necessarily is > 0 (else no */ \
+ /* overflow possible) */ \
+ assert(n > 0); \
if (sum >= 0) { \
a = (TYPE) (sum / (lng_hge) n); /* this fits */
\
r = (BUN) (sum % (SBUN) n); \
@@ -1566,24 +1569,25 @@ BATgroupavg(BAT **bnp, BAT **cntsp, BAT
if (cand) \
--cand; \
\
- for (; i < end; i++) { \
+ for (;;) { \
/* loop invariant: */ \
/* a + r/n == average(x[0],...,x[n]); */ \
- /* 0 <= r < n (if n > 0) */ \
- /* or if n == 0: a == 0; r == 0 */ \
+ /* 0 <= r < n */ \
if (cand) { \
- if (i < *cand - b->hseqbase) \
- continue; \
- assert(i == *cand - b->hseqbase); \
- if (++cand == candend) \
- end = i + 1; \
+ if (cand == candend) \
+ break; \
+ i = *cand++ - b->hseqbase; \
+ } else { \
+ i = start++; \
} \
+ if (i >= end) \
+ break; \
x = ((const TYPE *) src)[i]; \
if (x == TYPE##_nil) \
continue; \
AVERAGE_ITER(TYPE, x, a, r, n); \
} \
- *avg = n > 0 ? a + (dbl) r / n : dbl_nil; \
+ *avg = a + (dbl) r / n; \
} \
} while (0)
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1074,6 +1074,12 @@ rel_or(mvc *sql, sql_rel *l, sql_rel *r,
rel_destroy(r);
append(nl, e);
l->exps = nl;
+ if (ll->op == l->op) {
+ list_merge(ll->exps,l->exps, (fdup)NULL);
+ l->l = NULL;
+ rel_destroy(l);
+ return ll;
+ }
return l;
}
l = rel_project(sql->sa, l, rel_projections(sql, l, NULL, 1, 1));
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
