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