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