Changeset: f4b67f9daddb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f4b67f9daddb
Modified Files:
sql/server/rel_schema.c
sql/server/sql_parser.y
Branch: Dec2016
Log Message:
Allow only atoms in the creation of a default value for a column. Also validate
it correctly by casting to the column type
diffs (64 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
@@ -408,17 +408,16 @@ column_option(
if (e && is_atom(e->type)) {
atom *a = exp_value(sql, e, sql->args,
sql->argc);
- if (atom_null(a)) {
- mvc_default(sql, cs, NULL);
- res = SQL_OK;
- break;
+ if(!atom_cast(sql->sa, a, &cs->type)) {
+ (void) sql_error(sql, 02, "42000!could
not cast the default value to the column type\n");
+ return SQL_ERR;
}
}
/* reset error */
sql->session->status = 0;
sql->errstr[0] = '\0';
}
- r = symbol2string(sql, s->data.sym, &err);
+ r = symbol2string(sql, s->data.sym, &err);
if (!r) {
(void) sql_error(sql, 02, "42000!incorrect default
value '%s'\n", err?err:"");
if (err) _DELETE(err);
@@ -737,14 +736,25 @@ table_element(mvc *sql, symbol *s, sql_s
char *cname = l->h->data.sval;
symbol *sym = l->h->next->data.sym;
sql_column *c = mvc_bind_column(sql, t, cname);
+ sql_exp *e = NULL;
if (!c) {
sql_error(sql, 02, "42S22!ALTER TABLE: no such column
'%s'\n", cname);
return SQL_ERR;
}
+ e = rel_logical_value_exp(sql, NULL, sym, sql_sel);
+
+ if (e && is_atom(e->type)) {
+ atom *a = exp_value(sql, e, sql->args, sql->argc);
+
+ if(!atom_cast(sql->sa, a, &c->type)) {
+ (void) sql_error(sql, 02, "42S22!ALTER TABLE:
could not cast the default value to the column type\n");
+ return SQL_ERR;
+ }
+ }
r = symbol2string(sql, sym, &err);
if (!r) {
- (void) sql_error(sql, 02, "42000!incorrect default
value '%s'\n", err?err:"");
+ (void) sql_error(sql, 02, "42S22!ALTER TABLE: incorrect
default value '%s'\n", err?err:"");
if (err) _DELETE(err);
return SQL_ERR;
}
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
@@ -1517,7 +1517,7 @@ default:
;
default_value:
- simple_scalar_exp { $$ = $1; }
+ atom { $$ = $1; }
;
column_constraint:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list