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