Changeset: 76a7ce4183bf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=76a7ce4183bf
Modified Files:
        sql/backends/monet5/sql.mx
        sql/server/rel_bin.c
        sql/server/rel_schema.c
        sql/server/rel_semantic.c
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_privileges.h
        sql/server/sql_schema.c
        sql/server/sql_semantic.c
Branch: default
Log Message:

moved create/drop role to mal


diffs (290 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -2134,6 +2134,15 @@
                int grantor = *(int*)getArgReference(stk, pci, 7);
                msg = sql_revoke_table_privs( sql, grantee, privs, sname, 
cname, grant, grantor);
        }       break;
+       case DDL_CREATE_ROLE: {
+               char *role = sname;
+               int grantor = *(int*)getArgReference(stk, pci, 4);
+               msg = sql_create_role( sql, role, grantor);
+       }       break;
+       case DDL_DROP_ROLE: {
+               char *role = sname;
+               msg = sql_drop_role( sql, role);
+       }       break;
        default:
                throw(SQL, "sql.catalog", "catalog unknown type");
        }
diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c
--- a/sql/server/rel_bin.c
+++ b/sql/server/rel_bin.c
@@ -3505,6 +3505,9 @@
        } else if (rel->flag <= DDL_REVOKE) {
                s = rel2bin_privs(sql, rel, refs);
                sql->type = Q_SCHEMA;
+       } else if (rel->flag <= DDL_DROP_ROLE) {
+               s = rel2bin_catalog(sql, rel, refs);
+               sql->type = Q_SCHEMA;
        }
        return s;
 }
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
@@ -1483,8 +1483,7 @@
                                  l->h->next->next->data.i_val, /* admin? */
                                  l->h->next->next->next->data.i_val ? 
sql->user_id : sql->role_id);
                /* grantor ? */
-               sql->type = Q_SCHEMA;
-       } break;
+       }       break;
        case SQL_REVOKE_ROLES:
        {
                dlist *l = s->data.lval;
@@ -1496,8 +1495,7 @@
                                  l->h->next->next->data.i_val, /* admin? */
                                  l->h->next->next->next->data.i_val ? 
sql->user_id : sql->role_id);
                /* grantor ? */
-               sql->type = Q_SCHEMA;
-       } break;
+       }       break;
        case SQL_GRANT:
        {
                dlist *l = s->data.lval;
@@ -1509,8 +1507,7 @@
                                  l->h->next->next->data.i_val, /* grant ? */
                                  l->h->next->next->next->data.i_val ? 
sql->user_id : sql->role_id);
                /* grantor ? */
-               sql->type = Q_SCHEMA;
-       } break;
+       }       break;
        case SQL_REVOKE:
        {
                dlist *l = s->data.lval;
@@ -1522,9 +1519,19 @@
                                   l->h->next->next->data.i_val,        /* 
grant ? */
                                   l->h->next->next->next->data.i_val ? 
sql->user_id : sql->role_id);
                /* grantor ? */
-               sql->type = Q_SCHEMA;
-       } break;
-
+       }       break;
+       case SQL_CREATE_ROLE:
+       {
+               dlist *l = s->data.lval;
+               char *rname = l->h->data.sval;
+               ret = rel_schema(sql->sa, DDL_CREATE_ROLE, rname, NULL,
+                                l->h->next->data.i_val);
+       }       break;
+       case SQL_DROP_ROLE:
+       {
+               char *rname = s->data.sval;
+               ret = rel_schema(sql->sa, DDL_DROP_ROLE, rname, NULL, 0);
+       }       break;
        default:
                return sql_error(sql, 01, "schema statement unknown symbol(" 
PTRFMT ")->token = %s", PTRFMTCAST s, token2string(s->token));
        }
diff --git a/sql/server/rel_semantic.c b/sql/server/rel_semantic.c
--- a/sql/server/rel_semantic.c
+++ b/sql/server/rel_semantic.c
@@ -180,6 +180,9 @@
        case SQL_REVOKE:
        case SQL_GRANT_ROLES:
        case SQL_REVOKE_ROLES:
+
+       case SQL_CREATE_ROLE:
+       case SQL_DROP_ROLE:
                return rel_schemas(sql, s);
 
        case SQL_CREATE_SEQ:
@@ -193,8 +196,6 @@
        case SQL_DROP_USER:
        case SQL_ALTER_USER:
        case SQL_RENAME_USER:
-       case SQL_CREATE_ROLE:
-       case SQL_DROP_ROLE:
        case SQL_CREATE_TYPE:
        case SQL_CREATE_TRIGGER:
        case SQL_DROP_TRIGGER:
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
@@ -1253,9 +1253,9 @@
 */
 
 role_def:
-    create ROLE qname opt_grantor
+    create ROLE ident opt_grantor
        { dlist *l = L();
-         append_list(l, $3);
+         append_string(l, $3);
          append_int(l, $4);
          $$ = _symbol_create_list( SQL_CREATE_ROLE, l ); }
  |  create USER ident WITH opt_encrypted PASSWORD string sqlNAME string SCHEMA 
ident
@@ -2185,7 +2185,7 @@
          append_list(l, $3 );
          append_int(l, $4 );
          $$ = _symbol_create_list( SQL_DROP_VIEW, l ); }
- |  DROP ROLE qname      { $$ = _symbol_create_list( SQL_DROP_ROLE, $3 ); }
+ |  DROP ROLE ident      { $$ = _symbol_create( SQL_DROP_ROLE, $3 ); }
  |  DROP USER ident      { $$ = _symbol_create( SQL_DROP_USER, $3 ); }
  |  DROP INDEX qname     { $$ = _symbol_create_list( SQL_DROP_INDEX, $3 ); }
  |  DROP TRIGGER qname   { $$ = _symbol_create_list( SQL_DROP_TRIGGER, $3 ); }
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -198,7 +198,7 @@
        return TRUE;
 }
 
