Changeset: d7eb5e3954ef for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d7eb5e3954ef Modified Files: clients/Tests/exports.stable.out gdk/ChangeLog gdk/gdk.h gdk/gdk_aggr.c gdk/gdk_batop.c gdk/gdk_bbp.c gdk/gdk_cross.c gdk/gdk_imprints.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_select.c gdk/gdk_storage.c gdk/gdk_unique.c monetdb5/mal/mal_authorize.c monetdb5/modules/kernel/algebra.c monetdb5/modules/mal/groupby.c monetdb5/modules/mal/pcre.c monetdb5/modules/mal/tablet.c monetdb5/modules/mal/tokenizer.c sql/backends/monet5/sql.c sql/backends/monet5/sql_statistics.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c Branch: embedded Log Message:
merge again diffs (truncated from 2051 to 300 lines): 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 @@ -23,6 +23,7 @@ gdk_return BATappend(BAT *b, BAT *c, bit void BATassertProps(BAT *b); atomDesc BATatoms[]; BAT *BATattach(int tt, const char *heapfile, int role); +gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, int li, int hi, BUN estimate); BAT *BATcalcabsolute(BAT *b, BAT *s); BAT *BATcalcadd(BAT *b1, BAT *b2, BAT *s, int tp, int abort_on_error); BAT *BATcalcaddcst(BAT *b, const ValRecord *v, BAT *s, int tp, int abort_on_error); @@ -107,11 +108,11 @@ BAT *BATconstant(int tt, const void *val BAT *BATconvert(BAT *b, BAT *s, int tp, int abort_on_error); BAT *BATcopy(BAT *b, int ht, int tt, int writeable, int role); BUN BATcount_no_nil(BAT *b); -gdk_return BATcross1(BAT **r1p, BAT **r2p, BAT *l, BAT *r); gdk_return BATdel(BAT *b, BAT *c, bit force); BAT *BATdelta(BAT *b); void BATderiveHeadProps(BAT *b, int expensive); void BATderiveProps(BAT *b, int expensive); +BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); 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, int asc, int distinct); @@ -137,7 +138,9 @@ gdk_return BAThash(BAT *b, BUN masksize) gdk_return BATimprints(BAT *b); gdk_return BATins(BAT *b, BAT *c, bit force); BAT *BATintersectcand(BAT *a, BAT *b); +gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); gdk_return BATkey(BAT *b, int onoff); +gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); BAT *BATmark(BAT *b, oid base); BAT *BATmark_grp(BAT *b, BAT *g, const oid *base); void *BATmax(BAT *b, void *aggr); @@ -151,38 +154,33 @@ int BATname(BAT *b, const char *nme); BAT *BATnew(int hdtype, int tltype, BUN capacity, int role) __attribute__((warn_unused_result)); int BATordered(BAT *b); int BATordered_rev(BAT *b); +gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); BAT *BATprev(BAT *b); gdk_return BATprint(BAT *b); gdk_return BATprintcolumns(stream *s, int argc, BAT *argv[]); gdk_return BATprintf(stream *f, BAT *b); gdk_return BATprod(void *res, int tp, BAT *b, BAT *s, int skip_nils, int abort_on_error, int nil_if_empty); BAT *BATproject(BAT *l, BAT *r); +gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT *sl, BAT *sr, int li, int hi, BUN estimate); gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force); void BATroles(BAT *b, const char *hnme, const char *tnme); BAT *BATsample(BAT *b, BUN n); gdk_return BATsave(BAT *b); +BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int hi, int anti); +gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); void BATseqbase(BAT *b, oid o); gdk_return BATsetaccess(BAT *b, int mode); void BATsetcapacity(BAT *b, BUN cnt); void BATsetcount(BAT *b, BUN cnt); void BATsetprop(BAT *b, int idx, int type, void *v); BAT *BATslice(BAT *b, BUN low, BUN high); -gdk_return BATsubbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, int li, int hi, BUN estimate); gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr); -BAT *BATsubdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_return BATsubjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_return BATsubleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_return BATsubouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_return BATsubprojection(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_return BATsubrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT *sl, BAT *sr, int li, int hi, BUN estimate); -BAT *BATsubselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int hi, int anti); -gdk_return BATsubsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); gdk_return BATsubsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o, BAT *g, int reverse, int stable); -gdk_return BATsubthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, int nil_matches, BUN estimate); -BAT *BATsubunique(BAT *b, BAT *s); gdk_return BATsum(void *res, int tp, BAT *b, BAT *s, int skip_nils, int abort_on_error, int nil_if_empty); -BAT *BATthetasubselect(BAT *b, BAT *s, const void *val, const char *op); +gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, int nil_matches, BUN estimate); +BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op); void BATundo(BAT *b); +BAT *BATunique(BAT *b, BAT *s); BBPrec *BBP[N_BBPINIT]; void BBPaddfarm(const char *dirname, int rolemask); void BBPclear(bat bid); diff --git a/gdk/ChangeLog b/gdk/ChangeLog --- a/gdk/ChangeLog +++ b/gdk/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Thu Dec 3 2015 Sjoerd Mullender <sjo...@acm.org> +- Removed "sub" from the names of the function BATsubselect, + BATthetasubselect, BATsubcross, BATsubleftjoin, BATsubouterjoin, + BATsubthetajoin, BATsubsemijoin, BATsubdiff, BATsubjoin, BATsubbandjoin, + BATsubrangejoin, and BATsubunique. +- Removed BATsubleftfetchjoin: it was not used. +- Removed BATcross1. Use BATsubcross instead. + * Thu Oct 8 2015 Sjoerd Mullender <sjo...@acm.org> - Removed all versions of the SORTloop macro. diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -3028,28 +3028,26 @@ gdk_export void BATsetprop(BAT *b, int i #define JOIN_BAND 3 #define JOIN_NE (-3) -gdk_export BAT *BATsubselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int hi, int anti); -gdk_export BAT *BATthetasubselect(BAT *b, BAT *s, const void *val, const char *op); +gdk_export BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int hi, int anti); +gdk_export BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op); gdk_export BAT *BATconstant(int tt, const void *val, BUN cnt, int role); gdk_export BAT *BATconst(BAT *l, int tt, const void *val, int role); -gdk_export gdk_return BATcross1(BAT **r1p, BAT **r2p, BAT *l, BAT *r); gdk_export gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr); -gdk_export gdk_return BATsubleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_export gdk_return BATsubouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_export gdk_return BATsubthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, int nil_matches, BUN estimate); -gdk_export gdk_return BATsubsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_export BAT *BATsubdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_export gdk_return BATsubjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_export gdk_return BATsubprojection(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -gdk_export gdk_return BATsubbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, int li, int hi, BUN estimate); -gdk_export gdk_return BATsubrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT *sl, BAT *sr, int li, int hi, BUN estimate); +gdk_export gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); +gdk_export gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); +gdk_export gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, int nil_matches, BUN estimate); +gdk_export gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); +gdk_export BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); +gdk_export gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); +gdk_export gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, int li, int hi, BUN estimate); +gdk_export gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT *sl, BAT *sr, int li, int hi, BUN estimate); gdk_export BAT *BATproject(BAT *l, BAT *r); gdk_export BAT *BATslice(BAT *b, BUN low, BUN high); -gdk_export BAT *BATsubunique(BAT *b, BAT *s); +gdk_export BAT *BATunique(BAT *b, BAT *s); gdk_export BAT *BATmergecand(BAT *a, BAT *b); gdk_export BAT *BATintersectcand(BAT *a, BAT *b); diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -29,7 +29,7 @@ * The tail values of s refer to the head of b and g. Only entries at * the specified ids are taken into account for the grouped * aggregates. All other values are ignored. s is compatible with - * the result of BATsubselect(). + * the result of BATselect(). * * If e is not specified, we need to do an extra scan over g to find * out the range of the group ids that are used. e is defined in such diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -773,8 +773,6 @@ BATappend(BAT *b, BAT *n, bit force) r++; } } - if (b->hseqbase != oid_nil) - b->hrevsorted = 0; } else { oid o = MAXoid(b); BATiter ni = bat_iterator(n); @@ -785,7 +783,6 @@ BATappend(BAT *b, BAT *n, bit force) o++; r++; } - b->hrevsorted = 0; } } else { BUN p, q; @@ -809,7 +806,6 @@ BATappend(BAT *b, BAT *n, bit force) i++; } } - b->hrevsorted = 0; } else { oid on = oid_nil; @@ -867,6 +863,8 @@ BATappend(BAT *b, BAT *n, bit force) b->tdense = b->tsorted = b->trevsorted = 0; } } + if (b->hseqbase != oid_nil) + b->hrevsorted = BATcount(b) <= 1; b->H->nonil &= n->H->nonil; b->T->nonil &= n->T->nonil; return GDK_SUCCEED; diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -808,12 +808,13 @@ vheapinit(COLrec *col, const char *buf, return n; } -static void +static int BBPreadEntries(FILE *fp, int *min_stamp, int *max_stamp, int oidsize, int bbpversion) { bat bid = 0; char buf[4096]; BATstore *bs; + int needcommit = 0; /* read the BBP.dir and insert the BATs into the BBP */ while (fgets(buf, sizeof(buf), fp) != NULL) { @@ -899,6 +900,21 @@ BBPreadEntries(FILE *fp, int *min_stamp, nread += vheapinit(&bs->H, buf + nread, Hhashash, bid); nread += vheapinit(&bs->T, buf + nread, Thashash, bid); + if (bs->S.count > 1) { + /* fix result of bug in BATappend not clearing + * revsorted property */ + if (bs->H.type == TYPE_void && bs->H.seq != oid_nil && bs->H.revsorted) { + bs->H.revsorted = 0; + bs->S.descdirty = 1; + needcommit = 1; + } + if (bs->T.type == TYPE_void && bs->T.seq != oid_nil && bs->T.revsorted) { + bs->T.revsorted = 0; + bs->S.descdirty = 1; + needcommit = 1; + } + } + if (buf[nread] != '\n' && buf[nread] != ' ') GDKfatal("BBPinit: invalid format for BBP.dir\n%s", buf); if (buf[nread] == ' ') @@ -931,6 +947,7 @@ BBPreadEntries(FILE *fp, int *min_stamp, BBP_refs(bid) = 0; BBP_lrefs(bid) = 1; /* any BAT we encounter here is persistent, so has a logical reference */ } + return needcommit; } #ifdef HAVE_HGE @@ -1056,6 +1073,7 @@ BBPinit(void) oid BBPoid; str bbpdirstr = GDKfilepath(0, BATDIR, "BBP", "dir"); str backupbbpdirstr = GDKfilepath(0, BAKDIR, "BBP", "dir"); + int needcommit; #ifdef NEED_MT_LOCK_INIT MT_lock_init(&GDKunloadLock, "GDKunloadLock"); @@ -1106,7 +1124,7 @@ BBPinit(void) BBPextend(0, FALSE); /* allocate BBP records */ ATOMIC_SET(BBPsize, 1, BBPsizeLock); - BBPreadEntries(fp, &min_stamp, &max_stamp, oidsize, bbpversion); + needcommit = BBPreadEntries(fp, &min_stamp, &max_stamp, oidsize, bbpversion); fclose(fp); /* normalize saved LRU stamps */ @@ -1135,7 +1153,7 @@ BBPinit(void) #else (void) oidsize; #endif - if (bbpversion < GDKLIBRARY) + if (bbpversion < GDKLIBRARY || needcommit) TMcommit(); GDKfree(bbpdirstr); GDKfree(backupbbpdirstr); @@ -2501,6 +2519,7 @@ getBBPdescriptor(bat i, int lock) /* clearing bits can be done without the lock */ BBP_status_off(j, BBPLOADING, "BBPdescriptor"); + CHECKDEBUG BATassertProps(b); } return b; } diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c --- a/gdk/gdk_cross.c +++ b/gdk/gdk_cross.c @@ -10,7 +10,7 @@ #include "gdk.h" #include "gdk_private.h" -gdk_return +static gdk_return BATcross1(BAT **r1p, BAT **r2p, BAT *l, BAT *r) { BAT *bn1, *bn2; @@ -57,6 +57,10 @@ BATcross1(BAT **r1p, BAT **r2p, BAT *l, return GDK_SUCCEED; } +/* Calculate a cross product between bats l and r with optional + * candidate lists sl for l and sr for r. + * The result is two bats r1 and r2 which contain the OID (head + * values) of the input bats l and r. */ gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr) { diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c --- a/gdk/gdk_imprints.c +++ b/gdk/gdk_imprints.c @@ -718,7 +718,7 @@ BATimprints(BAT *b) GDKfree(imprints); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list