Changeset: 26e975175bb2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/26e975175bb2
Modified Files:
sql/server/rel_unnest.c
sql/test/SQLancer/Tests/sqlancer19.SQL.py
Branch: default
Log Message:
Set relations require the exact number of expressions with children, so add an
extra projection during exists rewriter
diffs (31 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
@@ -3121,7 +3121,8 @@ rewrite_exists(visitor *v, sql_rel *rel,
}
sq = exp_rel_get_rel(v->sql->sa, ie); /* get subquery */
-
+ if (is_set(sq->op) && list_length(sq->exps) > 1) /*
number of expressions in set relations must match the children */
+ sq = rel_project(v->sql->sa, sq,
rel_projections(v->sql, sq, NULL, 1, 1));
le = rel_reduce2one_exp(v->sql, sq);
le = exp_ref(v->sql, le);
if (is_project(rel->op) && is_freevar(le)) {
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
@@ -315,6 +315,14 @@ with SQLTestCase() as cli:
.assertSucceeded().assertDataResultMatch([(None,),(-7,),(-1,),(0,),(0,),(0,),(0,),(0,),(1,),(3,),(3,),(4,),(4,),(4,),(5,),(5,),(5,),(5,),(6,),(6,),(7,),(7,),(8,),(9,),(9,)])
cli.execute("SELECT CAST(SUM(count) AS BIGINT) FROM (SELECT CAST((((('5'
LIKE '0.53')OR((VALUES (0 < ANY(VALUES (7), (0)))))))OR(4 NOT BETWEEN -rt7.c0
AND rt7.c0)) AS INT) as count FROM rt7) as res;") \
.assertSucceeded().assertDataResultMatch([(25,)])
+ cli.execute("create view v8(vc0) as (select -24.6 from t3);") \
+ .assertSucceeded()
+ cli.execute("create view v9(vc0) as (select -24.6 from rt3);") \
+ .assertSucceeded()
+ cli.execute("SELECT 1 FROM t3 WHERE EXISTS ((SELECT 0.3, 4 FROM v8) EXCEPT
ALL (SELECT 8, 1 FROM v8));") \
+
.assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,)])
+ cli.execute("SELECT 1 FROM t3 WHERE EXISTS ((SELECT 0.3, 4 FROM v9) EXCEPT
ALL (SELECT 8, 1 FROM v9));") \
+
.assertSucceeded().assertDataResultMatch([(1,),(1,),(1,),(1,),(1,),(1,)])
cli.execute("SELECT c1 FROM t6;") \
.assertSucceeded().assertDataResultMatch([("3",),("8ጮk|1*",),("27",),("Vrx^qA齀",),("J",),("18",),(">*4嘁pAP",),("+Jm*W0{",),(">V鷓",),
("BW5z",),(".#OJruk",),("lU1覃Nlm",),(None,),("968786590",)])
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list