Changeset: 9faff498f4cc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9faff498f4cc
Modified Files:
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        tools/monetdbe/monetdbe.c
Branch: default
Log Message:

Merged with Jul2021


diffs (177 lines):

diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -178,7 +178,6 @@ BATmaterialize(BAT *b)
        cnt = BATcapacity(b);
        if ((tail = GDKmalloc(sizeof(Heap))) == NULL)
                return GDK_FAIL;
-       *tail = *b->theap;
        p = 0;
        q = BUNlast(b);
        assert(cnt >= q - p);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1636,10 +1636,10 @@ BUNinplacemulti(BAT *b, const oid *posit
        MT_lock_set(&b->theaplock);
        b->tminpos = minpos;
        b->tmaxpos = maxpos;
-       MT_lock_unset(&b->theaplock);
        b->theap->dirty = true;
        if (b->tvheap)
                b->tvheap->dirty = true;
+       MT_lock_unset(&b->theaplock);
 
        return GDK_SUCCEED;
 }
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -329,7 +329,6 @@ insert_string_bat(BAT *b, BAT *n, struct
        BATsetcount(b, oldcnt + ci->ncand);
        bat_iterator_end(&ni);
        assert(b->batCapacity >= b->batCount);
-       b->theap->dirty = true;
        /* maintain hash */
        MT_rwlock_wrlock(&b->thashlock);
        for (r = oldcnt, cnt = BATcount(b); b->thash && r < cnt; r++) {
@@ -402,7 +401,6 @@ append_varsized_bat(BAT *b, BAT *n, stru
                                *dst++ = src[canditer_next(ci) - hseq];
                        }
                }
-               b->theap->dirty = true;
                BATsetcount(b, BATcount(b) + ci->ncand);
                /* maintain hash table */
                MT_rwlock_wrlock(&b->thashlock);
@@ -459,7 +457,6 @@ append_varsized_bat(BAT *b, BAT *n, stru
        MT_rwlock_wrunlock(&b->thashlock);
        BATsetcount(b, r);
        bat_iterator_end(&ni);
-       b->theap->dirty = true;
        return GDK_SUCCEED;
 }
 
@@ -873,7 +870,6 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool 
                }
                MT_rwlock_wrunlock(&b->thashlock);
                BATsetcount(b, b->batCount + ci.ncand);
-               b->theap->dirty = true;
        }
 
   doreturn:
