Changeset: 4d000e9a4e2a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/4d000e9a4e2a Modified Files: clients/Tests/exports.stable.out gdk/gdk_batop.c sql/include/sql_catalog.h sql/server/rel_optimizer.c sql/storage/bat/bat_storage.c sql/storage/sql_storage.h sql/storage/store.c Branch: scatter Log Message:
merged with jul2021 diffs (truncated from 1484 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 @@ -540,8 +540,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/sql/backends/monet5/UDF/pyapi3/emit3.c b/sql/backends/monet5/UDF/pyapi3/emit3.c --- a/sql/backends/monet5/UDF/pyapi3/emit3.c +++ b/sql/backends/monet5/UDF/pyapi3/emit3.c @@ -112,6 +112,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self "Could not convert object type %s to a string: %s", PyString_AsString(PyObject_Str(PyObject_Type(key))), msg); + free(val); goto loop_end; } for (ai = 0; ai < self->ncols; ai++) { @@ -126,8 +127,10 @@ PyObject *PyEmit_Emit(PyEmitObject *self PyErr_Format(PyExc_TypeError, "Unmatched element \"%s\" in dict", val); error = true; + free(val); goto loop_end; } + free(val); } loop_end: Py_DECREF(keys); @@ -167,6 +170,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self PyString_AsString(PyObject_Str(PyObject_Type(key))), msg); error = true; Py_DECREF(keys); + free(val); goto wrapup; } for (ai = 0; ai < self->ncols; ai++) { @@ -190,6 +194,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self PyErr_Format(PyExc_TypeError, "Failed to create NumPy array."); error = true; + free(val); goto wrapup; } array_type = @@ -199,10 +204,12 @@ PyObject *PyEmit_Emit(PyEmitObject *self if (!(self->cols[self->ncols].b = COLnew(0, bat_type, 0, TRANSIENT))) { msg = createException(MAL, "pyapi3.emit", SQLSTATE(HY013) MAL_MALLOC_FAIL); + free(val); goto wrapup; } if (!(self->cols[self->ncols].name = GDKstrdup(val))) { msg = createException(MAL, "pyapi3.emit", SQLSTATE(HY013) MAL_MALLOC_FAIL); + free(val); goto wrapup; } self->cols[self->ncols].def = NULL; @@ -213,6 +220,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self ATOMnilptr(self->cols[self->ncols].b->ttype), false) != GDK_SUCCEED) { msg = createException(MAL, "pyapi3.emit", SQLSTATE(HY013) "BUNappend failed."); + free(val); goto wrapup; } } @@ -222,6 +230,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self } self->ncols++; } + free(val); } } @@ -277,6 +286,7 @@ PyObject *PyEmit_Emit(PyEmitObject *self gdk_return retval; msg = pyobject_to_str(&dictEntry, 42, &val); if (msg != MAL_SUCCEED) { + free(val); goto wrapup; } assert(val); diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -1131,9 +1131,7 @@ mal_function_find_implementation_address m->type = Q_PARSE; m->user_id = m->role_id = USER_MONETDB; - store_lock(m->session->tr->store); m->session = sql_session_create(m->store, m->pa, 0); - store_unlock(m->session->tr->store); if (!m->session) { (void) sql_error(o, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); goto bailout; @@ -1177,9 +1175,7 @@ bailout: if (m) { bstream_destroy(m->scanner.rs); if (m->session) { - store_lock(m->session->tr->store); sql_session_destroy(m->session); - store_unlock(m->session->tr->store); } if (m->sa) sa_destroy(m->sa); diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h --- a/sql/include/sql_catalog.h +++ b/sql/include/sql_catalog.h _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list