Update of /cvsroot/monetdb/sql/src/server
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv30640/src/server

Modified Files:
        rel_select.mx 
Log Message:
fix distinct for (or) handling


U rel_select.mx
Index: rel_select.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_select.mx,v
retrieving revision 1.108
retrieving revision 1.109
diff -u -d -r1.108 -r1.109
--- rel_select.mx       27 Dec 2008 17:24:16 -0000      1.108
+++ rel_select.mx       27 Dec 2008 21:24:49 -0000      1.109
@@ -2220,6 +2220,25 @@
        }
 }
 
+static sql_rel *
+rel_add_identity(mvc *sql, sql_rel *rel, sql_exp **exp) 
+{
+       list *exps = rel_projections(sql, rel, NULL, 1, 1);
+       sql_exp *e; 
+
+       if (list_length(exps) == 0) {
+               list_destroy(exps);
+               *exp = NULL;
+               return rel;
+       }
+       rel = rel_project(rel, rel_projections(sql, rel, NULL, 1, 1));
+       e = rel_unop_(sql, exp_dup(rel->exps->h->data), NULL, "identity");
+       set_intern(e);
+       rel_project_add_exp(sql, rel, e);
+       *exp = e = exp_label(e, ++sql->label);
+       return rel;
+}
+
 sql_rel *
 rel_logical_exp(mvc *sql, sql_rel *rel, symbol *sc, int f)
 {
@@ -2237,37 +2256,19 @@
                symbol *lo = sc->data.lval->h->data.sym;
                symbol *ro = sc->data.lval->h->next->data.sym;
 
-               sql_rel *lr = rel;
-               sql_rel *rr = rel_copy(rel);
-
-               lr = rel_logical_exp(sql, lr, lo, f);
-               rr = rel_logical_exp(sql, rr, ro, f);
-
-               if (!lr || !rr)
-                       return NULL;
-               return rel_or(sql, lr, rr, f);
+               sql_rel *lr, *rr;
+               sql_exp *e = NULL;
 
-               /*char *name;
-               sql_rel *lr, *rr;*/
+               lr = rel_add_identity(sql, rel, &e);
+               rr = rel_copy(lr);
+               (void)e;
 
-/* don't name them, else rel_bin cannot find the correct stmts 
-               rel = rel_label(sql, rel);
-               name = rel->name;
-               stack_push_rel_view(sql, name, rel);
-               lr = stack_find_rel_view(sql, name);
-               rr = stack_find_rel_view(sql, name);
-*/
-/*
-               lr = rel_dup(rel);
-               rr = rel_dup(rel);
-               
                lr = rel_logical_exp(sql, lr, lo, f);
                rr = rel_logical_exp(sql, rr, ro, f);
 
                if (!lr || !rr)
                        return NULL;
                return rel_or(sql, lr, rr, f);
-*/
        }
        case SQL_AND:
        {
@@ -2427,11 +2428,8 @@
                           generate row id's which we use in the anti/semi
                           join expression.
                         */
-                       rel = rel_project(rel, rel_projections(sql, rel, NULL, 
1, 1));
                        exps = rel_projections(sql, rel, NULL, 1, 1);
-                       e = rel_unop_(sql, exp_dup(rel->exps->h->data), NULL, 
"identity");
-                       rel_project_add_exp(sql, rel, e);
-                       e = exp_label(e, ++sql->label);
+                       rel = rel_add_identity(sql, rel, &e);
 
                        /* TODO double dup to make sure we reference the rel */
                        r = rel_subquery(sql, rel_dup(rel_dup(rel)), lo, ek);


------------------------------------------------------------------------------
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to