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