Changeset: c947f8b35d58 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c947f8b35d58
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: Jun2020
Log Message:

backported df9f64e326f2 : Don't generate the same column/index bind statement 
twice


diffs (79 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
@@ -1548,16 +1548,12 @@ rel2bin_basetable(backend *be, sql_rel *
 {
        mvc *sql = be->mvc;
        sql_table *t = rel->l;
-       sql_column *c = rel->r;
+       sql_column *fcol = NULL;
+       sql_idx *fi = NULL;
        list *l = sa_list(sql->sa);
-       stmt *dels, *col = NULL;
+       stmt *dels = stmt_tid(be, t, rel->flag == REL_PARTITION), *col = NULL;
        node *en;
 
-       if (!t && c)
-               t = c->t;
-
-       dels = stmt_tid(be, t, rel->flag == REL_PARTITION);
-
        /* add aliases */
        assert(rel->exps);
        for( en = rel->exps->h; en && !col; en = en->next ) {
@@ -1572,10 +1568,12 @@ rel2bin_basetable(backend *be, sql_rel *
                        /* do not include empty indices in the plan */
                        if ((hash_index(i->type) && list_length(i->columns) <= 
1) || !idx_has_column(i->type))
                                continue;
+                       fi = i;
                        col = stmt_idx(be, i, NULL/*dels*/, dels->partition);
                } else {
                        sql_column *c = find_sql_column(t, oname);
 
+                       fcol = c;
                        col = stmt_col(be, c, NULL/*dels*/, dels->partition);
                }
        }
@@ -1585,26 +1583,8 @@ rel2bin_basetable(backend *be, sql_rel *
                const char *oname = exp->r;
                stmt *s = NULL;
 
-               if (is_func(exp->type)) {
-                       assert(0);
-                       list *exps = exp->l;
-                       sql_exp *cexp = exps->h->data;
-                       const char *cname = cexp->r;
-                       list *l = sa_list(sql->sa);
-
-                       c = find_sql_column(t, cname);
-                       s = stmt_col(be, c, NULL/*dels*/, dels->partition);
-                       append(l, s);
-                       if (exps->h->next) {
-                               sql_exp *at = exps->h->next->data;
-                               stmt *u = exp_bin(be, at, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL, 0, 0);
-                               if(!u)
-                                       return NULL;
-
-                               append(l, u);
-                       }
-                       s = stmt_Nop(be, stmt_list(be, l), exp->f);
-               } else if (oname[0] == '%' && strcmp(oname, TID) == 0) {
+               assert(!is_func(exp->type));
+               if (oname[0] == '%' && strcmp(oname, TID) == 0) {
                        /* tid function  sql.tid(t) */
                        const char *rnme = t->base.name;
 
@@ -1619,11 +1599,11 @@ rel2bin_basetable(backend *be, sql_rel *
                        /* do not include empty indices in the plan */
                        if ((hash_index(i->type) && list_length(i->columns) <= 
1) || !idx_has_column(i->type))
                                continue;
-                       s = stmt_idx(be, i, NULL/*dels*/, dels->partition);
+                       s = (i == fi) ? col : stmt_idx(be, i, NULL/*dels*/, 
dels->partition);
                } else {
                        sql_column *c = find_sql_column(t, oname);
 
-                       s = stmt_col(be, c, NULL/*dels*/, dels->partition);
+                       s = (c == fcol) ? col : stmt_col(be, c, NULL/*dels*/, 
dels->partition);
                }
                s->tname = rname;
                s->cname = exp_name(exp);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to