Changeset: 4424f1801849 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4424f1801849
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/rel_physical.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/backends/monet5/vaults/csv/csv.c
        sql/include/sql_relation.h
        sql/server/rel_basetable.c
        sql/server/rel_basetable.h
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimize_exps.c
        sql/server/rel_optimize_others.c
        sql/server/rel_optimize_proj.c
        sql/server/rel_optimize_sel.c
        sql/server/rel_optimizer.c
        sql/server/rel_propagate.c
        sql/server/rel_psm.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_semantic.c
        sql/server/rel_statistics.c
        sql/server/rel_unnest.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/test/BugTracker-2023/Tests/misc-crashes-7390.test
        sql/test/BugTracker-2024/Tests/atom_cmp-Bug-7477.test
Branch: label
Log Message:

create label branch, ie better expression uniques


diffs (truncated from 3922 to 300 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
@@ -246,6 +246,28 @@ bin_find_column(backend *be, stmt *sub, 
        return list_find_column(be, sub->op4.lval, rname, name);
 }
 
+static stmt *
+list_find_column_nid(backend *be, list *l, int label)
+{
+       (void)be;
+       if (!l)
+               return NULL;
+       for (node *n = l->h; n; n = n->next) {
+               stmt *s = n->data;
+
+               if (s->label == label)
+                       return s;
+       }
+       return NULL;
+}
+
+static stmt *
+bin_find_column_nid(backend *be, stmt *sub, int label)
+{
+       list *l = sub->op4.lval;
+       return list_find_column_nid(be, l, label);
+}
+
 static list *
 bin_find_columns(backend *be, stmt *sub, const char *name)
 {
@@ -354,11 +376,13 @@ row2cols(backend *be, stmt *sub)
 
                for (n = sub->op4.lval->h; n; n = n->next) {
                        stmt *sc = n->data;
+                       assert(sc->type == st_alias);
                        const char *cname = column_name(be->mvc->sa, sc);
                        const char *tname = table_name(be->mvc->sa, sc);
+                       int label = sc->label;
 
                        sc = column(be, sc);
-                       list_append(l, stmt_alias(be, sc, tname, cname));
+                       list_append(l, stmt_alias(be, sc, label, tname, cname));
                }
                sub = stmt_list(be, l);
        }
@@ -428,14 +452,16 @@ subrel_project(backend *be, stmt *s, lis
                if (c->type != st_alias) {
                        c = stmt_project(be, cand, c);
                } else if (c->op1->type == st_mirror && is_tid_chain(cand)) { 
/* alias with mirror (ie full row ids) */
-                       c = stmt_alias(be, cand, c->tname, c->cname);
+                       //c = stmt_alias(be, cand, 0, c->tname, c->cname);
+                       c = stmt_as(be, cand, c);
                } else { /* st_alias */
                        stmt *s = c->op1;
                        if (s->nrcols == 0)
                                s = stmt_const(be, cand, s);
                        else
                                s = stmt_project(be, cand, s);
-                       c = stmt_alias(be, s, c->tname, c->cname);
+                       //c = stmt_alias(be, s, c->flag, c->tname, c->cname);
+                       c = stmt_as(be, s, c);
                }
                append(l, c);
        }
@@ -1728,9 +1754,11 @@ exp_bin(backend *be, sql_exp *e, stmt *l
        }       break;
        case e_column: {
                if (right) /* check relation names */
-                       s = bin_find_column(be, right, e->l, e->r);
+                       //s = bin_find_column(be, right, e->l, e->r);
+                       s = bin_find_column_nid(be, right, e->nid);
                if (!s && left)
-                       s = bin_find_column(be, left, e->l, e->r);
+                       //s = bin_find_column(be, left, e->l, e->r);
+                       s = bin_find_column_nid(be, left, e->nid);
                if (s && grp)
                        s = stmt_project(be, ext, s);
                if (!s && right) {
@@ -2080,7 +2108,7 @@ rel2bin_sql_table(backend *be, sql_table
                                        const char *rnme = t->base.name;
 
                                        stmt *sc = dels?dels:stmt_tid(be, t, 0);
-                                       sc = stmt_alias(be, sc, rnme, TID);
+                                       sc = stmt_alias(be, sc, e->alias.label, 
rnme, TID);
                                        list_append(l, sc);
                                } else {
                                        node *m = ol_find_name(t->idxs, name+1);
@@ -2091,7 +2119,7 @@ rel2bin_sql_table(backend *be, sql_table
                                        const char *rnme = t->base.name;
 
                                        /* index names are prefixed, to make 
them independent */
-                                       sc = stmt_alias(be, sc, rnme, 
sa_strconcat(sql->sa, "%", i->base.name));
+                                       sc = stmt_alias(be, sc, e->alias.label, 
rnme, sa_strconcat(sql->sa, "%", i->base.name));
                                        list_append(l, sc);
                                }
                        } else {
@@ -2100,10 +2128,13 @@ rel2bin_sql_table(backend *be, sql_table
                                        assert(0);
                                sql_column *c = m->data;
                                stmt *sc = stmt_col(be, c, dels, 
dels->partition);
+                               sc = stmt_alias(be, sc, e->alias.label, 
exp_relname(e), exp_name(e));
                                list_append(l, sc);
                        }
                }
        } else {
+               assert(0);
+               sql_exp *e = NULL;
                for (n = ol_first_node(t->columns); n; n = n->next) {
                        sql_column *c = n->data;
                        stmt *sc = stmt_col(be, c, dels, dels->partition);
@@ -2116,7 +2147,7 @@ rel2bin_sql_table(backend *be, sql_table
                        const char *rnme = t->base.name;
 
                        stmt *sc = dels?dels:stmt_tid(be, t, 0);
-                       sc = stmt_alias(be, sc, rnme, TID);
+                       sc = stmt_alias(be, sc, e->alias.label, rnme, TID);
                        list_append(l, sc);
                }
                if (t->idxs) {
@@ -2126,7 +2157,7 @@ rel2bin_sql_table(backend *be, sql_table
                                const char *rnme = t->base.name;
 
                                /* index names are prefixed, to make them 
independent */
-                               sc = stmt_alias(be, sc, rnme, 
sa_strconcat(sql->sa, "%", i->base.name));
+                               sc = stmt_alias(be, sc, e->alias.label, rnme, 
sa_strconcat(sql->sa, "%", i->base.name));
                                list_append(l, sc);
                        }
                }
@@ -2179,7 +2210,7 @@ rel2bin_basetable(backend *be, sql_rel *
                assert(!is_func(exp->type));
                if (oname[0] == '%' && strcmp(oname, TID) == 0) {
                        /* tid function  sql.tid(t) */
-                       const char *rnme = t->base.name;
+                       //const char *rnme = t->base.name;
 
                        if (col)
                                s = stmt_mirror(be, col);
@@ -2187,7 +2218,7 @@ rel2bin_basetable(backend *be, sql_rel *
                                s = dels?dels:stmt_tid(be, t, 0);
                                dels = NULL;
                        }
-                       s = stmt_alias(be, s, rnme, TID);
+                       //s = stmt_alias(be, s, exp->alias.label, rnme, TID);
                } else if (oname[0] == '%') {
                        sql_idx *i = find_sql_idx(t, oname+1);
 
@@ -2195,13 +2226,17 @@ rel2bin_basetable(backend *be, sql_rel *
                        if ((hash_index(i->type) && list_length(i->columns) <= 
1) || !idx_has_column(i->type))
                                continue;
                        s = (i == fi) ? col : stmt_idx(be, i, NULL/*dels*/, 
dels->partition);
+                       //s = stmt_alias(be, s, exp->alias.label, rname, 
exp_name(exp));
                } else {
                        sql_column *c = find_sql_column(t, oname);
 
                        s = (c == fcol) ? col : stmt_col(be, c, NULL/*dels*/, 
dels->partition);
-               }
-               s->tname = rname;
-               s->cname = exp_name(exp);
+                       //s = stmt_alias(be, s, exp->alias.label, rname, 
exp_name(exp));
+               }
+               s = stmt_alias(be, s, exp->alias.label, rname, exp_name(exp));
+               //s->tname = rname;
+               //s->cname = exp_name(exp);
+               //s->flag = exp->alias.label;
                list_append(l, s);
        }
        stmt *res = stmt_list(be, l);
@@ -2280,7 +2315,9 @@ exp2bin_args(backend *be, sql_exp *e, li
                        if (!list_find(args, buf, (fcmp)&alias_cmp)) {
                                stmt *s = stmt_var(be, vname->sname, 
vname->name, &e->tpe, 0, e->flag);
 
-                               s = stmt_alias(be, s, NULL, sa_strdup(sql->sa, 
buf));
+                               if (!e->alias.label)
+                                       exp_label(be->mvc->sa, e, 
++be->mvc->label);
+                               s = stmt_alias(be, s, e->alias.label, NULL, 
sa_strdup(sql->sa, buf));
                                list_append(args, s);
                        }
                }
@@ -2378,18 +2415,22 @@ rel2bin_table(backend *be, sql_rel *rel,
                if (l == NULL)
                        return NULL;
 
-               for (n = ol_first_node(ti->t->columns); n; n = n->next) {
+               assert(list_length(rel->exps) == ((ti->type == 2)?2:1) * 
ol_length(ti->t->columns));
+               for (n = ol_first_node(ti->t->columns), en = rel->exps->h; n && 
en; n = n->next, en = en->next) {
                        sql_column *c = n->data;
+                       sql_exp *e = en->data;
 
                        if (ti->type == 2) { /* updates */
                                stmt *s = stmt_col(be, c, ti->tids, 
ti->tids->partition);
-                               append(l, stmt_alias(be, s, ti->on, 
c->base.name));
+                               append(l, stmt_alias(be, s, e->alias.label, 
ti->on, c->base.name));
+                               en = en->next;
+                               e = en->data;
                        }
                        if (ti->updates && ti->updates[c->colnr]) {
-                               append(l, stmt_alias(be, ti->updates[c->colnr], 
ti->nn, c->base.name));
+                               append(l, stmt_alias(be, ti->updates[c->colnr], 
e->alias.label, ti->nn, c->base.name));
                        } else {
                                stmt *s = stmt_col(be, c, ti->tids, 
ti->tids->partition);
-                               append(l, stmt_alias(be, s, ti->nn, 
c->base.name));
+                               append(l, stmt_alias(be, s, e->alias.label, 
ti->nn, c->base.name));
                                assert(ti->type != 1);
                        }
                }
@@ -2452,7 +2493,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                                        const char *rnme = 
exp_relname(exp)?exp_relname(exp):exp->l;
                                        stmt *s = stmt_rs_column(be, psub, i, 
st);
 
-                                       s = stmt_alias(be, s, rnme, 
exp_name(exp));
+                                       s = stmt_alias(be, s, exp->alias.label, 
rnme, exp_name(exp));
                                        list_append(l, s);
                                }
                        } else {
@@ -2525,7 +2566,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                                                sql_exp *exp = m->data;
                                                stmt *s = stmt_rs_column(be, 
psub, i, exp_subtype(exp));
 
-                                               s = stmt_alias(be, s, exp->l, 
exp->r);
+                                               s = stmt_alias(be, s, 
exp->alias.label, exp->l, exp->r);
                                                list_append(l, s);
                                        }
                                }
@@ -2535,13 +2576,14 @@ rel2bin_table(backend *be, sql_rel *rel,
                                        stmt *s = stmt_rs_column(be, psub, i, 
&a->type);
                                        const char *rnme = 
exp_relname(exp)?exp_relname(exp):exp_find_rel_name(op);
 
-                                       s = stmt_alias(be, s, rnme, a->name);
+                                       s = stmt_alias(be, s, exp->alias.label, 
rnme, a->name);
                                        list_append(l, s);
                                }
                        }
                }
                assert(rel->flag != TABLE_PROD_FUNC || !sub || !(sub->nrcols));
                sub = stmt_list(be, l);
