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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list