-int
+str
 sql_create_role(mvc *m, str auth, int grantor)
 {
        oid id;
@@ -207,15 +207,14 @@
        sql_column *auth_name = find_sql_column(auths, "name");
 
        if (table_funcs.column_find_row(m->session->tr, auth_name, auth, NULL) 
!= oid_nil)
-               return FALSE;
+               return sql_message("CREATE ROLE: Role '%s' allready exists\n", 
auth);
 
        id = store_next_oid();
        table_funcs.table_insert(m->session->tr, auths, &id, auth, &grantor);
-
-       return TRUE;
+       return NULL;
 }
 
-int
+str
 sql_drop_role(mvc *m, str auth)
 {
        oid rid;
@@ -224,9 +223,10 @@
        sql_column *auth_name = find_sql_column(auths, "name");
 
        rid = table_funcs.column_find_row(m->session->tr, auth_name, auth, 
NULL);
-       if (rid != oid_nil)
-               table_funcs.table_delete(m->session->tr, auths, rid);
-       return TRUE;
+       if (rid == oid_nil)
+               return sql_message("DROP ROLE: Role '%s' does not exist\n", 
auth);
+       table_funcs.table_delete(m->session->tr, auths, rid);
+       return NULL;
 }
 
 char *
@@ -358,7 +358,7 @@
        return(backend_rename_user(m, olduser, newuser));
 }
 
-int
+str
 sql_drop_user(mvc *m, str user)
 {
        if (backend_drop_user(m,user) == FALSE)
diff --git a/sql/server/sql_privileges.h b/sql/server/sql_privileges.h
--- a/sql/server/sql_privileges.h
+++ b/sql/server/sql_privileges.h
@@ -38,13 +38,13 @@
 extern int sql_find_auth(mvc *m, str auth);
 extern int sql_find_schema(mvc *m, str schema);
 
-extern int sql_create_role(mvc *m, str auth, int grantor);
-extern int sql_drop_role(mvc *m, str auth);
-extern char * sql_grant_role(mvc *m, str grantee, str auth);
-extern char * sql_revoke_role(mvc *m, str grantee, str auth);
+extern char *sql_create_role(mvc *m, str auth, int grantor);
+extern char *sql_drop_role(mvc *m, str auth);
+extern char *sql_grant_role(mvc *m, str grantee, str auth);
+extern char *sql_revoke_role(mvc *m, str grantee, str auth);
 extern int sql_alter_user(mvc *m, str user, str passwd, char enc, sqlid 
schema_id, str oldpasswd);
 extern int sql_rename_user(mvc *m, str olduser, str newuser);
-extern int sql_drop_user(mvc *m, str user);
+extern str sql_drop_user(mvc *m, str user);
 extern int sql_create_privileges(mvc *m, sql_schema *s);
 extern int sql_schema_has_user(mvc *m, sql_schema *s);
 
diff --git a/sql/server/sql_schema.c b/sql/server/sql_schema.c
--- a/sql/server/sql_schema.c
+++ b/sql/server/sql_schema.c
@@ -322,7 +322,7 @@
        if (mvc_check_dependency(sql, user_id, OWNER_DEPENDENCY, NULL))
                return sql_error(sql, 02, "DROP USER: '%s' owns a schema", 
user);
 
-       if(sql_drop_user(sql, user) == FALSE)
+       if(sql_drop_user(sql, user) != NULL)
                return sql_error(sql, 02, "DROP USER: no such user '%s'", user);
 
        return stmt_none(sql->sa);
@@ -366,30 +366,6 @@
 }
 
 
-static stmt *
-create_role(mvc *sql, dlist *qname, int grantor)
-{
-       char *role_name = qname->t->data.sval;
-
-       if (dlist_length(qname) > 2) {
-               return sql_error(sql, 02, "CREATE ROLE: qualified role can only 
have a schema and a role\n");
-       }
-       sql_create_role(sql, role_name, grantor);
-       return stmt_none(sql->sa);
-}
-
-static stmt *
-drop_role(mvc *sql, dlist *qname)
-{
-       char *role_name = qname->t->data.sval;
-
-       if (dlist_length(qname) > 2) {
-               return sql_error(sql, 02, "DROP ROLE: qualified role can only 
have a schema and a role\n");
-       }
-       sql_drop_role(sql, role_name);
-       return stmt_none(sql->sa);
-}
-
 #if 0
 static stmt *
 sql_update_add_idx(mvc *sql, sql_table *t, list *cols)
@@ -481,24 +457,6 @@
                sql->type = Q_SCHEMA;
        }
                break;
-       case SQL_CREATE_ROLE:
-       {
-               dlist *l = s->data.lval;
-
-               assert(l->h->next->type == type_int);
-               ret = create_role(sql, l->h->data.lval, /* role name */
-                                 l->h->next->data.i_val);      /* role grantor 
*/
-               sql->type = Q_SCHEMA;
-       }
-               break;
-       case SQL_DROP_ROLE:
-       {
-               dlist *l = s->data.lval;
-
-               ret = drop_role(sql, l);        /* role name */
-               sql->type = Q_SCHEMA;
-       }
-               break;
 
        case SQL_CREATE_TYPE:
        {
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -894,8 +894,6 @@
        case SQL_DROP_USER:
        case SQL_ALTER_USER:
        case SQL_RENAME_USER:
-       case SQL_CREATE_ROLE:
-       case SQL_DROP_ROLE:
        case SQL_CREATE_TYPE:
        case SQL_CREATE_TRIGGER:
        case SQL_DROP_TRIGGER:
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to