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

Modified Files:
        rel_optimizer.mx rel_updates.mx 
Log Message:
improved push select through op_lefts left side and op_rights right side


U rel_updates.mx
Index: rel_updates.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_updates.mx,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- rel_updates.mx      15 Aug 2009 18:14:41 -0000      1.7
+++ rel_updates.mx      13 Sep 2009 11:23:25 -0000      1.8
@@ -555,13 +555,11 @@
                return sql_error(sql, 02, "COPY INTO: no such table '%s'", 
tname);
        }
        if (files) {
-               //list *slist = create_stmt_list();
                dnode *n = files->h;
 
                for (; n; n = n->next) {
                        char *fname = n->data.sval;
 
-                       //list_append(slist, xxx);
                        return rel_import(sql, t, tsep, rsep, ssep, ns, fname, 
nr, offset);
                }
        }

U rel_optimizer.mx
Index: rel_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_optimizer.mx,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- rel_optimizer.mx    19 Aug 2009 19:53:27 -0000      1.69
+++ rel_optimizer.mx    13 Sep 2009 11:23:24 -0000      1.70
@@ -1316,11 +1316,12 @@
 {
        sql_rel *l = rel->l;
        sql_rel *r = rel->r;
+       sql_rel *ref = NULL;
 
        if (rel->op == op_union && 
            l && is_project(l->op) && !project_unsafe(l) &&
            r && is_project(r->op) && !project_unsafe(r) &&     
-           rel_find_ref(l) && rel_find_ref(l) == rel_find_ref(r)) {
+           (ref = rel_find_ref(l)) != NULL && ref == rel_find_ref(r)) {
                /* Find selects and try to merge */
                sql_rel *ls = rel_find_select(l), *nls;
                sql_rel *rs = rel_find_select(r);
@@ -1338,7 +1339,7 @@
                if (!rel_match_projections(l,r)) 
                        return rel;
 
-               /* for now only union(project*(select(R),project*(selectR))) */
+               /* for now only union(project*(select(R),project*(select(R))) */
                if (ls != l->l || rs != r->l || 
                    ls->l != rs->l || !rel_is_ref(ls->l))
                        return rel;
@@ -1664,9 +1665,14 @@
                return rel_merge_projects(changes, sql, rel);
 
        /* push select through join */
-       if (rel->op == op_select && r && r->op == op_join && !(rel_is_ref(r))) {
+       if (rel->op == op_select && r && is_join(r->op) && !(rel_is_ref(r))) {
                sql_rel *jl = r->l;
                sql_rel *jr = r->r;
+               int left = r->op == op_join || r->op == op_left;
+               int right = r->op == op_join || r->op == op_right;
+
+               if (r->op == op_full)
+                       return rel;
 
                /* introduce selects under the join (if needed) */
                if (!is_select(jl->op))
@@ -1679,11 +1685,12 @@
                        sql_exp *e = n->data, *ne = NULL;
                        int done = 0;
        
-                       ne = exp_push_down(sql, e, jl, jl);
+                       if (left)
+                               ne = exp_push_down(sql, e, jl, jl);
                        if (ne && ne != e) {
                                done = 1; 
                                rel_select_add_exp(jl, ne);
-                       } else {
+                       } else if (right) {
                                ne = exp_push_down(sql, e, jr, jr);
                                if (ne && ne != e) {
                                        done = 1; 


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to