Changeset: b08ab21851d8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b08ab21851d8
Branch: extract_types
Log Message:
merged with default
diffs (194 lines):
diff --git a/common/stream/Tests/read_iconv.py
b/common/stream/Tests/read_iconv.py
--- a/common/stream/Tests/read_iconv.py
+++ b/common/stream/Tests/read_iconv.py
@@ -20,26 +20,38 @@ def run_streamcat(text, enc, expected_er
filename = tf.write(enc_text)
cmd = ['streamcat', 'read', filename, 'rstream', f'iconv:{enc}']
- descr = f"command {cmd} with input {enc_text!r}"
+ descr = f"command {cmd}\nwith input {enc_text!r}"
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = proc.stdout
os.remove(filename)
+ def show_stderr():
+ if proc.stderr:
+ print("--- STDERR ---", file=sys.stderr)
+ sys.stderr.buffer.write(proc.stderr)
+ # if proc.stderr.endswith(b'\n'):
+ else:
+ print("--- NOTHING ON STDERR ---", file=sys.stderr)
+
if expected_error:
if proc.returncode == 0:
- print(f"{descr} exited without expected error", file=sys.stderr)
+ print(f"{descr}\nexited without expected error", file=sys.stderr)
+ show_stderr()
sys.exit(1)
elif expected_error not in proc.stderr:
- print(f"{descr} failed as expected but stderr does not contain
{expected_error!r}", file=sys.stderr)
+ print(f"{descr}\nfailed as expected but stderr does not contain
{expected_error!r}:", file=sys.stderr)
+ show_stderr()
sys.exit(1)
else:
return
if proc.returncode != 0:
- print(f"{descr} exited with status {proc.returncode}", file=sys.stderr)
+ print(f"{descr}\nexited with status {proc.returncode}",
file=sys.stderr)
+ show_stderr()
sys.exit(1)
if output != expected:
- print(f"{descr} yielded {output!r}, expected {expected!r}")
+ print(f"{descr}\nyielded {output!r}, expected {expected!r}",
file=sys.stderr)
+ show_stderr()
sys.exit(1)
diff --git a/common/stream/Tests/write_iconv.py
b/common/stream/Tests/write_iconv.py
--- a/common/stream/Tests/write_iconv.py
+++ b/common/stream/Tests/write_iconv.py
@@ -18,13 +18,14 @@ def run_streamcat(text, enc):
cmd = ['streamcat', 'write', tf.path(), 'wstream', f'iconv:{enc}']
proc = subprocess.run(cmd, input=utf8_text)
if proc.returncode != 0:
- print(f"command {cmd} exited with status {proc.returncode} for input
{utf8_text!r} ({text!r})", file=sys.stderr)
+ print(f"command {cmd}\nexited with status {proc.returncode}\nfor input
{utf8_text!r} ({text!r})", file=sys.stderr)
sys.exit(1)
output = tf.read()
os.remove(tf.path())
if output != expected:
- raise Exception(f"command {cmd} with input {utf8_text!r} yielded
{output!r}, expected {expected!r}")
+ print(f"command {cmd}\nwith input {utf8_text!r} ({text!r})\nyielded
{output!r}, expected {expected!r}", file=sys.stderr)
+ sys.exit(1)
text = "MøNëTDB"
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -623,7 +623,8 @@ HEAPfree(Heap *h, bool rmheap)
size_t id;
sscanf(h->filename, "%zu", &id);
GDKreleasemmap(h->base, h->size, id);
- rmheap = true;
+ /* the heap has already been removed */
+ rmheap = false;
#endif
} else if (h->storage != STORE_NOWN) { /* mapped file, or
STORE_PRIV */
gdk_return ret = GDKmunmap(h->base, h->size);
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2662,6 +2662,9 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
bool lskipped = false; /* whether we skipped values in l */
Hash *restrict hsh = NULL;
bool locked = false;
+ BUN maxsize;
+ BAT *r1 = NULL;
+ BAT *r2 = NULL;
assert(ATOMtype(l->ttype) == ATOMtype(r->ttype));
@@ -2697,19 +2700,6 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
nil_on_miss, only_misses, __func__, t0);
}
- BUN maxsize = joininitresults(r1p, r2p, lci->ncand, rci->ncand,
- li.key, ri.key, semi | max_one,
- nil_on_miss, only_misses, min_one,
- estimate);
- if (maxsize == BUN_NONE) {
- bat_iterator_end(&li);
- bat_iterator_end(&ri);
- return GDK_FAIL;
- }
-
- BAT *r1 = *r1p;
- BAT *r2 = r2p ? *r2p : NULL;
-
rl = rci->seq - r->hseqbase;
rh = canditer_last(rci) + 1 - r->hseqbase;
if (hash_cand) {
@@ -2819,6 +2809,17 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
}
}
+ maxsize = joininitresults(r1p, r2p, lci->ncand, rci->ncand,
+ li.key, ri.key, semi | max_one,
+ nil_on_miss, only_misses, min_one,
+ estimate);
+ if (maxsize == BUN_NONE) {
+ goto bailout;
+ }
+
+ r1 = *r1p;
+ r2 = r2p ? *r2p : NULL;
+
/* basic properties will be adjusted if necessary later on,
* they were initially set by joininitresults() */
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -87,9 +87,9 @@ printBATproperties(stream *f, BAT *b)
if (BBP_refs(b->batCacheid) - 1)
mnstr_printf(f, " refs=%d ", BBP_refs(b->batCacheid));
if (b->theap->refs)
- mnstr_printf(f, " views=%lld", ATOMIC_GET(&b->theap->refs));
+ mnstr_printf(f, " views=%llu", ATOMIC_GET(&b->theap->refs));
if (b->tvheap->refs)
- mnstr_printf(f, " shared vheaps=%lld",
ATOMIC_GET(&b->tvheap->refs));
+ mnstr_printf(f, " shared vheaps=%llu",
ATOMIC_GET(&b->tvheap->refs));
if (b->theap->parentid != b->batCacheid)
mnstr_printf(f, "view on %s ", BBP_logical(b->theap->parentid));
}
diff --git a/monetdb5/modules/atoms/batxml.c b/monetdb5/modules/atoms/batxml.c
--- a/monetdb5/modules/atoms/batxml.c
+++ b/monetdb5/modules/atoms/batxml.c
@@ -1147,6 +1147,7 @@ BATXMLconcat(bat *ret, const bat *bid, c
bat_iterator_end(&ri);
GDKfree(buf);
finalizeResult(ret, bn, b);
+ BBPunfix(r->batCacheid);
return MAL_SUCCEED;
bunins_failed:
bat_iterator_end(&bi);
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -864,7 +864,7 @@ exps_merge_select_rse( mvc *sql, list *l
sql->errstr[0] = '\0';
continue;
}
- fnd = exp_compare2(sql->sa, le->l, mine, maxe,
le->flag, 0);
+ fnd = exp_compare2(sql->sa, exp_copy(sql,
le->l), mine, maxe, le->flag, 0);
lmerged = false;
}
if (fnd) {
diff --git a/sql/test/bugs/Tests/All b/sql/test/bugs/Tests/All
--- a/sql/test/bugs/Tests/All
+++ b/sql/test/bugs/Tests/All
@@ -114,3 +114,4 @@ in
rtrim_bug
savepoint-release
procedure-recompile
+rse_bug
diff --git a/sql/test/bugs/Tests/rse_bug.test b/sql/test/bugs/Tests/rse_bug.test
new file mode 100644
--- /dev/null
+++ b/sql/test/bugs/Tests/rse_bug.test
@@ -0,0 +1,12 @@
+statement ok
+CREATE TABLE size_test (size_field INTEGER)
+
+query I rowsort
+SELECT COUNT(*) from size_test
+WHERE ((size_field / 1024.0) > 887.443 AND (size_field / 1024.0) < 887.445)
+OR ((size_field / 1024.0) > 311.344 AND (size_field / 1024.0) < 311.346)
+----
+0
+
+statement ok
+drop TABLE size_test;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]