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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list