Changeset: b1af096da1e3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b1af096da1e3
Modified Files:
sql/server/sql_privileges.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: iso
Log Message:
Small cleanup. Move role creation code together with other privileges related
routines
diffs (71 lines):
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
@@ -374,17 +374,22 @@ sql_create_auth_id(mvc *m, sqlid id, str
str
sql_create_role(mvc *m, str auth, sqlid grantor)
{
+ sqlid id;
+ sql_trans *tr = m->session->tr;
+ sqlstore *store = m->session->tr->store;
+ sql_schema *sys = find_sql_schema(tr, "sys");
+ sql_table *auths = find_sql_table(tr, sys, "auths");
+ sql_column *auth_name = find_sql_column(auths, "name");
+ int log_res = LOG_OK;
+
if (!admin_privs(grantor))
throw(SQL, "sql.create_role", SQLSTATE(0P000) "Insufficient
privileges to create role '%s'", auth);
-
- switch (sql_trans_create_role(m->session->tr, auth, grantor)) {
- case -1:
+ if (!is_oid_nil(store->table_api.column_find_row(tr, auth_name, auth,
NULL)))
throw(SQL, "sql.create_role", SQLSTATE(0P000) "Role '%s'
already exists", auth);
- case -2:
- throw(SQL, "sql.create_role", SQLSTATE(42000) "CREATE ROLE:
failed due to conflict with another transaction");
- default:
- return NULL;
- }
+
+ id = store_next_oid(tr->store);
+ if ((log_res = store->table_api.table_insert(tr, auths, &id, &auth,
&grantor)) != LOG_OK)
+ throw(SQL, "sql.create_role", SQLSTATE(42000) "CREATE ROLE:
failed%s", log_res == LOG_CONFLICT ? " due to conflict with another
transaction" : "");
return NULL;
}
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -395,8 +395,6 @@ extern int sql_trans_drop_idx(sql_trans
extern sql_trigger * sql_trans_create_trigger(sql_trans *tr, sql_table *t,
const char *name, sht time, sht orientation, sht event, const char *old_name,
const char *new_name, const char *condition, const char *statement );
extern int sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, sqlid id, int
drop_action);
-extern int sql_trans_create_role(sql_trans *tr, str auth, sqlid grantor);
-
extern sql_sequence *create_sql_sequence(struct sqlstore *store, sql_allocator
*sa, sql_schema *s, const char *name, lng start, lng min, lng max, lng inc, lng
cacheinc, bit cycle);
extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s,
const char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit
cycle, bit bedropped);
extern int sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, sql_sequence
*seq, int drop_action);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -6643,21 +6643,3 @@ sql_trans_end(sql_session *s, int ok)
store_unlock(store);
return ok;
}
-
-int
-sql_trans_create_role(sql_trans *tr, str auth, sqlid grantor)
-{
- sqlstore *store = tr->store;
- sqlid id;
- sql_schema *sys = find_sql_schema(tr, "sys");
- sql_table *auths = find_sql_table(tr, sys, "auths");
- sql_column *auth_name = find_sql_column(auths, "name");
-
- if (!is_oid_nil(store->table_api.column_find_row(tr, auth_name, auth,
NULL)))
- return -1;
-
- id = store_next_oid(tr->store);
- if (store->table_api.table_insert(tr, auths, &id, &auth, &grantor))
- return -2;
- return 0;
-}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list