Changeset: ec2e89c6b469 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ec2e89c6b469
Branch: default
Log Message:

Merging branch label into default.


diffs (truncated from 10559 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -48969,6 +48969,11 @@ pattern sql.bind_idxbat(X_0:int, X_1:str
 mvc_bind_idxbat_wrap;
 Bind the 'schema.table.index' BAT with access kind:@0 - base table@1 - 
inserts@2 - updates
 sql
+check
+pattern sql.check(X_0:str, X_1:str):str
+SQLcheck;
+Return sql string of check constraint.
+sql
 claim
 unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng) (X_4:oid, 
X_5:bat[:oid])
 mvc_claim_wrap;
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -37429,6 +37429,11 @@ pattern sql.bind_idxbat(X_0:int, X_1:str
 mvc_bind_idxbat_wrap;
 Bind the 'schema.table.index' BAT with access kind:@0 - base table@1 - 
inserts@2 - updates
 sql
+check
+pattern sql.check(X_0:str, X_1:str):str
+SQLcheck;
+Return sql string of check constraint.
+sql
 claim
 unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng) (X_4:oid, 
X_5:bat[:oid])
 mvc_claim_wrap;
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1119,7 +1119,9 @@ dump_column_definition(Mapi mid, stream 
                         "SELECT kc.name, "             /* 0 */
                                "kc.nr, "                       /* 1 */
                                "k.name, "                      /* 2 */
-                               "kc.id "                        /* 3 */
+                               "kc.id, "                       /* 3 */
+                               "k.type, "                      /* 4 */
+                           "case when k.type = 4 then 
sys.check_constraint(s.name, k.name) else null end " /* 5 */
                         "FROM sys.objects kc, "
                              "sys.keys k "
                         "WHERE kc.id = k.id "
@@ -1132,14 +1134,15 @@ dump_column_definition(Mapi mid, stream 
                                "kc.nr, "                       /* 1 */
                                "k.name, "                      /* 2 */
                                "kc.id, "                       /* 3 */
-                               "k.type "                       /* 4 */
+                               "k.type, "                      /* 4 */
+                           "case when k.type = 4 then 
sys.check_constraint(s.name, k.name) else null end " /* 5 */
                         "FROM sys.objects kc, "
                              "sys.keys k, "
                              "sys.schemas s, "
                              "sys._tables t "
                         "WHERE kc.id = k.id "
                           "AND k.table_id = t.id "
-                          "AND k.type in (1, 3) "
+                          "AND k.type in (1, 3, 4) "
                           "AND t.schema_id = s.id "
                           "AND s.name = '%s' "
                           "AND t.name = '%s' "
@@ -1158,16 +1161,28 @@ dump_column_definition(Mapi mid, stream 
                if (strcmp(kc_nr, "0") == 0) {
                        if (cnt)
                                mnstr_write(sqlf, ")", 1, 1);
+                       cnt = 0;
                        mnstr_printf(sqlf, ",\n\t");
                        if (k_name) {
                                mnstr_printf(sqlf, "CONSTRAINT ");
                                dquoted_print(sqlf, k_name, " ");
                        }
-                       mnstr_printf(sqlf, "UNIQUE%s (", strcmp(k_type, "1") == 
0 ? "" : " NULLS NOT DISTINCT");
-                       cnt = 1;
+                       if (strcmp(k_type, "4") == 0) {
+                               const char *k_check = mapi_fetch_field(hdl, 5);
+                               mnstr_printf(sqlf, "CHECK (%s)", k_check);
+                       } else {
+                               if (strcmp(k_type, "1") == 0) {
+                                       mnstr_printf(sqlf, "UNIQUE");
+                               } else {
+                                       mnstr_printf(sqlf, "UNIQUE NULLS NOT 
DISTINCT");
+                               }
+                               mnstr_printf(sqlf, " (");
+                               cnt = 1;
+                       }
                } else
                        mnstr_printf(sqlf, ", ");
-               dquoted_print(sqlf, c_column, NULL);
+               if (cnt)
+                       dquoted_print(sqlf, c_column, NULL);
                if (mnstr_errnr(sqlf) != MNSTR_NO__ERROR)
                        goto bailout;
        }
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
@@ -247,6 +247,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)
 {
@@ -355,11 +377,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);
        }
@@ -429,14 +453,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);
        }
@@ -1729,9 +1755,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) {
@@ -2081,7 +2109,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);
@@ -2092,7 +2120,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 {
@@ -2101,10 +2129,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);
@@ -2117,7 +2148,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) {
@@ -2127,7 +2158,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);
                        }
                }
@@ -2180,7 +2211,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);
@@ -2188,7 +2219,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);
 
@@ -2196,13 +2227,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);
@@ -2281,7 +2316,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);
                        }
                }
@@ -2386,18 +2423,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);
                        }
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to