Changeset: 518e0a4df7d9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/518e0a4df7d9
Branch: escape-sequences
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]

Reply via email to