Changeset: 48c0efcc0345 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/48c0efcc0345 Modified Files: clients/Tests/exports.stable.out gdk/gdk_system.c Branch: default Log Message:
Merged with Jul2021 diffs (truncated from 2910 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 @@ -541,8 +541,8 @@ gdk_return log_bat_transient(logger *lg, gdk_return log_constant(logger *lg, int type, ptr val, log_id id, lng offset, lng cnt); gdk_return log_delta(logger *lg, BAT *uid, BAT *uval, log_id id); gdk_return log_sequence(logger *lg, int seq, lng id); -gdk_return log_tend(logger *lg); -gdk_return log_tstart(logger *lg, ulng commit_ts, bool flush); +gdk_return log_tend(logger *lg, ulng commit_ts); +gdk_return log_tstart(logger *lg, bool flush); gdk_return logger_activate(logger *lg); lng logger_changes(logger *lg); logger *logger_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata); diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -809,12 +809,12 @@ COLcopy(BAT *b, int tt, bool writable, r /* first try case (1); create a view, possibly with different * atom-types */ - if (role == b->batRole && + if (!writable && + role == b->batRole && b->batRestricted == BAT_READ && ATOMstorage(b->ttype) != TYPE_msk && /* no view on TYPE_msk */ (!VIEWtparent(b) || - BBP_cache(VIEWtparent(b))->batRestricted == BAT_READ) && - !writable) { + BBP_cache(VIEWtparent(b))->batRestricted == BAT_READ)) { bn = VIEWcreate(b->hseqbase, b); if (bn == NULL) return NULL; @@ -875,8 +875,8 @@ COLcopy(BAT *b, int tt, bool writable, r strconcat_len(thp.filename, sizeof(thp.filename), BBP_physical(bn->batCacheid), ".theap", NULL); - if ((b->ttype && HEAPcopy(&bthp, b->theap) != GDK_SUCCEED) || - (bn->tvheap && HEAPcopy(&thp, b->tvheap) != GDK_SUCCEED)) { + if ((b->ttype && HEAPcopy(&bthp, b->theap, b->tbaseoff << b->tshift) != GDK_SUCCEED) || + (bn->tvheap && HEAPcopy(&thp, b->tvheap, 0) != GDK_SUCCEED)) { HEAPfree(&thp, true); HEAPfree(&bthp, true); BBPreclaim(bn); diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -32,7 +32,7 @@ unshare_varsized_heap(BAT *b) h->farmid = BBPselectfarm(b->batRole, TYPE_str, varheap); strconcat_len(h->filename, sizeof(h->filename), BBP_physical(b->batCacheid), ".theap", NULL); - if (HEAPcopy(h, b->tvheap) != GDK_SUCCEED) { + if (HEAPcopy(h, b->tvheap, 0) != GDK_SUCCEED) { HEAPfree(h, true); GDKfree(h); return GDK_FAIL; @@ -496,7 +496,7 @@ append_varsized_bat(BAT *b, BAT *n, stru h->farmid = BBPselectfarm(b->batRole, b->ttype, varheap); strconcat_len(h->filename, sizeof(h->filename), BBP_physical(b->batCacheid), ".theap", NULL); - if (HEAPcopy(h, b->tvheap) != GDK_SUCCEED) { + if (HEAPcopy(h, b->tvheap, 0) != GDK_SUCCEED) { HEAPfree(h, true); GDKfree(h); return GDK_FAIL; diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c --- a/gdk/gdk_heap.c +++ b/gdk/gdk_heap.c @@ -651,11 +651,13 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c * dst->filename (or NULL), which might be used in HEAPalloc(). */ gdk_return -HEAPcopy(Heap *dst, Heap *src) +HEAPcopy(Heap *dst, Heap *src, size_t offset) { - if (HEAPalloc(dst, src->size, 1, 1) == GDK_SUCCEED) { - dst->free = src->free; - memcpy(dst->base, src->base, src->free); + if (offset > src->free) + offset = src->free; + if (HEAPalloc(dst, src->free - offset, 1, 1) == GDK_SUCCEED) { + dst->free = src->free - offset; + memcpy(dst->base, src->base + offset, src->free - offset); dst->hashash = src->hashash; dst->cleanhash = src->cleanhash; dst->dirty = true; diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1072,14 +1072,12 @@ logger_read_transaction(logger *lg) case LOG_START: if (l.id > lg->tid) lg->tid = l.id; - lng trans_id; - if (!mnstr_readLng(lg->input_log, &trans_id) || - (tr = tr_create(tr, l.id)) == NULL) { + if ((tr = tr_create(tr, l.id)) == NULL) { err = LOG_ERR; break; } if (lg->debug & 1) - fprintf(stderr, "#logger tstart %d-" LLFMT "\n", tr->tid, trans_id); + fprintf(stderr, "#logger tstart %d\n", tr->tid); break; case LOG_END: if (tr == NULL) @@ -2537,7 +2535,7 @@ pre_allocate(logger *lg) } gdk_return -log_tend(logger *lg) +log_tend(logger *lg, ulng commit_ts) { logformat l; gdk_return res = GDK_SUCCEED; @@ -2552,6 +2550,11 @@ log_tend(logger *lg) return logger_commit(lg); } + if (lg->current) { + lg->current->last_tid = lg->tid; + lg->current->last_ts = commit_ts; + } + if (LOG_DISABLED(lg)) { lg->end++; return GDK_SUCCEED; @@ -2727,7 +2730,7 @@ logger_find_bat(logger *lg, log_id id) gdk_return -log_tstart(logger *lg, ulng commit_ts, bool flushnow) +log_tstart(logger *lg, bool flushnow) { logformat l; @@ -2738,13 +2741,9 @@ log_tstart(logger *lg, ulng commit_ts, b if (logger_open_output(lg) != GDK_SUCCEED) return GDK_FAIL; while (lg->saved_id+1 < lg->id) - logger_flush(lg, commit_ts); + logger_flush(lg, (1ULL<<63)); lg->flushnow = flushnow; } - if (lg->current) { - lg->current->last_tid = lg->tid+1; - lg->current->last_ts = commit_ts; - } if (LOG_DISABLED(lg)) { lg->end++; @@ -2756,8 +2755,7 @@ log_tstart(logger *lg, ulng commit_ts, b if (lg->debug & 1) fprintf(stderr, "#log_tstart %d\n", lg->tid); - if (log_write_format(lg, &l) != GDK_SUCCEED || - !mnstr_writeLng(lg->output_log, commit_ts)) + if (log_write_format(lg, &l) != GDK_SUCCEED) return GDK_FAIL; return GDK_SUCCEED; } diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h --- a/gdk/gdk_logger.h +++ b/gdk/gdk_logger.h @@ -68,8 +68,8 @@ gdk_export gdk_return log_delta(logger * /* mark end of batgroup insert or clear */ //gdk_export gdk_return log_batgroup_end(logger *lg, oid id); -gdk_export gdk_return log_tstart(logger *lg, ulng commit_ts, bool flush); -gdk_export gdk_return log_tend(logger *lg); +gdk_export gdk_return log_tstart(logger *lg, bool flush); +gdk_export gdk_return log_tend(logger *lg, ulng commit_ts); gdk_export gdk_return log_sequence(logger *lg, int seq, lng id); gdk_export log_bid logger_find_bat(logger *lg, log_id id); diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -184,7 +184,7 @@ gdk_return HASHnew(Hash *h, int tpe, BUN gdk_return HEAPalloc(Heap *h, size_t nitems, size_t itemsize, size_t itemsizemmap) __attribute__((__warn_unused_result__)) __attribute__((__visibility__("hidden"))); -gdk_return HEAPcopy(Heap *dst, Heap *src) +gdk_return HEAPcopy(Heap *dst, Heap *src, size_t offset) __attribute__((__warn_unused_result__)) __attribute__((__visibility__("hidden"))); gdk_return HEAPdelete(Heap *h, const char *o, const char *ext) diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c --- a/gdk/gdk_project.c +++ b/gdk/gdk_project.c @@ -747,7 +747,7 @@ BATproject2(BAT *restrict l, BAT *restri sizeof(bn->tvheap->filename), BBP_physical(bn->batCacheid), ".theap", NULL); - if (HEAPcopy(bn->tvheap, r1->tvheap) != GDK_SUCCEED) + if (HEAPcopy(bn->tvheap, r1->tvheap, 0) != GDK_SUCCEED) goto bailout; } bn->ttype = r1->ttype; diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -405,6 +405,8 @@ join_threads(void) bool waited; struct winthread *self = TlsGetValue(threadslot); + if (!self) + return; EnterCriticalSection(&winthread_cs); do { waited = false; diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c --- a/gdk/gdk_tracer.c +++ b/gdk/gdk_tracer.c @@ -280,7 +280,14 @@ gdk_return GDKtracer_stop(void) { set_level_for_layer(MDB_ALL, DEFAULT_LOG_LEVEL); - return GDKtracer_flush_buffer(); + if (active_tracer) { + if (active_tracer != stderr) + fclose(active_tracer); + else + fflush(active_tracer); + active_tracer = NULL; + } + return GDK_SUCCEED; } gdk_return diff --git a/monetdb5/modules/kernel/algebra.c b/monetdb5/modules/kernel/algebra.c --- a/monetdb5/modules/kernel/algebra.c +++ b/monetdb5/modules/kernel/algebra.c @@ -786,29 +786,19 @@ ALGcrossproduct(bat *l, bat *r, const ba BAT *sl = NULL, *sr = NULL; gdk_return ret; - if ((L = BATdescriptor(*left)) == NULL) { + if ((L = BBPquickdesc(*left, false)) == NULL) throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } - if ((R = BATdescriptor(*right)) == NULL) { - BBPunfix(L->batCacheid); + if ((R = BBPquickdesc(*right, false)) == NULL) throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } - if (slid && !is_bat_nil(*slid) && (sl = BATdescriptor(*slid)) == NULL) { - BBPunfix(L->batCacheid); - BBPunfix(R->batCacheid); + if (slid && !is_bat_nil(*slid) && (sl = BATdescriptor(*slid)) == NULL) throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - } if (srid && !is_bat_nil(*srid) && (sr = BATdescriptor(*srid)) == NULL) { - BBPunfix(L->batCacheid); - BBPunfix(R->batCacheid); if (sl) BBPunfix(sl->batCacheid); throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); } ret = BATsubcross(&bn1, r ? &bn2 : NULL, L, R, sl, sr, max_one && !is_bit_nil(*max_one) && *max_one); - BBPunfix(L->batCacheid); - BBPunfix(R->batCacheid); if (sl) BBPunfix(sl->batCacheid); if (sr) @@ -1248,16 +1238,14 @@ ALGprojecttail(Client cntxt, MalBlkPtr m (void) mb; if( isaBatType(getArgType(mb,pci,2)) ) throw(MAL,"algebra.project","Scalar value expected"); - if ((b = BATdescriptor(bid)) == NULL) + if ((b = BBPquickdesc(bid, false)) == NULL) throw(MAL, "algebra.project", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); bn = BATconstant(b->hseqbase, v->vtype, VALptr(v), BATcount(b), TRANSIENT); - BBPunfix(b->batCacheid); if (bn == NULL) { *ret = bat_nil; throw(MAL, "algebra.project", SQLSTATE(HY013) MAL_MALLOC_FAIL); } - *ret= bn->batCacheid; - BBPkeepref(bn->batCacheid); + BBPkeepref(*ret= bn->batCacheid); return MAL_SUCCEED; } diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -486,7 +486,8 @@ mat_apply(MalBlkPtr mb, InstrPtr p, matl { int matvar[8], fargument[8], k, l, parts = 0; - if (nrmats == 1 && (getFunctionId(p) == identityRef && getModuleId(p) == batcalcRef)) + if (nrmats == 1 && + ((getModuleId(p) == batcalcRef && getFunctionId(p) == identityRef) || (getModuleId(p) == batRef && getFunctionId(p) == mirrorRef))) return mat_apply1(mb, p, ml, is_a_mat(getArg(p,1),ml), 1); assert(nrmats <= 8); diff --git a/sql/backends/monet5/UDF/pyapi3/emit3.c b/sql/backends/monet5/UDF/pyapi3/emit3.c --- a/sql/backends/monet5/UDF/pyapi3/emit3.c _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list