Changeset: 8875d3587a26 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8875d3587a26
Modified Files:
sql/server/rel_unnest.c
sql/test/SQLancer/Tests/sqlancer14.test
Branch: default
Log Message:
Make sure exists rewriter returns a comparison for depth=0 expression on
selections
diffs (49 lines):
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3023,7 +3023,9 @@ rewrite_exists(visitor *v, sql_rel *rel,
if (!exp_is_rel(ie)) { /* exists over a constant or a
single value */
le = exp_atom_bool(v->sql->sa,
is_exists(sf)?1:0);
- if (exp_name(e))
+ if (depth == 0 && is_select(rel->op))
+ le = exp_compare(v->sql->sa, le,
exp_atom_bool(v->sql->sa, 1), cmp_equal);
+ else if (exp_name(e))
exp_prop_alias(v->sql->sa, le, e);
v->changes++;
return le;
@@ -3076,7 +3078,7 @@ rewrite_exists(visitor *v, sql_rel *rel,
operator_type op =
is_exists(sf)?op_semi:op_anti;
(void)rewrite_inner(v->sql, rel, sq, &op);
v->changes++;
- return exp_atom_bool(v->sql->sa, 1);
+ return exp_compare(v->sql->sa,
exp_atom_bool(v->sql->sa, 1), exp_atom_bool(v->sql->sa, 1), cmp_equal);
}
v->changes++;
return le;
diff --git a/sql/test/SQLancer/Tests/sqlancer14.test
b/sql/test/SQLancer/Tests/sqlancer14.test
--- a/sql/test/SQLancer/Tests/sqlancer14.test
+++ b/sql/test/SQLancer/Tests/sqlancer14.test
@@ -403,6 +403,22 @@ statement ok
START TRANSACTION
statement ok
+CREATE TABLE "t1" ("c0" DOUBLE PRECISION)
+
+statement ok
+INSERT INTO "t1" VALUES (0.5491550453086529), (0.07482309364658168),
(928354548)
+
+query I rowsort
+select t1.c0 from t1 where exists (select 1) and 3 = any(values (2))
+----
+
+statement ok
+ROLLBACK
+
+statement ok
+START TRANSACTION
+
+statement ok
CREATE TABLE "t0" ("c0" VARCHAR(32))
statement ok
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list