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

Reply via email to