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