Changeset: f1a38bed20d5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f1a38bed20d5 Modified Files: gdk/gdk_analytic.h gdk/gdk_analytic_func.c sql/backends/monet5/sql.c sql/backends/monet5/sql_rank.c sql/server/rel_select.c Branch: window-tunning Log Message:
Pass ordering information for FRAME_UNBOUNDED_TILL_CURRENT_ROW and FRAME_CURRENT_ROW_TILL_UNBOUNDED cases. Cleaned the rest diffs (truncated from 1404 to 300 lines): diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h --- a/gdk/gdk_analytic.h +++ b/gdk/gdk_analytic.h @@ -29,13 +29,13 @@ gdk_export gdk_return GDKanalyticalfirst gdk_export gdk_return GDKanalyticallast(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_export gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e, BAT *l, const void *restrict bound, int tp1, int tp2); -gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); -gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); -gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, bit ignore_nils, int tpe, int frame_type); -gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tp1, int tp2, int frame_type); -gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tp1, int tp2, int frame_type); -gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); -gdk_export gdk_return GDKanalyticalavginteger(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); +gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); +gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); +gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, bit ignore_nils, int tpe, int frame_type); +gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int tp2, int frame_type); +gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int tp2, int frame_type); +gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); +gdk_export gdk_return GDKanalyticalavginteger(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int frame_type); gdk_export gdk_return GDKanalytical_stddev_samp(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_export gdk_return GDKanalytical_stddev_pop(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c --- a/gdk/gdk_analytic_func.c +++ b/gdk/gdk_analytic_func.c @@ -790,10 +790,9 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p #define ANALYTICAL_MIN_MAX_CALC_FIXED_UNBOUNDED_TILL_CURRENT_ROW(TPE, MIN_MAX) \ do { \ for (; k < i;) { \ - TPE v = bp[k]; \ - TPE curval = v; \ j = k++; \ - while (k < i && bp[k] == v) { \ + TPE curval = bp[j]; \ + while (k < i && !op[k]) { \ if (!is_##TPE##_nil(bp[k])) { \ if (is_##TPE##_nil(curval)) \ curval = bp[k]; \ @@ -811,10 +810,9 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p #define ANALYTICAL_MIN_MAX_CALC_FIXED_CURRENT_ROW_TILL_UNBOUNDED(TPE, MIN_MAX) \ do { \ for (j = i - 1; j >= k; ) { \ - TPE v = bp[j]; \ - TPE curval = v; \ l = j--; \ - while (j >= k && bp[j] == v) { \ + TPE curval = bp[l]; \ + while (j >= k && !op[j]) { \ if (!is_##TPE##_nil(bp[j])) { \ if (is_##TPE##_nil(curval)) \ curval = bp[j]; \ @@ -883,15 +881,15 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p #define ANALYTICAL_MIN_MAX_CALC_VARSIZED_UNBOUNDED_TILL_CURRENT_ROW(GT_LT) \ do { \ for (; k < i;) { \ - void *next = BUNtail(bpi, k), *curval = next; \ j = k++; \ - while (k < i && atomcmp(BUNtail(bpi, k), next) == 0) { \ - void *nnext = BUNtail(bpi, k); \ - if (atomcmp(nnext, nil) != 0) { \ + void *curval = BUNtail(bpi, j); \ + while (k < i && !op[k]) { \ + void *next = BUNtail(bpi, k); \ + if (atomcmp(next, nil) != 0) { \ if (atomcmp(curval, nil) == 0) \ - curval = nnext; \ + curval = next; \ else \ - curval = atomcmp(nnext, curval) GT_LT 0 ? curval : nnext; \ + curval = atomcmp(next, curval) GT_LT 0 ? curval : next; \ } \ k++; \ } \ @@ -905,15 +903,15 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p #define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW_TILL_UNBOUNDED(GT_LT) \ do { \ for (j = i - 1; j >= k; ) { \ - void *next = BUNtail(bpi, j), *curval = next; \ l = j--; \ - while (j >= k && atomcmp(BUNtail(bpi, j), next) == 0) { \ - void *nnext = BUNtail(bpi, j); \ - if (atomcmp(nnext, nil) != 0) { \ + void *curval = BUNtail(bpi, l); \ + while (j >= k && !op[j]) { \ + void *next = BUNtail(bpi, j); \ + if (atomcmp(next, nil) != 0) { \ if (atomcmp(curval, nil) == 0) \ - curval = nnext; \ + curval = next; \ else \ - curval = atomcmp(nnext, curval) GT_LT 0 ? curval : nnext; \ + curval = atomcmp(next, curval) GT_LT 0 ? curval : next; \ } \ j--; \ } \ @@ -1035,12 +1033,12 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p #define ANALYTICAL_MIN_MAX(OP, MIN_MAX, GT_LT) \ gdk_return \ -GDKanalytical##OP(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tpe, int frame_type) \ +GDKanalytical##OP(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int frame_type) \ { \ bool has_nils = false; \ lng i = 0, j = 0, k = 0, l = 0, m = 0, cnt = (lng) BATcount(b); \ lng *restrict start = s ? (lng*)Tloc(s, 0) : NULL, *restrict end = e ? (lng*)Tloc(e, 0) : NULL; \ - bit *restrict np = p ? Tloc(p, 0) : NULL; \ + bit *restrict np = p ? Tloc(p, 0) : NULL, *restrict op = o ? Tloc(o, 0) : NULL; \ BATiter bpi = bat_iterator(b); \ const void *nil = ATOMnilptr(tpe); \ int (*atomcmp)(const void *, const void *) = ATOMcompare(tpe); \ @@ -1077,10 +1075,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) curval = 0; \ if (count_all) { \ for (; k < i;) { \ - TPE v = bp[k]; \ j = k++; \ curval++; \ - while (k < i && bp[k] == v) { \ + while (k < i && !op[k]) { \ curval++; \ k++; \ } \ @@ -1089,10 +1086,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } \ } else { \ for (; k < i;) { \ - TPE v = bp[k]; \ j = k++; \ - curval += !is_##TPE##_nil(v); \ - while (k < i && bp[k] == v) { \ + curval += !is_##TPE##_nil(bp[j]); \ + while (k < i && !op[k]) { \ curval += !is_##TPE##_nil(bp[k]); \ k++; \ } \ @@ -1107,10 +1103,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) curval = 0; \ if (count_all) { \ for (j = i - 1; j >= k; ) { \ - TPE v = bp[j]; \ l = j--; \ curval++; \ - while (j >= k && bp[j] == v) { \ + while (j >= k && !op[j]) { \ curval++; \ j--; \ } \ @@ -1120,10 +1115,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } \ } else { \ for (j = i - 1; j >= k; ) { \ - TPE v = bp[j]; \ l = j--; \ - curval += !is_##TPE##_nil(bp[j]); \ - while (j >= k && bp[j] == v) { \ + curval += !is_##TPE##_nil(bp[l]); \ + while (j >= k && !op[j]) { \ curval += !is_##TPE##_nil(bp[j]); \ j--; \ } \ @@ -1186,10 +1180,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) if (count_all) { \ if (isvarsized) { \ for (; k < i; ) { \ - const void *v = base + ((const var_t *) bheap)[k]; \ j = k++; \ curval++; \ - while (k < i && cmp(base + ((const var_t *) bheap)[k], v) == 0) { \ + while (k < i && !op[k]) { \ curval++; \ k++; \ } \ @@ -1198,10 +1191,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } \ } else { \ for (; k < i; ) { \ - const void *v = Tloc(b, k); \ j = k++; \ curval++; \ - while (k < i && cmp(Tloc(b, k), v) == 0) { \ + while (k < i && !op[k]) { \ curval++; \ k++; \ } \ @@ -1212,10 +1204,10 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } else { \ if (isvarsized) { \ for (; k < i; ) { \ - const void *v = base + ((const var_t *) bheap)[k]; \ j = k++; \ + const void *v = base + ((const var_t *) bheap)[j]; \ curval += cmp(v, nil) != 0; \ - while (k < i && cmp(base + ((const var_t *) bheap)[k], v) == 0) { \ + while (k < i && !op[k]) { \ curval += cmp(base + ((const var_t *) bheap)[k], nil) != 0; \ k++; \ } \ @@ -1224,11 +1216,11 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } \ } else { \ for (; k < i; ) { \ - const void *v = Tloc(b, k); \ j = k++; \ + const void *v = BUNtail(bpi, j); \ curval += cmp(v, nil) != 0; \ - while (k < i && cmp(Tloc(b, k), v) == 0) { \ - curval += cmp(Tloc(b, k), nil) != 0; \ + while (k < i && !op[k]) { \ + curval += cmp(BUNtail(bpi, k), nil) != 0; \ k++; \ } \ for (; j < k; j++) \ @@ -1244,10 +1236,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) if (count_all) { \ if (isvarsized) { \ for (j = i - 1; j >= k; ) { \ - const void *v = base + ((const var_t *) bheap)[j]; \ l = j--; \ curval++; \ - while (j >= k && cmp(base + ((const var_t *) bheap)[j], v) == 0) { \ + while (j >= k && !op[j]) { \ curval++; \ j--; \ } \ @@ -1257,10 +1248,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } \ } else { \ for (j = i - 1; j >= k; ) { \ - void *v = Tloc(b, j); \ l = j--; \ curval++; \ - while (j >= k && cmp(Tloc(b, j), v) == 0) { \ + while (j >= k && !op[j]) { \ curval++; \ j--; \ } \ @@ -1272,10 +1262,10 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } else { \ if (isvarsized) { \ for (j = i - 1; j >= k; ) { \ - const void *v = base + ((const var_t *) bheap)[j]; \ l = j--; \ + const void *v = base + ((const var_t *) bheap)[l]; \ curval += cmp(v, nil) != 0; \ - while (j >= k && cmp(base + ((const var_t *) bheap)[j], v) == 0) { \ + while (j >= k && !op[j]) { \ curval += cmp(base + ((const var_t *) bheap)[j], nil) != 0; \ j--; \ } \ @@ -1285,11 +1275,11 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } \ } else { \ for (j = i - 1; j >= k; ) { \ - void *v = Tloc(b, j); \ l = j--; \ + const void *v = Tloc(b, l); \ curval += cmp(v, nil) != 0; \ - while (j >= k && cmp(Tloc(b, j), v) == 0) { \ - curval += cmp(Tloc(b, j), nil) != 0; \ + while (j >= k && !op[j]) { \ + curval += cmp(BUNtail(bpi, j), nil) != 0; \ j--; \ } \ m = MAX(k, j); \ @@ -1312,7 +1302,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <) curval += cmp(nil, base + ((const var_t *) bheap)[j]) != 0; \ } else { \ for (; j < i; j++) \ - curval += cmp(Tloc(b, j), nil) != 0; \ + curval += cmp(BUNtail(bpi, j), nil) != 0; \ } \ } \ for (; k < i; k++) \ @@ -1330,7 +1320,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <) rb[k] = cmp(nil, base + ((const var_t *) bheap)[k]) != 0; \ } else { \ for (; k < i; k++) \ - rb[k] = cmp(Tloc(b, k), nil) != 0; \ + rb[k] = cmp(BUNtail(bpi, k), nil) != 0; \ } \ } \ } while (0) @@ -1356,7 +1346,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <) j = start[k]; \ l = end[k]; \ for (; j < l; j++) \ - curval += cmp(Tloc(b, j), nil) != 0; \ + curval += cmp(BUNtail(bpi, j), nil) != 0; \ rb[k] = curval; \ curval = 0; \ } \ @@ -1423,16 +1413,17 @@ ANALYTICAL_MIN_MAX(max, MAX, <) } while (0) gdk_return -GDKanalyticalcount(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, bit ignore_nils, int tpe, int frame_type) +GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, bit ignore_nils, int tpe, int frame_type) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list