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