Changeset: c7b647b886b4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c7b647b886b4
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
Branch: Jan2022
Log Message:

fixed un aligned access, ie make sure we project if we have a sub relation 
(could be empty, while constant is one row)

if cross product has freevars on left side, first swap sides

mark parent as dependent for subquery in 'in'


diffs (45 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
@@ -2862,6 +2862,8 @@ rel2bin_semijoin(backend *be, sql_rel *r
                                        int oldvtop = be->mb->vtop, oldstop = 
be->mb->stop, oldvid = be->mb->vid, swap = 0;
                                        stmt *r, *l = exp_bin(be, e->l, left, 
NULL, NULL, NULL, NULL, NULL, 1, 0, 0);
 
+                                       if (l && left && l->nrcols==0 && 
left->nrcols >0)
+                                               l = stmt_const(be, 
bin_find_smallest_column(be, left), l);
                                        if (!l) {
                                                swap = 1;
                                                clean_mal_statements(be, 
oldstop, oldvtop, oldvid);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1959,6 +1959,8 @@ rel_in_value_exp(sql_query *query, sql_r
                        } else if (exp_is_rel(re)) {
                                sql_rel *r = exp_rel_get_rel(sql->sa, re);
                                add_select = 1;
+                               if (*rel)
+                                       set_dependent((*rel));
                                if (is_project(r->op) && is_project_true(r->l) 
&& list_length(r->exps) == 1)
                                        re = r->exps->h->data;
                        }
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -1481,8 +1481,15 @@ rel_unnest_dependent(mvc *sql, sql_rel *
                }
 
                if (!rel_has_freevar(sql, r)) {
-                       reset_dependent(rel);
-                       return rel;
+                       if (rel_has_freevar(sql, l) && is_join(rel->op) && 
!rel->exps) {
+                               rel->l = r;
+                               rel->r = l;
+                               l = rel->l;
+                               r = rel->r;
+                       } else {
+                               reset_dependent(rel);
+                               return rel;
+                       }
                }
 
                /* try to push dependent join down */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to