@@ -1131,9 +1127,7 @@ BATappend_or_update(BAT *b, BAT *p, cons
        bool anynil = false;
        bool locked = false;
 
-       b->theap->dirty = true;
        if (b->tvarsized) {
-               b->tvheap->dirty = true;
                for (BUN i = 0; i < ni.count; i++) {
                        oid updid;
                        if (positions) {
@@ -1280,6 +1274,9 @@ BATappend_or_update(BAT *b, BAT *p, cons
                        MT_rwlock_wrunlock(&b->thashlock);
                        locked = false;
                }
+               MT_lock_set(&b->theaplock);
+               b->tvheap->dirty = true;
+               MT_lock_unset(&b->theaplock);
        } else if (ATOMstorage(b->ttype) == TYPE_msk) {
                HASHdestroy(b); /* hash doesn't make sense for msk */
                for (BUN i = 0; i < ni.count; i++) {
@@ -1561,6 +1558,7 @@ BATappend_or_update(BAT *b, BAT *p, cons
        MT_lock_set(&b->theaplock);
        b->tminpos = minpos;
        b->tmaxpos = maxpos;
+       b->theap->dirty = true;
        MT_lock_unset(&b->theaplock);
        TRC_DEBUG(ALGO,
                  "BATreplace(" ALGOBATFMT "," ALGOOPTBATFMT "," ALGOBATFMT ") 
" LLFMT " usec\n",
diff --git a/monetdb5/mal/mal_exception.c b/monetdb5/mal/mal_exception.c
--- a/monetdb5/mal/mal_exception.c
+++ b/monetdb5/mal/mal_exception.c
@@ -121,27 +121,27 @@ str
 createException(enum malexception type, const char *fcn, const char *format, 
...)
 {
        va_list ap;
-       str ret = NULL;
+       str ret = NULL, localGDKerrbuf = GDKerrbuf;
 
-       if (GDKerrbuf &&
+       if (localGDKerrbuf &&
                (ret = strstr(format, MAL_MALLOC_FAIL)) != NULL &&
                ret[strlen(MAL_MALLOC_FAIL)] != ':' &&
-               (strncmp(GDKerrbuf, "GDKmalloc", 9) == 0 ||
-                strncmp(GDKerrbuf, "GDKrealloc", 10) == 0 ||
-                strncmp(GDKerrbuf, "GDKzalloc", 9) == 0 ||
-                strncmp(GDKerrbuf, "GDKstrdup", 9) == 0 ||
-                strncmp(GDKerrbuf, "allocating too much virtual address 
space", 41) == 0)) {
+               (strncmp(localGDKerrbuf, "GDKmalloc", 9) == 0 ||
+                strncmp(localGDKerrbuf, "GDKrealloc", 10) == 0 ||
+                strncmp(localGDKerrbuf, "GDKzalloc", 9) == 0 ||
+                strncmp(localGDKerrbuf, "GDKstrdup", 9) == 0 ||
+                strncmp(localGDKerrbuf, "allocating too much virtual address 
space", 41) == 0)) {
                /* override errors when the underlying error is memory
                 * exhaustion, but include whatever it is that the GDK level
                 * reported */
-               ret = createException(type, fcn, SQLSTATE(HY013) 
MAL_MALLOC_FAIL ": %s", GDKerrbuf);
+               ret = createException(type, fcn, SQLSTATE(HY013) 
MAL_MALLOC_FAIL ": %s", localGDKerrbuf);
                GDKclrerr();
                assert(ret);
                return ret;
        }
-       if (strcmp(format, GDK_EXCEPTION) == 0 && GDKerrbuf[0]) {
+       if (localGDKerrbuf && localGDKerrbuf[0] && strcmp(format, 
GDK_EXCEPTION) == 0) {
                /* for GDK errors, report the underlying error */
-               char *p = GDKerrbuf;
+               char *p = localGDKerrbuf;
                if (strncmp(p, GDKERROR, strlen(GDKERROR)) == 0) {
                        /* error is "!ERROR: function_name: STATE!error message"
                         * we need to skip everything up to the STATE */
diff --git a/sql/test/BugTracker-2021/Tests/merge-table-join.Bug-7172.test 
b/sql/test/BugTracker-2021/Tests/merge-table-join.Bug-7172.test
--- a/sql/test/BugTracker-2021/Tests/merge-table-join.Bug-7172.test
+++ b/sql/test/BugTracker-2021/Tests/merge-table-join.Bug-7172.test
@@ -100,8 +100,8 @@ CREATE TABLE "dw_hospital"."facts_costi_
        "classe_movimento_id"    INTEGER       NOT NULL,
        "applicativo_id"         INTEGER       NOT NULL,
        "progetto_id"            INTEGER       NOT NULL,
-       "valore"                 DECIMAL(19,4) NOT NULL,
-       "quantita"               DECIMAL(19,4) NOT NULL,
+       "valore"                 DECIMAL(12,4) NOT NULL,
+       "quantita"               DECIMAL(12,4) NOT NULL,
        "last_batch_id"          INTEGER       NOT NULL,
        "archive"                INTEGER       NOT NULL,
        "last_updated"           TIMESTAMP     NOT NULL DEFAULT 
current_timestamp(),
@@ -122,8 +122,8 @@ CREATE TABLE "dw_hospital"."facts_costi_
        "classe_movimento_id"    INTEGER       NOT NULL,
        "applicativo_id"         INTEGER       NOT NULL,
        "progetto_id"            INTEGER       NOT NULL,
-       "valore"                 DECIMAL(19,4) NOT NULL,
-       "quantita"               DECIMAL(19,4) NOT NULL,
+       "valore"                 DECIMAL(12,4) NOT NULL,
+       "quantita"               DECIMAL(12,4) NOT NULL,
        "last_batch_id"          INTEGER       NOT NULL,
        "archive"                INTEGER       NOT NULL,
        "last_updated"           TIMESTAMP     NOT NULL DEFAULT 
current_timestamp(),
@@ -144,8 +144,8 @@ CREATE TABLE "dw_hospital"."facts_costi_
        "classe_movimento_id"    INTEGER       NOT NULL,
        "applicativo_id"         INTEGER       NOT NULL,
        "progetto_id"            INTEGER       NOT NULL,
-       "valore"                 DECIMAL(19,4) NOT NULL,
-       "quantita"               DECIMAL(19,4) NOT NULL,
+       "valore"                 DECIMAL(12,4) NOT NULL,
+       "quantita"               DECIMAL(12,4) NOT NULL,
        "last_batch_id"          INTEGER       NOT NULL,
        "archive"                INTEGER       NOT NULL,
        "last_updated"           TIMESTAMP     NOT NULL DEFAULT 
current_timestamp(),
@@ -166,8 +166,8 @@ CREATE MERGE TABLE "dw_hospital"."facts_
        "classe_movimento_id"    INTEGER       NOT NULL,
        "applicativo_id"         INTEGER       NOT NULL,
        "progetto_id"            INTEGER       NOT NULL,
-       "valore"                 DECIMAL(19,4) NOT NULL,
-       "quantita"               DECIMAL(19,4) NOT NULL,
+       "valore"                 DECIMAL(12,4) NOT NULL,
+       "quantita"               DECIMAL(12,4) NOT NULL,
        "last_batch_id"          INTEGER       NOT NULL,
        "archive"                INTEGER       NOT NULL,
        "last_updated"           TIMESTAMP     NOT NULL DEFAULT 
current_timestamp(),
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to