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

Reply via email to