Changeset: 0118d1b927c7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0118d1b927c7
Modified Files:
        sql/server/rel_select.c
        sql/test/SQLancer/Tests/sqlancer17.test
Branch: Jan2022
Log Message:

Adding empty select for complex in predicates is not correct. I need to find a 
better solution


diffs (72 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1908,7 +1908,7 @@ rel_in_value_exp(sql_query *query, sql_r
        dnode *n = dl->h->next, *dn = NULL;
        sql_exp *le = NULL, *re, *e = NULL;
        list *ll = sa_list(sql->sa);
-       int is_tuple = 0, add_select = 0;
+       int is_tuple = 0;
 
        /* complex case */
        if (dl->h->type == type_list) { /* (a,b..) in (.. ) */
@@ -1958,7 +1958,6 @@ rel_in_value_exp(sql_query *query, sql_r
                                re = exp_rel_label(sql, re);
                        } else if (exp_is_rel(re)) {
                                sql_rel *r = exp_rel_get_rel(sql->sa, re);
-                               add_select = 1;
                                if (is_project(r->op) && is_project_true(r->l) 
&& list_length(r->exps) == 1)
                                        re = r->exps->h->data;
                        }
@@ -2024,11 +2023,8 @@ rel_in_value_exp(sql_query *query, sql_r
                                        return NULL;
                        }
                }
-               if (!e) {
-                       if (add_select && rel && *rel && 
!is_project((*rel)->op) && !is_select((*rel)->op))
-                               *rel = rel_select(sql->sa, *rel, NULL);
+               if (!e)
                        e = exp_in_func(sql, le, values, (sc->token == SQL_IN), 
is_tuple);
-               }
        }
        return e;
 }
diff --git a/sql/test/SQLancer/Tests/sqlancer17.test 
b/sql/test/SQLancer/Tests/sqlancer17.test
--- a/sql/test/SQLancer/Tests/sqlancer17.test
+++ b/sql/test/SQLancer/Tests/sqlancer17.test
@@ -434,6 +434,35 @@ statement ok
 SET "optimizer"='default_pipe'
 
 statement ok
+START TRANSACTION
+
+statement ok
+create table tx(c0 VARCHAR(32), c1 BOOLEAN)
+
+statement ok
+create table ty(c0 BOOLEAN)
+
+statement ok rowcount 2
+insert into tx values ('a', true), ('b', false)
+
+statement ok rowcount 2
+insert into ty values (true), (false)
+
+query I nosort
+SELECT 1 FROM tx, ty WHERE CASE tx.c0 = ANY(SELECT 'c') WHEN (SELECT ty.c0 
WHERE tx.c1) THEN true END
+----
+1
+
+query I nosort
+SELECT 1 FROM tx, ty WHERE CASE tx.c0 = ANY(SELECT 'c') WHEN (SELECT ty.c0 
WHERE true) THEN true END
+----
+1
+1
+
+statement ok
+ROLLBACK
+
+statement ok
 CREATE TABLE t2(c0 INTERVAL DAY)
 
 statement ok rowcount 1
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to