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

Reply via email to