Changeset: f33773f721a8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f33773f721a8
Modified Files:
        sql/backends/monet5/sql_gencode.mx
        sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
        sql/benchmarks/tpch/Tests/01-22.stable.out
        sql/benchmarks/tpch/Tests/02.stable.out
        sql/benchmarks/tpch/Tests/17.stable.out
        sql/server/rel_optimizer.c
        sql/server/rel_prop.c
        sql/server/rel_prop.h
        sql/server/rel_select.c
        sql/storage/bat/bat_storage.c
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/create_view_with_check_options.SF-1314951.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/view_on_deleted_table.SF-938583.stable.out
        
sql/test/BugTracker-2008/Tests/view_reply_incorrect.SF-2075097.stable.out
        
sql/test/BugTracker-2009/Tests/cardinality_of_expression_is_wrong.SF-2581617.stable.out
        
sql/test/BugTracker-2009/Tests/lookup_column_name_bug_1.SF-2654300.stable.out
        
sql/test/BugTracker-2009/Tests/lookup_column_name_bug_2.SF-2656762.stable.out
        sql/test/BugTracker-2010/Tests/select-view-key.Bug-2673.stable.out
        sql/test/BugTracker-2010/Tests/with_row_number_crash.Bug-2631.stable.out
        sql/test/BugTracker-2011/Tests/merge_range_exp.Bug-2806.stable.out
        sql/test/BugTracker-2011/Tests/nested_select.Bug-2801.stable.out
        
sql/test/BugTracker/Tests/nested_views_algebra_version.SF-1993765.stable.out
        sql/test/BugTracker/Tests/variable_stack_crash.SF-1711251-2.stable.out
        sql/test/BugTracker/Tests/variable_stack_crash.SF-1711251.stable.out
        sql/test/BugTracker/Tests/with_only_once.SF-1720293.stable.out
        sql/test/Tests/create_in_schema.stable.out
        
sql/test/mserver5-sql-readonly/Tests/mserver5-sql-readonly-view.stable.out
        sql/test/osm/Tests/exp_name_bug.stable.out
        sql/test/xquery/Tests/q01.stable.out
Branch: Apr2011
Log Message:

fix push select down.
backported number of fixes from default branch (may give conflicts.(shouldn't 
;-(


diffs (truncated from 1021 to 300 lines):

diff --git a/sql/backends/monet5/sql_gencode.mx 
b/sql/backends/monet5/sql_gencode.mx
--- a/sql/backends/monet5/sql_gencode.mx
+++ b/sql/backends/monet5/sql_gencode.mx
@@ -1629,7 +1629,7 @@
                        char *n = (s->type==st_append_col)?appendRef:updateRef;
 
                        if (s->type == st_append_col && s->flag) { /* fake 
append */
-                               sql->mvc_var = s->nr = r;
+                               s->nr = r;
                        } else {
                                q = newStmt2(mb, sqlRef, n);
                                q = pushArgument(mb, q, sql->mvc_var); 
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
@@ -59,7 +59,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   7       ]
+[ "joinidx",   6       ]
 
 # 11:48:05 >  
 # 11:48:05 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=localhost --port=35781
@@ -855,7 +855,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   1       ]
+[ "joinidx",   0       ]
 
 # 11:48:06 >  
 # 11:48:06 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=localhost --port=35781
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
@@ -37,7 +37,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   7       ]
+[ "joinidx",   6       ]
 
 # 09:17:12 >  
 # 09:17:12 >  Done.
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/17.stable.out
@@ -33,7 +33,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   1       ]
+[ "joinidx",   0       ]
 
 # 09:17:19 >  
 # 09:17:19 >  Done.
diff --git a/sql/benchmarks/tpch/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/Tests/01-22.stable.out
@@ -59,7 +59,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   7       ]
+[ "joinidx",   6       ]
 
 # 11:48:05 >  
 # 11:48:05 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=localhost --port=35781
@@ -855,7 +855,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   1       ]
+[ "joinidx",   0       ]
 
 # 11:48:06 >  
 # 11:48:06 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=localhost --port=35781
