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 -- [email protected]
To unsubscribe send an email to [email protected]