Changeset: fd16ecb2cf0a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fd16ecb2cf0a
Modified Files:
clients/Tests/MAL-signatures-hge.test
clients/Tests/MAL-signatures.test
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/scripts/76_dump.sql
sql/server/rel_dump.c
sql/server/rel_dump.h
sql/server/rel_schema.c
Branch: label
Log Message:
only dump check expression
added v1 of exp2sql to be used via select check_constraint('schema',
'constraint name');
diffs (truncated from 388 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/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
@@ -5143,25 +5143,22 @@ sql_insert_check(backend *be, sql_key *k
{
mvc *sql = be->mvc;
int pos = 0;
- sql_rel* rel = rel_read(sql, sa_strdup(sql->sa, key->check), &pos,
sa_list(sql->sa)), *br = rel->l;
-
- assert(is_basetable(br->op));
+ sql_rel *rel = rel_basetable(sql, key->t, key->t->base.name);
+ sql_exp *exp = exp_read(sql, rel, NULL, NULL, sa_strdup(sql->sa,
key->check), &pos, 0);
+ rel->exps = rel_base_projection(sql, rel, 0);
+
/* create new sub stmt with needed inserts */
list *ins = sa_list(sql->sa);
for(node *n = key->columns->h; n; n = n->next) {
sql_kc *kc = n->data;
stmt *in = list_fetch(inserts, kc->c->colnr);
- sql_exp *e = rel_base_bind_column2(sql, br,
kc->c->t->base.name, kc->c->base.name);
+ sql_exp *e = rel_base_bind_column2(sql, rel,
kc->c->t->base.name, kc->c->base.name);
in = stmt_alias(be, in, e->alias.label, kc->c->t->base.name,
kc->c->base.name);
append(ins, in);
}
stmt *sub = stmt_list(be, ins);
- /* TODO: need exp here */
- assert(list_length(rel->exps) == 1);
- sql_exp *e = rel->exps->h->data;
- stmt *s = exp_bin(be, e, sub, NULL, NULL, NULL, NULL, NULL, 0, 0, 0);
-
+ stmt *s = exp_bin(be, exp, sub, NULL, NULL, NULL, NULL, NULL, 0, 0, 0);
sql_subfunc *cnt = sql_bind_func(sql, "sys", "count",
sql_bind_localtype("void"), NULL, F_AGGR, true, true);
s = stmt_uselect(be, column(be, s), stmt_bool(be, 0), cmp_equal, NULL,
0, 1);
s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1);
@@ -6159,22 +6156,9 @@ sql_update_check(backend *be, stmt **upd
{
mvc *sql = be->mvc;
int pos = 0;
- sql_rel *rel = NULL;
-
- if (key->t->persistence == SQL_DECLARED_TABLE) {
- stack_push_frame(be->mvc, "ALTER TABLE ADD CONSTRAINT CHECK");
- sql_schema* ss = key->t->s;
- frame_push_table(sql, key->t);
- key->t->s = ss; // recover the schema because frame_push_table
removes it
-
- rel = rel_read(sql, sa_strdup(sql->sa, key->check), &pos,
sa_list(sql->sa));
- stack_pop_frame(sql);
- } else {
- rel = rel_read(sql, sa_strdup(sql->sa, key->check), &pos,
sa_list(sql->sa));
- }
-
- sql_rel *br = rel->l;
- assert(is_basetable(br->op));
+ sql_rel *rel = rel_basetable(sql, key->t, key->t->base.name);
+ sql_exp *exp = exp_read(sql, rel, NULL, NULL, sa_strdup(sql->sa,
key->check), &pos, 0);
+ rel->exps = rel_base_projection(sql, rel, 0);
/* create sub stmt with needed updates (or projected col from to be
updated table) */
list *ups = sa_list(sql->sa);
@@ -6187,16 +6171,13 @@ sql_update_check(backend *be, stmt **upd
} else {
upd = stmt_col(be, kc->c, u_tids, u_tids->partition);
}
- sql_exp *e = rel_base_bind_column2(sql, br,
kc->c->t->base.name, kc->c->base.name);
+ sql_ex