diff --git a/sql/benchmarks/tpch/Tests/02.stable.out 
b/sql/benchmarks/tpch/Tests/02.stable.out
--- a/sql/benchmarks/tpch/Tests/02.stable.out
+++ b/sql/benchmarks/tpch/Tests/02.stable.out
@@ -37,7 +37,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   7       ]
+[ "joinidx",   6       ]
 
 # 09:17:12 >  
 # 09:17:12 >  Done.
diff --git a/sql/benchmarks/tpch/Tests/17.stable.out 
b/sql/benchmarks/tpch/Tests/17.stable.out
--- a/sql/benchmarks/tpch/Tests/17.stable.out
+++ b/sql/benchmarks/tpch/Tests/17.stable.out
@@ -33,7 +33,7 @@
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   1       ]
+[ "joinidx",   0       ]
 
 # 09:17:19 >  
 # 09:17:19 >  Done.
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
@@ -211,7 +211,7 @@
        switch (rel->op) {
        case op_basetable:
        case op_table:
-               rel->p = prop_create(PROP_COUNT, rel->p);
+               rel->p = prop_create(sql->sa, PROP_COUNT, rel->p);
                break;
        case op_join: 
                join_properties(rel);
@@ -502,6 +502,7 @@
        switch(r->op) {
        case op_basetable:      
                return r;
+       case op_project:
        case op_select:
                return find_basetable(r->l);
        default:
@@ -606,7 +607,7 @@
                                        je->l = je->r;
                                        je->r = s;
                                }
-                               je->p = p = prop_create(PROP_JOINIDX, je->p);
+                               je->p = p = prop_create(sa, PROP_JOINIDX, 
je->p);
                                p->value = idx;
                        }
                        lcols->destroy = NULL;
@@ -963,30 +964,29 @@
                        list *l = exps_rename(sql, e->l, f, t);
                        list *r = exps_rename(sql, e->r, f, t);
                        if (l && r)
-                               return exp_or(sql->sa, l,r);
+                               ne = exp_or(sql->sa, l,r);
                } else if (e->flag == cmp_in || e->flag == cmp_notin) {
                        sql_exp *l = exp_rename(sql, e->l, f, t);
                        list *r = exps_rename(sql, e->r, f, t);
                        if (l && r)
-                               return exp_in(sql->sa, l, r, e->flag);
+                               ne = exp_in(sql->sa, l, r, e->flag);
                } else {
                        l = exp_rename(sql, e->l, f, t);
                        r = exp_rename(sql, e->r, f, t);
                        if (e->f) {
                                r2 = exp_rename(sql, e->f, f, t);
                                if (l && r && r2)
-                                       return exp_compare2(sql->sa, l, r, r2, 
e->flag);
+                                       ne = exp_compare2(sql->sa, l, r, r2, 
e->flag);
                        } else if (l && r) {
-                               return exp_compare(sql->sa, l, r, e->flag);
+                               ne = exp_compare(sql->sa, l, r, e->flag);
                        }
                }
-               return NULL;
+               break;
        case e_convert:
                l = exp_rename(sql, e->l, f, t);
                if (l)
-                       return exp_convert(sql->sa, l, exp_fromtype(e), 
exp_totype(e));
-               assert(0);
-               return NULL;
+                       ne = exp_convert(sql->sa, l, exp_fromtype(e), 
exp_totype(e));
+               break;
        case e_aggr:
        case e_func: {
                list *l = e->l, *nl = NULL;
@@ -999,15 +999,17 @@
                                return NULL;
                }
                if (e->type == e_func)
-                       return exp_op(sql->sa, nl, e->f);
+                       ne = exp_op(sql->sa, nl, e->f);
                else 
-                       return exp_aggr(sql->sa, nl, e->f, need_distinct(e), 
need_no_nil(e), e->card, has_nil(e));
+                       ne = exp_aggr(sql->sa, nl, e->f, need_distinct(e), 
need_no_nil(e), e->card, has_nil(e));
+               break;
        }       
        case e_atom:
                return e;
        }
