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

Reply via email to