Changeset: ae66902bc2e6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ae66902bc2e6
Modified Files:
sql/server/rel_schema.c
sql/server/sql_parser.y
Branch: Feb2013
Log Message:
added alter table ... set read write.
diffs (77 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
@@ -1074,6 +1074,7 @@ rel_alter_table(mvc *sql, dlist *qname,
sql_table *nt = dup_sql_table(sql->sa, t);
sql_exp ** updates, *e;
+ assert(te);
if (nt && te && te->token == SQL_DROP_CONSTRAINT) {
dlist *l = te->data.lval;
char *kname = l->h->data.sval;
@@ -1083,20 +1084,32 @@ rel_alter_table(mvc *sql, dlist *qname,
return rel_schema(sql->sa, DDL_DROP_CONSTRAINT, sname,
kname, drop_action);
}
+ if (t->persistence != SQL_DECLARED_TABLE && s)
+ sname = s->base.name;
+
+ /* read only or read write */
+ if (nt && te && te->token == SQL_ALTER_TABLE) {
+ int state = te->data.i_val;
+
+ if (t->s && !nt->s)
+ nt->s = t->s;
+
+ if (state == tr_readonly) {
+ nt = mvc_readonly(sql, nt, 1);
+ } else {
+ nt = mvc_readonly(sql, nt, 0);
+ }
+ return rel_table(sql, DDL_ALTER_TABLE, sname, nt, 0);
+ }
+
if (!nt || (te && table_element(sql, te, s, nt, 1) == SQL_ERR))
return NULL;
- if (t->persistence != SQL_DECLARED_TABLE && s)
- sname = s->base.name;
-
if (t->s && !nt->s)
nt->s = t->s;
- if (!te) /* Set Read only */
- nt = mvc_readonly(sql, nt, 1);
res = rel_table(sql, DDL_ALTER_TABLE, sname, nt, 0);
- if (!te) /* Set Read only */
- return res;
+
/* table add table */
if (te->token == SQL_TABLE) {
char *ntname = te->data.lval->h->data.sval;
@@ -1619,7 +1632,7 @@ rel_schemas(mvc *sql, symbol *s)
dlist *l = s->data.lval;
ret = rel_alter_table(sql,
- l->h->data.lval, /* table name */
+ l->h->data.lval, /* table name */
l->h->next->data.sym);/* table element */
} break;
case SQL_GRANT_ROLES:
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
@@ -961,7 +961,12 @@ alter_statement:
| ALTER TABLE qname SET READ ONLY
{ dlist *l = L();
append_list(l, $3);
- append_symbol(l, NULL);
+ append_symbol(l, _symbol_create_int(SQL_ALTER_TABLE, tr_readonly));
+ $$ = _symbol_create_list( SQL_ALTER_TABLE, l ); }
+ | ALTER TABLE qname SET READ WRITE
+ { dlist *l = L();
+ append_list(l, $3);
+ append_symbol(l, _symbol_create_int(SQL_ALTER_TABLE, tr_writable));
$$ = _symbol_create_list( SQL_ALTER_TABLE, l ); }
| ALTER USER ident passwd_schema
{ dlist *l = L();
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list