-       assert(0);
-       return NULL;
+       if (ne && e->p)
+               ne->p = prop_copy(sql->sa, e->p);
+       return ne;
 }
 
 /* push the expression down, ie translate colum references 
@@ -1022,7 +1024,7 @@
        node *n;
        list *nl = new_exp_list(sql->sa);
 
-       for(n = exps->h; n; n=n->next) {
+       for(n = exps->h; n; n = n->next) {
                sql_exp *arg = n->data;
 
                arg = _exp_push_down(sql, arg, f, t);
@@ -1041,6 +1043,11 @@
 
        switch(e->type) {
        case e_column:
+               if (is_union(f->op)) {
+                       int p = list_position(f->exps, rel_find_exp(f, e));
+
+                       return list_fetch(t->exps, p);
+               }
                if (e->l) { 
                        ne = rel_bind_column2(sql, f, e->l, e->r, 0);
                        /* if relation name matches expressions relation name, 
find column based on column name alone */
@@ -1052,6 +1059,8 @@
                e = NULL;
                if (ne->name && ne->rname)
                        e = rel_bind_column2(sql, t, ne->rname, ne->name, 0);
+               if (!e && ne->name && !ne->rname)
+                       e = rel_bind_column(sql, t, ne->name, 0);
                if (!e && ne->name && ne->r && ne->l) 
                        e = rel_bind_column2(sql, t, ne->l, ne->r, 0);
                if (!e && ne->r && !ne->l)
@@ -1905,12 +1914,12 @@
  *     groupby ( [ union all( groupby( a, [gbe], [ count, sum] ), [ groupby( 
b, [gbe], [ count, sum] )) , [gbe], [sum, sum] ) 
  */
 static sql_rel *
-rel_push_aggr(int *changes, mvc *sql, sql_rel *rel) 
+rel_push_aggr_down(int *changes, mvc *sql, sql_rel *rel) 
 {
        sql_rel *u = rel->l;
 
        /* TODO disjoint partitions don't need the last group by */
-       if (rel->op == op_groupby && /*(!rel->r || list_length(rel->r) == 0) 
&&*/
+       if (rel->op == op_groupby && 
            u && is_union(u->op) && !need_distinct(u) && u->exps) {
                sql_rel *g = rel;
                sql_rel *l = u->l;
@@ -1918,9 +1927,9 @@
                list *lexps, *rexps;
 
                if (!is_project(l->op)) 
-                       u->l = l = rel_project(sql->sa, l, rel_projections(sql, 
l, NULL, 1, 1));
+                       u->l = l = rel_project(sql->sa, l, rel_projections(sql, 
l, NULL, 1, 0));
                if (!is_project(r->op)) 
-                       u->r = r = rel_project(sql->sa, r, rel_projections(sql, 
r, NULL, 1, 1));
+                       u->r = r = rel_project(sql->sa, r, rel_projections(sql, 
r, NULL, 1, 0));
                lexps = l->exps;
                rexps = r->exps;
                /* make sure we don't create group by on group by's */
@@ -2183,12 +2192,12 @@
                        sql_exp *e = n->data, *ne = NULL;
                        if (e->type == e_cmp) {
                                int err = 0;
-                               ne = exp_push_down(sql, e, r, sl);
+                               ne = exp_push_down(sql, e, r, sl->l);
                                if (ne && ne != e) {
                                        rel_select_add_exp(sl, ne);
                                } else 
                                        err = 1;
-                               ne = exp_push_down(sql, e, r, sr);
+                               ne = exp_push_down(sql, e, r, sr->l);
                                if (ne && ne != e) {
                                        rel_select_add_exp(sr, ne);
                                } else 
@@ -2990,7 +2999,8 @@
                for (n = l->h; n; n = n->next) {
                        sql_exp *e = n->data;
        
-                       e->used = 1;
+                       if (e)
+                               e->used = 1;
                }
        }
 }
@@ -3094,6 +3104,7 @@
 }
 
 static sql_rel * rel_dce_sub(mvc *sql, sql_rel *rel);
+static sql_rel * rel_dce(mvc *sql, sql_rel *rel);
 
 static sql_rel *
 rel_remove_unused(mvc *sql, sql_rel *rel) 
@@ -3102,7 +3113,12 @@
                return rel;
 
        switch(rel->op) {
-       case op_basetable:
+       case op_basetable: {
+               sql_table *t = rel->l;
+
+               if (isMergeTable(t)) 
+                       return rel;
+       }
        case op_table:
                if (rel->exps) {
                        node *n;
@@ -3167,9 +3183,6 @@
        return rel;
 }
 
-static sql_rel * rel_dce(mvc *sql, sql_rel *rel);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to