Changeset: b232610d9c87 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b232610d9c87
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: Dec2016
Log Message:
fixed crash in full outer joins with only range expressions (or-ed together).
see bug 6256
diffs (43 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1707,7 +1707,11 @@ rel2bin_join( mvc *sql, sql_rel *rel, li
prop *p;
/* only handle simple joins here */
- if (exp_has_func(e) && e->flag != cmp_filter) {
+ if ((exp_has_func(e) && e->flag != cmp_filter) ||
+ (e->flag == cmp_or &&
+ exps_card(e->l) == CARD_MULTI &&
+ exps_card(e->r) == CARD_MULTI)
+ ) {
if (!join && !list_length(lje)) {
stmt *l = bin_first_column(sql->sa,
left);
stmt *r = bin_first_column(sql->sa,
right);
@@ -1911,6 +1915,12 @@ rel2bin_semijoin( mvc *sql, sql_rel *rel
/* only handle simple joins here */
if (list_length(lje) && (idx || e->type != e_cmp ||
e->flag != cmp_equal))
break;
+ if ((exp_has_func(e) && e->flag != cmp_filter) ||
+ (e->flag == cmp_or &&
+ exps_card(e->l) == CARD_MULTI &&
+ exps_card(e->r) == CARD_MULTI) ) {
+ break;
+ }
s = exp_bin(sql, en->data, left, right, NULL, NULL,
NULL, NULL);
if (!s) {
@@ -1934,8 +1944,12 @@ rel2bin_semijoin( mvc *sql, sql_rel *rel
}
if (list_length(lje) > 1) {
join = releqjoin(sql, lje, rje, 0 /* no hash used */,
cmp_equal, 0);
+ } else if (!join && list_length(lje) == list_length(rje) &&
list_length(lje)) {
+ join = stmt_join(sql->sa, lje->h->data, rje->h->data,
cmp_equal);
} else if (!join) {
- join = stmt_join(sql->sa, lje->h->data, rje->h->data,
cmp_equal);
+ stmt *l = bin_first_column(sql->sa, left);
+ stmt *r = bin_first_column(sql->sa, right);
+ join = stmt_join(sql->sa, l, r, cmp_all);
}
} else {
stmt *l = bin_first_column(sql->sa, left);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list