Changeset: 7e8b14ac9c2c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7e8b14ac9c2c Modified Files: clients/Tests/exports.stable.out gdk/gdk_aggr.c gdk/gdk_group.c monetdb5/modules/mal/pcre.c Branch: pushcands Log Message:
Merged with default diffs (truncated from 1189 to 300 lines): diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ # ChangeLog file for devel # This file is updated with Maddlog +* Thu Apr 15 2021 svetlin <[email protected]> +- preserve in query comments + diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -122,6 +122,7 @@ gdk_return BATextend(BAT *b, BUN newcap) void BATfakeCommit(BAT *b); gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps, BUN n, bool asc, bool nilslast, bool distinct) __attribute__((__warn_unused_result__)); restrict_t BATgetaccess(BAT *b); +ValPtr BATgetprop(BAT *b, enum prop_t idx); gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__)); const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid *maxp, BUN *ngrpp, struct canditer *ci, BUN *ncand); gdk_return BATgroupavg(BAT **bnp, BAT **cntsp, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils, bool abort_on_error, int scale); diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -2124,6 +2124,7 @@ enum prop_t { GDK_NUNIQUE, /* number of unique values */ GDK_UNIQUE_ESTIMATE, /* estimate of number of distinct values */ }; +gdk_export ValPtr BATgetprop(BAT *b, enum prop_t idx); /* * @- BAT relational operators diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -82,13 +82,13 @@ BATgroupaggrinit(BAT *b, BAT *g, BAT *e, ngrp = 1; } else if (e == NULL) { /* we need to find out the min and max of g */ - PROPrec *prop; + const ValRecord *prop; prop = BATgetprop(g, GDK_MAX_VALUE); if (prop) { - assert(prop->v.vtype == TYPE_oid); + assert(prop->vtype == TYPE_oid); min = 0; /* just assume it starts at 0 */ - max = prop->v.val.oval; + max = prop->val.oval; } else { min = oid_nil; /* note that oid_nil > 0! (unsigned) */ max = 0; @@ -3517,7 +3517,7 @@ BATgroupmin(BAT *b, BAT *g, BAT *e, BAT void * BATmin_skipnil(BAT *b, void *aggr, bit skipnil) { - PROPrec *prop; + const ValRecord *prop; const void *res; size_t s; BATiter bi; @@ -3534,7 +3534,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s if (BATcount(b) == 0) { res = ATOMnilptr(b->ttype); } else if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL) { - res = VALptr(&prop->v); + res = VALptr(prop); } else { oid pos; BAT *pb = NULL; @@ -3631,7 +3631,7 @@ BATgroupmax(BAT *b, BAT *g, BAT *e, BAT void * BATmax_skipnil(BAT *b, void *aggr, bit skipnil) { - PROPrec *prop; + const ValRecord *prop; const void *res; size_t s; BATiter bi; @@ -3646,7 +3646,7 @@ BATmax_skipnil(BAT *b, void *aggr, bit s if (BATcount(b) == 0) { res = ATOMnilptr(b->ttype); } else if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) { - res = VALptr(&prop->v); + res = VALptr(prop); } else { oid pos; BAT *pb = NULL; 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 @@ -44,8 +44,7 @@ GDKrebuild_segment_tree(oid ncount, oid #define NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST, VALIDATION) \ do { \ - TPE j = 0; \ - UPCAST ncnt = (UPCAST) (i - k); \ + UPCAST j = 0, ncnt = (UPCAST) (i - k); \ for (; k < i; k++, j++) { \ TPE val = NEXT_VALUE; \ if (is_##TPE##_nil(val)) { \ @@ -55,7 +54,7 @@ GDKrebuild_segment_tree(oid ncount, oid UPCAST nval = (UPCAST) LNG_HGE; \ VALIDATION /* validation must come after null check */ \ if (nval >= ncnt) { \ - rb[k] = j + 1; \ + rb[k] = (TPE)(j + 1); \ } else { \ UPCAST bsize = ncnt / nval; \ UPCAST top = ncnt - nval * bsize; \ @@ -69,30 +68,35 @@ GDKrebuild_segment_tree(oid ncount, oid } \ } while (0) -#define ANALYTICAL_NTILE_IMP(TPE, NEXT_VALUE, LNG_HGE, UPCAST, VALIDATION) \ +#define ANALYTICAL_NTILE(IMP, TPE, NEXT_VALUE, LNG_HGE, UPCAST, VALIDATION) \ do { \ TPE *restrict rb = (TPE*)Tloc(r, 0); \ if (p) { \ for (; i < cnt; i++) { \ - if (np[i]) \ - NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST, VALIDATION);\ - } \ - } \ - i = cnt; \ - NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST, VALIDATION); \ + if (np[i]) { \ +ntile##IMP##TPE: \ + NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST, VALIDATION); \ + } \ + } \ + } \ + if (!last) { \ + last = true; \ + i = cnt; \ + goto ntile##IMP##TPE; \ + } \ } while (0) #define ANALYTICAL_NTILE_SINGLE_IMP(TPE, LNG_HGE, UPCAST) \ do { \ TPE ntl = *(TPE*) ntile; \ if (!is_##TPE##_nil(ntl) && ntl < 0) goto invalidntile; \ - ANALYTICAL_NTILE_IMP(TPE, ntl, LNG_HGE, UPCAST, ;); \ + ANALYTICAL_NTILE(SINGLE, TPE, ntl, LNG_HGE, UPCAST, ;); \ } while (0) #define ANALYTICAL_NTILE_MULTI_IMP(TPE, LNG_HGE, UPCAST) \ do { \ TPE *restrict nn = (TPE*)Tloc(n, 0); \ - ANALYTICAL_NTILE_IMP(TPE, nn[k], LNG_HGE, UPCAST, if (val < 0) goto invalidntile;); \ + ANALYTICAL_NTILE(MULTI, TPE, nn[k], LNG_HGE, UPCAST, if (val < 0) goto invalidntile;); \ } while (0) gdk_return @@ -100,7 +104,7 @@ GDKanalyticalntile(BAT *r, BAT *b, BAT * { lng i = 0, k = 0, cnt = (lng) BATcount(b); bit *restrict np = p ? Tloc(p, 0) : NULL; - bool has_nils = false; + bool has_nils = false, last = false; assert((n && !ntile) || (!n && ntile)); diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1101,7 +1101,7 @@ setcolprops(BAT *b, const void *x) } return; } else if (ATOMlinear(b->ttype)) { - PROPrec *prop; + const ValRecord *prop; bi = bat_iterator(b); pos = BUNlast(b); @@ -1132,7 +1132,7 @@ setcolprops(BAT *b, const void *x) } } else if (!isnil && (prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL && - ATOMcmp(b->ttype, VALptr(&prop->v), x) < 0) { + ATOMcmp(b->ttype, VALptr(prop), x) < 0) { BATsetprop(b, GDK_MAX_VALUE, b->ttype, x); BATsetprop(b, GDK_MAX_POS, TYPE_oid, &(oid){BATcount(b)}); } @@ -1148,7 +1148,7 @@ setcolprops(BAT *b, const void *x) * smallest non-nil so far */ if (!b->tnonil && !isnil && (prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL && - ATOMcmp(b->ttype, VALptr(&prop->v), x) > 0) { + ATOMcmp(b->ttype, VALptr(prop), x) > 0) { BATsetprop(b, GDK_MIN_VALUE, b->ttype, x); BATsetprop(b, GDK_MIN_POS, TYPE_oid, &(oid){BATcount(b)}); } @@ -1159,7 +1159,7 @@ setcolprops(BAT *b, const void *x) } } else if (!isnil && (prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL && - ATOMcmp(b->ttype, VALptr(&prop->v), x) > 0) { + ATOMcmp(b->ttype, VALptr(prop), x) > 0) { BATsetprop(b, GDK_MIN_VALUE, b->ttype, x); BATsetprop(b, GDK_MIN_POS, TYPE_oid, &(oid){BATcount(b)}); } @@ -1274,7 +1274,7 @@ BUNdelete(BAT *b, oid o) BUN p; BATiter bi = bat_iterator(b); const void *val; - PROPrec *prop; + const ValRecord *prop; assert(!is_oid_nil(b->hseqbase) || BATcount(b) == 0); if (o < b->hseqbase || o >= b->hseqbase + BATcount(b)) { @@ -1292,12 +1292,12 @@ BUNdelete(BAT *b, oid o) if (ATOMlinear(b->ttype) && ATOMcmp(b->ttype, ATOMnilptr(b->ttype), val) != 0) { if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL - && ATOMcmp(b->ttype, VALptr(&prop->v), val) >= 0) { + && ATOMcmp(b->ttype, VALptr(prop), val) >= 0) { BATrmprop(b, GDK_MAX_VALUE); BATrmprop(b, GDK_MAX_POS); } if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL - && ATOMcmp(b->ttype, VALptr(&prop->v), val) <= 0) { + && ATOMcmp(b->ttype, VALptr(prop), val) <= 0) { BATrmprop(b, GDK_MIN_VALUE); BATrmprop(b, GDK_MIN_POS); } @@ -1397,17 +1397,17 @@ BUNinplacemulti(BAT *b, const oid *posit } HASHdelete(b, p, val); /* first delete old value from hash */ if (b->ttype != TYPE_void && ATOMlinear(b->ttype)) { - PROPrec *prop; + const ValRecord *prop; if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) { if (ATOMcmp(b->ttype, t, ATOMnilptr(b->ttype)) != 0 && - ATOMcmp(b->ttype, VALptr(&prop->v), t) < 0) { + ATOMcmp(b->ttype, VALptr(prop), t) < 0) { /* new value is larger than previous * largest */ BATsetprop(b, GDK_MAX_VALUE, b->ttype, t); BATsetprop(b, GDK_MAX_POS, TYPE_oid, &(oid){p}); } else if (ATOMcmp(b->ttype, t, val) != 0 && - ATOMcmp(b->ttype, VALptr(&prop->v), val) == 0) { + ATOMcmp(b->ttype, VALptr(prop), val) == 0) { /* old value is equal to largest and * new value is smaller (see above), * so we don't know anymore which is @@ -1418,13 +1418,13 @@ BUNinplacemulti(BAT *b, const oid *posit } if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL) { if (ATOMcmp(b->ttype, t, ATOMnilptr(b->ttype)) != 0 && - ATOMcmp(b->ttype, VALptr(&prop->v), t) > 0) { + ATOMcmp(b->ttype, VALptr(prop), t) > 0) { /* new value is smaller than previous * smallest */ BATsetprop(b, GDK_MIN_VALUE, b->ttype, t); BATsetprop(b, GDK_MIN_POS, TYPE_oid, &(oid){p}); } else if (ATOMcmp(b->ttype, t, val) != 0 && - ATOMcmp(b->ttype, VALptr(&prop->v), val) <= 0) { + ATOMcmp(b->ttype, VALptr(prop), val) <= 0) { /* old value is equal to smallest and * new value is larger (see above), so * we don't know anymore which is the @@ -2516,29 +2516,29 @@ BATassertProps(BAT *b) } PROPDEBUG { /* only do a scan if property checking is requested */ - PROPrec *prop; + const ValRecord *prop; const void *maxval = NULL; const void *minval = NULL; bool seenmax = false, seenmin = false; bool seennil = false; if ((prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) - maxval = VALptr(&prop->v); + maxval = VALptr(prop); if ((prop = BATgetprop(b, GDK_MIN_VALUE)) != NULL) - minval = VALptr(&prop->v); + minval = VALptr(prop); if ((prop = BATgetprop(b, GDK_MAX_POS)) != NULL) { if (maxval) { - assert(prop->v.vtype == TYPE_oid); - assert(prop->v.val.oval < b->batCount); - valp = BUNtail(bi, prop->v.val.oval); + assert(prop->vtype == TYPE_oid); + assert(prop->val.oval < b->batCount); + valp = BUNtail(bi, prop->val.oval); assert(cmpf(maxval, valp) == 0); } } if ((prop = BATgetprop(b, GDK_MIN_POS)) != NULL) { if (minval) { - assert(prop->v.vtype == TYPE_oid); - assert(prop->v.val.oval < b->batCount); - valp = BUNtail(bi, prop->v.val.oval); + assert(prop->vtype == TYPE_oid); + assert(prop->val.oval < b->batCount); + valp = BUNtail(bi, prop->val.oval); _______________________________________________ checkin-list mailing list [email protected] https://www.monetdb.org/mailman/listinfo/checkin-list
