Changeset: 2f299854001c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/2f299854001c Modified Files: sql/server/rel_schema.c sql/server/sql_parser.y Branch: check Log Message:
(de)serialise relational plan check condition diffs (115 lines): diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -20,6 +20,7 @@ #include "rel_schema.h" #include "rel_remote.h" #include "rel_psm.h" +#include "rel_dump.h" #include "rel_propagate.h" #include "sql_parser.h" #include "sql_privileges.h" @@ -359,10 +360,41 @@ foreign_key_check_types(sql_subtype *lt, return lt->type->localtype == rt->type->localtype; return lt->type->eclass == rt->type->eclass || (EC_VARCHAR(lt->type->eclass) && EC_VARCHAR(rt->type->eclass)); } +static str +rel2str( mvc *sql, sql_rel *rel) +{ + buffer *b = NULL; + stream *s = NULL; + list *refs = NULL; + char *res = NULL; + + b = buffer_create(1024); + if(b == NULL) + goto cleanup; + s = buffer_wastream(b, "rel_dump"); + if(s == NULL) + goto cleanup; + refs = sa_list(sql->sa); + if (!refs) + goto cleanup; + + rel_print_refs(sql, s, rel, 0, refs, 0); + rel_print_(sql, s, rel, 0, refs, 0); + mnstr_printf(s, "\n"); + res = buffer_get_buf(b); + +cleanup: + if(b) + buffer_destroy(b); + if(s) + close_stream(s); + return res; +} static int -column_constraint_type(mvc *sql, const char *name, symbol *s, sql_schema *ss, sql_table *t, sql_column *cs, bool isDeclared, int *used) +column_constraint_type(sql_query *query, const char *name, symbol *s, sql_schema *ss, sql_table *t, sql_column *cs, bool isDeclared, int *used) { + mvc *sql = query->sql; int res = SQL_ERR; if (isDeclared && (s->token != SQL_NULL && s->token != SQL_NOT_NULL)) { @@ -571,6 +603,23 @@ column_constraint_type(mvc *sql, const c res = SQL_OK; } break; case SQL_CHECK: { + + exp_kind ek = {type_value, card_value, FALSE}; + sql_rel* rel3 = rel_basetable(sql, t, t->base.name); + sql_exp *e = rel_logical_value_exp(query, &rel3, s->data.sym, sql_sel, ek); + sql_rel *rel = rel_project_exp(sql, e); + (void) rel; + + char* rel_str = rel2str(sql, rel); + + int pos = 0; + list *refs = sa_list(sql->sa); + sql_rel* rel2 = rel_read(sql, rel_str, &pos, refs); + (void) rel_str; + (void) rel2; + char *err = NULL, *r; + r = symbol2string(sql, s->data.sym, 0, &err); + (void) r; (void) sql_error(sql, 02, SQLSTATE(42000) "CONSTRAINT CHECK: check constraints not supported"); return SQL_ERR; } break; @@ -604,7 +653,7 @@ column_options(sql_query *query, dlist * if (!opt_name && !(default_name = column_constraint_name(sql, sym, cs, t))) return SQL_ERR; - res = column_constraint_type(sql, opt_name ? opt_name : default_name, sym, ss, t, cs, isDeclared, &used); + res = column_constraint_type(query, opt_name ? opt_name : default_name, sym, ss, t, cs, isDeclared, &used); } break; case SQL_DEFAULT: { symbol *sym = s->data.sym; diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -233,7 +233,6 @@ int yydebug=1; default default_value delete_stmt - domain_constraint_type drop_statement drop_table_element exec @@ -2155,7 +2154,7 @@ column_constraint_type: append_int(l, $5 ); $$ = _symbol_create_list( SQL_FOREIGN_KEY, l); } /*TODO: Implement domain_constraint_type*/ - | domain_constraint_type + | CHECK '(' search_condition ')' { $$ = _symbol_create_symbol(SQL_CHECK, $3); } ; table_constraint_type: @@ -2181,7 +2180,6 @@ table_constraint_type: ; domain_constraint_type: - CHECK '(' search_condition ')' { $$ = _symbol_create_symbol(SQL_CHECK, $3); } ; ident_commalist: _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org