Changeset: 3a2f89777139 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3a2f89777139
Modified Files:
sql/server/rel_unnest.c
sql/test/SQLancer/Tests/sqlancer23.test
Branch: default
Log Message:
handling unnesting left outer with attributes and projection of consts and
freevar (ie put the real compare (any/all) on the new projection list
handle unnesting anti/groupby
diffs (73 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
@@ -917,6 +917,14 @@ push_up_project(mvc *sql, sql_rel *rel,
l = rel_dup(l);
if (!is_project(l->op) || rel_is_ref(l))
l = rel_project( sql->sa, l,
rel_projections(sql, l, NULL, 1, 1));
+
+ if (is_left(rel->op) && !list_empty(rel->attr))
{
+ assert(list_length(rel->exps)==1);
+ sql_exp *e = rel->exps->h->data;
+ sql_exp *oe = rel->attr->h->data;
+ rel_project_add_exp(sql, l, e);
+ exp_setname(sql->sa, e,
exp_relname(oe), exp_name(oe));
+ }
if (!list_empty(r->exps)) {
for (m=r->exps->h; m; m = m->next) {
sql_exp *e = m->data;
@@ -933,9 +941,8 @@ push_up_project(mvc *sql, sql_rel *rel,
sql_rel *n = rel_project( sql->sa, (r->l)?rel:rel->l,
rel_projections(sql, rel->l, NULL, 1,
1));
- if (is_left(rel->op) && !list_empty(rel->attr)) {
+ if (is_left(rel->op) && !list_empty(rel->attr))
rel_project_add_exp(sql, n, exp_ref(sql,
rel->attr->h->data));
- }
if (list_empty(rel->attr) && !list_empty(r->exps)) {
for (m=r->exps->h; m; m = m->next) {
sql_exp *e = m->data;
@@ -1166,9 +1173,19 @@ push_up_groupby(mvc *sql, sql_rel *rel,
assert(id);
}
- assert(rel->op != op_anti);
+ //assert(rel->op != op_anti);
if (rel->op == op_semi)
rel->op = op_join;
+ if (rel->op == op_anti) {
+ rel->op = op_join;
+ /* need to change all exps */
+ if (!list_empty(rel->exps)) {
+ for(node *n = rel->exps->h; n; n =
n->next) {
+ sql_exp *e = n->data;
+ e->anti = !e->anti;
+ }
+ }
+ }
if (!list_empty(r->exps)) {
for (n = r->exps->h; n; n = n->next ) {
diff --git a/sql/test/SQLancer/Tests/sqlancer23.test
b/sql/test/SQLancer/Tests/sqlancer23.test
--- a/sql/test/SQLancer/Tests/sqlancer23.test
+++ b/sql/test/SQLancer/Tests/sqlancer23.test
@@ -43,13 +43,13 @@ ON vy.vc0 LIKE y.y) FROM (SELECT DISTINC
----
1
-#query I nosort
-#SELECT 3 <> ALL(VALUES (vz.z)) FROM ((SELECT 1) INTERSECT DISTINCT (SELECT
2)) vz(z)
-#----
+query I nosort
+SELECT 3 <> ALL(VALUES (vz.z)) FROM ((SELECT 1) INTERSECT DISTINCT (SELECT 2))
vz(z)
+----
-#query I nosort
-#SELECT 1 FROM (SELECT DISTINCT 2) vx(vc1) WHERE NOT EXISTS (VALUES (TRUE),
(EXISTS (SELECT vx.vc1)))
-#----
+query I nosort
+SELECT 1 FROM (SELECT DISTINCT 2) vx(vc1) WHERE NOT EXISTS (VALUES (TRUE),
(EXISTS (SELECT vx.vc1)))
+----
statement ok
create view vy(vc0) as ((select 'a') union all (select z.z from (SELECT 1) y(y)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]