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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list