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