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]