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