Changeset: 23ae03961f93 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23ae03961f93
Modified Files:
        sql/server/rel_optimizer.c
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
Branch: default
Log Message:

Merge with Oct2012 branch.


diffs (99 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1332,13 +1332,15 @@ exps_can_push_func(list *exps, sql_rel *
 static sql_rel *
 rel_push_func_down(int *changes, mvc *sql, sql_rel *rel) 
 {
-       if ((is_select(rel->op) || is_join(rel->op) || is_semi(rel->op)) && 
rel->l && rel->exps) {
-               sql_rel *l = rel->l;
-               sql_rel *r = rel->r;
+       if ((is_select(rel->op) || is_join(rel->op) || is_semi(rel->op)) && 
rel->l && rel->exps && !(rel_is_ref(rel))) {
                list *exps = rel->exps;
-               node *n;
 
                if (exps_can_push_func(exps, rel)) {
+                       sql_rel *nrel;
+                       sql_rel *l = rel->l, *ol = l;
+                       sql_rel *r = rel->r, *or = r;
+                       node *n;
+
                        /* we need a full projection, group by's and unions 
cannot be extended
                         * with more expressions */
                        if (l->op != op_project) { 
@@ -1353,6 +1355,7 @@ rel_push_func_down(int *changes, mvc *sq
                                rel->r = r = rel_project(sql->sa, r, 
                                        rel_projections(sql, r, NULL, 1, 1));
                        }
+                       nrel = rel_project(sql->sa, rel, rel_projections(sql, 
rel, NULL, 1, 1));
                        for(n = exps->h; n; n = n->next) {
                                sql_exp *e = n->data, *ne = NULL;
                                int must = 0, mustl = 0, mustr = 0;
@@ -1372,6 +1375,7 @@ rel_push_func_down(int *changes, mvc *sq
                                                                append(l->exps, 
e);
                                                        e = exp_column(sql->sa, 
exp_relname(e), exp_name(e), exp_subtype(e), e->card, has_nil(e), is_intern(e));
                                                        n->data = e;
+                                                       (*changes)++;
                                                }
                                        } else {
                                                ne = e->l;
@@ -1383,6 +1387,7 @@ rel_push_func_down(int *changes, mvc *sq
                                                        else
                                                                append(l->exps, 
ne);
                                                        ne = 
exp_column(sql->sa, exp_relname(ne), exp_name(ne), exp_subtype(ne), ne->card, 
has_nil(ne), is_intern(ne));
+                                                       (*changes)++;
                                                }
                                                e->l = ne;
 
@@ -1396,6 +1401,7 @@ rel_push_func_down(int *changes, mvc *sq
                                                        else
                                                                append(l->exps, 
ne);
                                                        ne = 
exp_column(sql->sa, exp_relname(ne), exp_name(ne), exp_subtype(ne), ne->card, 
has_nil(ne), is_intern(ne));
+                                                       (*changes)++;
                                                }
                                                e->r = ne;
 
@@ -1410,13 +1416,21 @@ rel_push_func_down(int *changes, mvc *sq
                                                                else
                                                                        
append(l->exps, ne);
                                                                ne = 
exp_column(sql->sa, exp_relname(ne), exp_name(ne), exp_subtype(ne), ne->card, 
has_nil(ne), is_intern(ne));
+                                                               (*changes)++;
                                                        }
                                                        e->f = ne;
                                                }
                                        }
-                                       (*changes)++;
                                }
                        }
+                       if (*changes) {
+                               rel = nrel;
+                       } else {
+                               if (l != ol)
+                                       rel->l = ol;
+                               if (is_join(rel->op) && r != or)
+                                       rel->r = or;
+                       }
                }
        }
        if (rel->op == op_project && rel->l && rel->exps) {
diff --git a/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out 
b/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
--- a/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
+++ b/sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
@@ -76,7 +76,7 @@ Operation successful
 +---------------------------------------------------------------------+
 | mal                                                                 |
 +=====================================================================+
-| function user.s2_1{autoCommit=true}():void;                         |
+| function user.s1_1{autoCommit=true}():void;                         |
 |     X_3:bat[:oid,:wrd]  := bat.new(nil:oid,nil:wrd);                |
 |     X_2 := sql.mvc();                                               |
 |     X_6:bat[:oid,:sht]  := sql.bind(X_2,"sys","_tables","type",0);  |
@@ -117,7 +117,7 @@ Operation successful
 |     X_61 := algebra.selectNotNil(X_59);                             |
 |     X_62:wrd  := aggr.sum(X_61);                                    |
 |     sql.exportValue(1,".tables","L1","wrd",64,0,6,X_62,"");         |
-| end s2_1;                                                           |
+| end s1_1;                                                           |
 +---------------------------------------------------------------------+
 42 rows
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to