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

Reply via email to