+               return sub;
        } else if (rel->l) { /* handle sub query via function */
                int i;
                char name[16], *nme;
@@ -2562,7 +2604,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                        const char *nme = exp_name(c);
                        const char *rnme = exp_relname(c);
 
-                       s = stmt_alias(be, s, rnme, nme);
+                       s = stmt_alias(be, s, c->alias.label, rnme, nme);
                        list_append(l, s);
                }
                sub = stmt_list(be, l);
@@ -2577,7 +2619,8 @@ rel2bin_table(backend *be, sql_rel *rel,
        for (en = rel->exps->h; en; en = en->next) {
                sql_exp *exp = en->data;
                const char *rnme = exp_relname(exp)?exp_relname(exp):exp->l;
-               stmt *s = bin_find_column(be, sub, exp->l, exp->r);
+               //stmt *s = bin_find_column(be, sub, exp->l, exp->r);
+               stmt *s = bin_find_column_nid(be, sub, exp->nid);
 
                if (!s) {
                        assert(sql->session->status == -10); /* Stack overflow 
errors shouldn't terminate the server */
@@ -2585,7 +2628,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                }
                if (sub && sub->nrcols >= 1 && s->nrcols == 0)
                        s = stmt_const(be, bin_find_smallest_column(be, sub), 
s);
-               s = stmt_alias(be, s, rnme, exp_name(exp));
+               s = stmt_alias(be, s, exp->alias.label, rnme, exp_name(exp));
                list_append(l, s);
        }
        if (osub && osub->nrcols)
@@ -2969,20 +3012,22 @@ rel2bin_groupjoin(backend *be, sql_rel *
                /* first project using equi-joins */
                for (n = left->op4.lval->h; n; n = n->next) {
                        stmt *c = n->data;
+                       assert(c->type == st_alias);
                        const char *rnme = table_name(sql->sa, c);
                        const char *nme = column_name(sql->sa, c);
                        stmt *s = stmt_project(be, jl, column(be, c));
 
-                       s = stmt_alias(be, s, rnme, nme);
+                       s = stmt_alias(be, s, c->label, rnme, nme);
                        list_append(nl, s);
                }
                for (n = right->op4.lval->h; n; n = n->next) {
                        stmt *c = n->data;
+                       assert(c->type == st_alias);
                        const char *rnme = table_name(sql->sa, c);
                        const char *nme = column_name(sql->sa, c);
                        stmt *s = stmt_project(be, jr, column(be, c));
 
-                       s = stmt_alias(be, s, rnme, nme);
+                       s = stmt_alias(be, s, c->label, rnme, nme);
                        list_append(nl, s);
                }
                left = sub = stmt_list(be, nl);
@@ -3034,21 +3079,23 @@ rel2bin_groupjoin(backend *be, sql_rel *
        l = sa_list(sql->sa);
        for (n = left->op4.lval->h; n; n = n->next) {
                stmt *c = n->data;
+               assert(c->type == st_alias);
                const char *rnme = table_name(sql->sa, c);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to