Changeset: 7e3eb02e9eb6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7e3eb02e9eb6
Branch: samloader
Log Message:

merged with default


diffs (184 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -433,6 +433,8 @@ size_t GDK_mmap_minsize_transient = MMAP
 size_t GDK_mmap_pagesize = MMAP_PAGESIZE; /* mmap granularity */
 size_t GDK_mem_maxsize = GDK_VM_MAXSIZE;
 size_t GDK_vm_maxsize = GDK_VM_MAXSIZE;
+BUN GDKL3_size = 0;
+
 
 #define SEG_SIZE(x)    (((x) + _MT_pagesize - 1) & ~(_MT_pagesize - 1))
 
@@ -1193,8 +1195,15 @@ GDKinit(opt *set, int setlen, bool embed
 #else
        GDKL3_size = 16*1024*1024;
 #endif
-       if ((p = GDKgetenv("gdk_l3_size")) != NULL)
+       if ((p = GDKgetenv("gdk_l3_size")) != NULL) {
                GDKL3_size = (BUN) strtoll(p, NULL, 10);
+       } else {
+               snprintf(buf, sizeof(buf), "%zu", GDKL3_size);
+               if (GDKsetenv("gdk_l3_size", buf) != GDK_SUCCEED) {
+                       TRC_CRITICAL(GDK, "GDKsetenv gdk_l3_size failed");
+                       return GDK_FAIL;
+               }
+       }
 
        if (!GDKinmemory(0)) {
                if ((p = GDKgetenv("gdk_dbpath")) != NULL &&
@@ -1288,8 +1297,6 @@ GDKinit(opt *set, int setlen, bool embed
        return GDK_SUCCEED;
 }
 
-BUN GDKL3_size = 0;
-
 bool
 GDKexiting(void)
 {
diff --git a/monetdb5/modules/mal/pp_hash.c b/monetdb5/modules/mal/pp_hash.c
--- a/monetdb5/modules/mal/pp_hash.c
+++ b/monetdb5/modules/mal/pp_hash.c
@@ -732,31 +732,59 @@ OAHASHmark_nils(Client ctx, bat *res, co
 
        MT_lock_set(&m->theaplock);
        oid max = BATcount(m);
+       oid maxval = r->tmaxval;
        str err = MAL_SUCCEED;
-       if (cnt && r->ttype == TYPE_oid) {
-               TIMEOUT_LOOP_IDX_DECL(i, cnt, qry_ctx) {
-                       oid j = row[i];
-                       if (j >= max) {
-                               MT_lock_unset(&m->theaplock);
-                               if (j >= BATcapacity(m) && BATextend(m, 
BATgrows(m)) != GDK_SUCCEED) {
-                                       MT_lock_set(&m->theaplock);
-                                       err = MAL_MALLOC_FAIL;
-                                       break;
+
+       if (!maxval) {
+               if (r->ttype == TYPE_oid) {
+                       for(BUN i=0; i<cnt; i++) {
+                               oid j = row[i];
+                               if ((j+1) > maxval)
+                                       maxval = j+1;
+                       }
+               } else {
+                       maxval = r->tseqbase + BATcount(r) + 1;
+               }
+       }
+       if (maxval > max && cnt) {
+               MT_lock_unset(&m->theaplock);
+               if (maxval >= BATcapacity(m) && BATextend(m, maxval + 1024) != 
GDK_SUCCEED) {
+                       MT_lock_set(&m->theaplock);
+                       err = MAL_MALLOC_FAIL;
+               }
+               if (!err) {
+                       MT_lock_set(&m->theaplock);
+                       assert(BATcapacity(m) >= maxval);
+                       mrk = Tloc(m, 0);
+                       max = BATcount(m);
+                       if (max < maxval)
+                               memset(mrk+max, bit_nil, maxval-max);
+                       BATsetcount(m, maxval);
+               }
+       }
+       if (!err && cnt) {
+               if (r->ttype == TYPE_oid) {
+                       TIMEOUT_LOOP_IDX_DECL(i, cnt, qry_ctx) {
+                               oid j = row[i];
+                               assert(j<maxval);
+                               if (nil[i]) {
+                                       mrk[j] = TRUE;
+                               } else {
+                                       mrk[j] = FALSE;
                                }
-                               mrk = Tloc(m, 0);
-                               MT_lock_set(&m->theaplock);
-                               memset(mrk+max, bit_nil, j+1 - max);
-                               max = j+1;
-                               BATsetcount(m, j+1);
                        }
-                       if (nil[i]) {
-                               mrk[j] = TRUE;
-                       } else {
-                               mrk[j] = FALSE;
+               } else { /* handle voids */
+                       oid seq = r->tseqbase;
+                       TIMEOUT_LOOP_IDX_DECL(i, cnt, qry_ctx) {
+                               oid j = i + seq;
+                               assert(j<maxval);
+                               if (nil[i]) {
+                                       mrk[j] = TRUE;
+                               } else {
+                                       mrk[j] = FALSE;
+                               }
                        }
                }
-       } else if (cnt) { /* handle voids */
-               assert(0);
        }
        BATnegateprops(m);
        MT_lock_unset(&m->theaplock);
@@ -3806,12 +3834,12 @@ OAHASHselect_unmatched(Client ctx, bat *
                goto error;
        }
 
-       BUN scnt = BATcount(s);
        if (*cnt) {
                bit f = FALSE;
                r = BATthetaselect(s, NULL, (ptr)&f, "==");
-       } else {
-               r = BATdense (s->hseqbase, s->hseqbase, scnt);
+       } else { /* select non nil */
+               bit n = bit_nil;
+               r = BATthetaselect(s, NULL, (ptr)&n, "ne");
        }
        if (!r) {
                err = createException(SQL, "oahash.select_unmatched", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/rel_pphash.c b/sql/backends/monet5/rel_pphash.c
--- a/sql/backends/monet5/rel_pphash.c
+++ b/sql/backends/monet5/rel_pphash.c
@@ -457,8 +457,8 @@ rel2bin_oahash_build(backend *be, sql_re
        }
        if (!need_nulls && anti_join) {
                /* mark used gid's */
-               stmt *one = stmt_const(be, prnt, stmt_bool(be, 0));
-               matched = stmt_algebra_project(be, matched, prnt, one, 
projectionRef);
+               stmt *zero = stmt_const(be, prnt, stmt_bool(be, 0));
+               (void)stmt_mark_nulls(be, matched, zero, prnt); /* needed to 
initialize with nils */
                rel->oahash = 0; /* no nulls, pass down */
        }
        if (matched && nulls) {
diff --git a/sql/backends/monet5/sql_pp_statement.c 
b/sql/backends/monet5/sql_pp_statement.c
--- a/sql/backends/monet5/sql_pp_statement.c
+++ b/sql/backends/monet5/sql_pp_statement.c
@@ -683,7 +683,8 @@ stmt_mark_nulls(backend *be, stmt *inout
        s->nrcols = 1;
        s->q = q;
        s->op1 = inout;
-       s->op2 = pos;
+       s->op2 = nils;
+       s->op3 = pos;
        s->flag = cmp_project;
        s->key = 0;
        return s;
diff --git 
a/sql/test/BugTracker-2021/Tests/serializable-snapshot.Bug-7200.SQL.py 
b/sql/test/BugTracker-2021/Tests/serializable-snapshot.Bug-7200.SQL.py
--- a/sql/test/BugTracker-2021/Tests/serializable-snapshot.Bug-7200.SQL.py
+++ b/sql/test/BugTracker-2021/Tests/serializable-snapshot.Bug-7200.SQL.py
@@ -9,6 +9,7 @@ cursor2 = client2.cursor()
 MAX_ITERATIONS = 1000
 EXPECTED_SUM = sum(range(0, MAX_ITERATIONS))
 
+cursor1.execute("DROP TABLE if exists T;")
 cursor1.execute("CREATE TABLE T (k INT PRIMARY KEY, v INT);")
 
 class TestClient(threading.Thread):
@@ -38,8 +39,6 @@ if res != [(MAX_ITERATIONS, MAX_ITERATIO
     sys.stderr.write("[(%d,%d,%d)] expected, [(%d,%d,%d)] received" % 
(MAX_ITERATIONS, MAX_ITERATIONS, EXPECTED_SUM, res[0][0], res[0][1], res[0][2]))
 
 
-cursor1.execute("DROP TABLE T;")
-
 cursor1.close()
 cursor2.close()
 client1.close()
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to