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