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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to