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]

Reply via email to