Changeset: e3393cf00745 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e3393cf00745
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_optimizer.c
        sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out
        sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
Branch: default
Log Message:

also push crossproduct down through union's


diffs (66 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1432,8 +1432,12 @@ list *
 exps_copy( sql_allocator *sa, list *exps)
 {
        node *n;
-       list *nl = new_exp_list(sa);
+       list *nl;
 
+       if (!exps)
+               return exps;
+
+       nl = new_exp_list(sa);
        for(n = exps->h; n; n = n->next) {
                sql_exp *arg = n->data;
 
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
@@ -3489,10 +3489,10 @@ rel_uses_part_nr( sql_rel *rel, sql_exp 
 static sql_rel *
 rel_push_join_down_union(int *changes, mvc *sql, sql_rel *rel) 
 {
-       if (((is_join(rel->op) && !is_outerjoin(rel->op)) || is_semi(rel->op)) 
&& !list_empty(rel->exps)) {
+       if ((is_join(rel->op) && !is_outerjoin(rel->op)) || is_semi(rel->op)) {
                sql_rel *l = rel->l, *r = rel->r, *ol = l, *or = r;
                list *exps = rel->exps;
-               sql_exp *je = exps->h->data;
+               sql_exp *je = !list_empty(exps)?exps->h->data:NULL;
 
                if (!l || !r || need_distinct(l) || need_distinct(r))
                        return rel;
@@ -3503,7 +3503,7 @@ rel_push_join_down_union(int *changes, m
 
                /* both sides only if we have a join index */
                if (!l || !r ||(is_union(l->op) && is_union(r->op) && 
-                       !find_prop(je->p, PROP_JOINIDX) && /* FKEY JOIN */
+                       je && !find_prop(je->p, PROP_JOINIDX) && /* FKEY JOIN */
                        !rel_is_join_on_pkey(rel))) /* aligned PKEY JOIN */
                        return rel;
 
diff --git a/sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out 
b/sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out
--- a/sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out
+++ b/sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out
@@ -28,7 +28,7 @@ Ready.
 [ 1    ]
 [ 1    ]
 #select * from tables, x limit 10;
-% .tables,     .tables,        .tables,        .tables,        .tables,        
.tables,        .tables,        .tables,        .tables,        sys.x,  sys.x # 
table_name
+% .tables,     .tables,        .tables,        .tables,        .tables,        
.tables,        .tables,        .tables,        .tables,        .x,     .x # 
table_name
 % id,  name,   schema_id,      query,  type,   system, commit_action,  
readonly,       temporary,      n,      s # name
 % int, varchar,        int,    varchar,        smallint,       boolean,        
smallint,       boolean,        tinyint,        int,    varchar # type
 % 4,   9,      4,      0,      1,      5,      1,      5,      1,      1,      
5 # length
diff --git 
a/sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out 
b/sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
--- a/sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
+++ b/sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
@@ -31,7 +31,7 @@ Ready.
 #      where t.name IN ('args', 'columns', 'functions', 'idxs',
 #              'objects', 'keys', 'modules', 'sequences')
 #      group by s.name having count(*) > char_length(s.name);
-% sys.s,       sys.L1, sys.L2 # table_name
+% .s,  .L1,    .L2 # table_name
 % name,        L1,     L2 # name
 % varchar,     int,    wrd # type
 % 4,   1,      2 # length
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to