Changeset: bae3c5ac6652 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bae3c5ac6652 Modified Files: sql/backends/monet5/rel_bin.c sql/test/bugs/Tests/rtrim_bug.stable.out Branch: Oct2020 Log Message:
Fix for rtrim bug. At rel2bin_semijoin, equality expressions with function calls require materialization of the left relation diffs (46 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 @@ -2516,6 +2516,8 @@ rel2bin_antijoin(backend *be, sql_rel *r return stmt_list(be, l); } +#define complex_join_expression(e) (exp_has_func(e) && (e)->flag != cmp_filter) || (e)->flag == cmp_or || ((e)->f && (e)->anti) + static stmt * rel2bin_semijoin(backend *be, sql_rel *rel, list *refs) { @@ -2560,10 +2562,8 @@ rel2bin_semijoin(backend *be, sql_rel *r int idx = 0, equality_only = 1; jexps = get_equi_joins_first(sql, jexps, &equality_only); - if (!equality_only || list_length(jexps) > 1) { + if (!equality_only || list_length(jexps) > 1 || complex_join_expression((sql_exp*)jexps->h->data)) left = subrel_project(be, left, refs, rel->l); - equality_only = 0; - } right = subrel_project(be, right, refs, rel->r); for( en = jexps->h; en; en = en->next ) { @@ -2572,8 +2572,7 @@ rel2bin_semijoin(backend *be, sql_rel *r stmt *s = NULL; /* only handle simple joins here */ - if ((exp_has_func(e) && e->flag != cmp_filter) || - e->flag == cmp_or || (e->f && e->anti)) { + if (complex_join_expression(e)) { if (!join && !list_length(lje)) { stmt *l = bin_first_column(be, left); stmt *r = bin_first_column(be, right); diff --git a/sql/test/bugs/Tests/rtrim_bug.stable.out b/sql/test/bugs/Tests/rtrim_bug.stable.out --- a/sql/test/bugs/Tests/rtrim_bug.stable.out +++ b/sql/test/bugs/Tests/rtrim_bug.stable.out @@ -47,7 +47,7 @@ stdout of test 'rtrim_bug` in directory % sys., sys. # table_name % data_length, data_value # name % int, varchar # type -% 1, 1 # length +% 1, 0 # length #DROP VIEW v1; #DROP VIEW v2; #DROP TABLE t1; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list