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