Changeset: 02beaa1eb309 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/02beaa1eb309
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/test/SQLancer/Tests/sqlancer15.test
Branch: Jul2021
Log Message:

My mistake, while generating MAL code for semi(anti) join subexpressions the 
reduce flag must not be set. Instead set depth


diffs (85 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2778,11 +2778,11 @@ rel2bin_antijoin(backend *be, sql_rel *r
                assert(list_length(mexps) == 1);
                for( en = mexps->h; en; en = en->next ) {
                        sql_exp *e = en->data;
-                       stmt *ls = exp_bin(be, e->l, left, right, NULL, NULL, 
NULL, NULL, 0, 1, 0), *rs;
+                       stmt *ls = exp_bin(be, e->l, left, right, NULL, NULL, 
NULL, NULL, 1, 0, 0), *rs;
                        if (!ls)
                                return NULL;
 
-                       if (!(rs = exp_bin(be, e->r, left, right, NULL, NULL, 
NULL, NULL, 0, 1, 0)))
+                       if (!(rs = exp_bin(be, e->r, left, right, NULL, NULL, 
NULL, NULL, 1, 0, 0)))
                                return NULL;
 
                        if (ls->nrcols == 0)
@@ -2881,14 +2881,14 @@ rel2bin_semijoin(backend *be, sql_rel *r
 
                                if (equality_only) {
                                        int oldvtop = be->mb->vtop, oldstop = 
be->mb->stop, oldvid = be->mb->vid, swap = 0;
-                                       stmt *r, *l = exp_bin(be, e->l, left, 
NULL, NULL, NULL, NULL, NULL, 0, 1, 0);
+                                       stmt *r, *l = exp_bin(be, e->l, left, 
NULL, NULL, NULL, NULL, NULL, 1, 0, 0);
 
                                        if (!l) {
                                                swap = 1;
                                                clean_mal_statements(be, 
oldstop, oldvtop, oldvid);
-                                               l = exp_bin(be, e->l, right, 
NULL, NULL, NULL, NULL, NULL, 0, 1, 0);
+                                               l = exp_bin(be, e->l, right, 
NULL, NULL, NULL, NULL, NULL, 1, 0, 0);
                                        }
-                                       r = exp_bin(be, e->r, left, right, 
NULL, NULL, NULL, NULL, 0, 1, 0);
+                                       r = exp_bin(be, e->r, left, right, 
NULL, NULL, NULL, NULL, 1, 0, 0);
 
                                        if (swap) {
                                                stmt *t = l;
diff --git a/sql/test/SQLancer/Tests/sqlancer15.test 
b/sql/test/SQLancer/Tests/sqlancer15.test
--- a/sql/test/SQLancer/Tests/sqlancer15.test
+++ b/sql/test/SQLancer/Tests/sqlancer15.test
@@ -162,6 +162,46 @@ INSERT INTO "t2" VALUES (false, DATE '19
 (true, DATE '1970-01-01', NULL),(false, DATE '1970-01-01', 0.2627602),(true, 
DATE '1970-01-01', NULL),(true, DATE '1970-01-01', NULL),(true, DATE 
'1969-12-13', NULL)
 
 query I rowsort
+SELECT 1 FROM t2 WHERE (TIME '01:00:00') NOT IN (TIME '01:00:00', TIME 
'01:00:00') NOT IN ((VALUES (TRUE)));
+----
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+
+query I rowsort
+SELECT 1 FROM t0, t2 WHERE t0.c2 = CASE WHEN t2.c2 THEN 1 WHEN t2.c6 = 
ANY(SELECT t2.c6 FROM t2) THEN 5 END
+----
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+
+query I rowsort
 SELECT 1 FROM t0, t2 WHERE t0.c2 BETWEEN 0 AND CASE WHEN t2.c2 THEN 1 WHEN 
t2.c4 = ANY(SELECT t2.c4 FROM t2) THEN 2 END
 ----
 1
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to