Changeset: 42666f8536bf for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/42666f8536bf Modified Files: sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_user.c Branch: userprofile Log Message:
set default user role in the session diffs (97 lines): diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -273,6 +273,9 @@ SQLprepareClient(Client c, int login) case -3: msg = createException(SQL,"sql.initClient", SQLSTATE(42000) "The user's default schema was not found, this session is going to terminate"); goto bailout1; + case -4: + msg = createException(SQL,"sql.initClient", SQLSTATE(42000) "The user's default role was not found, this session is going to terminate"); + goto bailout1; default: break; } diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c --- a/sql/backends/monet5/sql_user.c +++ b/sql/backends/monet5/sql_user.c @@ -642,19 +642,20 @@ int monet5_user_set_def_schema(mvc *m, oid user) { oid rid; - sqlid schema_id; + sqlid schema_id, default_role_id; sql_schema *sys = NULL; sql_table *user_info = NULL; sql_column *users_name = NULL; sql_column *users_schema = NULL; sql_column *users_schema_path = NULL; + sql_column *users_default_role = NULL; sql_table *schemas = NULL; sql_column *schemas_name = NULL; sql_column *schemas_id = NULL; sql_table *auths = NULL; sql_column *auths_id = NULL; sql_column *auths_name = NULL; - str path_err = NULL, other = NULL, schema = NULL, schema_cpy, schema_path = NULL, username = NULL, err = NULL; + str path_err = NULL, other = NULL, schema = NULL, schema_cpy, schema_path = NULL, username = NULL, userrole = NULL, err = NULL; int ok = 1, res = 0; TRC_DEBUG(SQL_TRANS, OIDFMT "\n", user); @@ -674,6 +675,7 @@ monet5_user_set_def_schema(mvc *m, oid u users_name = find_sql_column(user_info, "name"); users_schema = find_sql_column(user_info, "default_schema"); users_schema_path = find_sql_column(user_info, "schema_path"); + users_default_role = find_sql_column(user_info, "default_role"); sqlstore *store = m->session->tr->store; rid = store->table_api.column_find_row(m->session->tr, users_name, username, NULL); @@ -691,6 +693,8 @@ monet5_user_set_def_schema(mvc *m, oid u return -1; } + default_role_id = store->table_api.column_find_sqlid(m->session->tr, users_default_role, rid); + schemas = find_sql_table(m->session->tr, sys, "schemas"); schemas_name = find_sql_column(schemas, "name"); schemas_id = find_sql_column(schemas, "id"); @@ -726,7 +730,26 @@ monet5_user_set_def_schema(mvc *m, oid u _DELETE(schema_path); return -2; } - m->user_id = m->role_id = store->table_api.column_find_sqlid(m->session->tr, auths_id, rid); + + m->user_id = store->table_api.column_find_sqlid(m->session->tr, auths_id, rid); + + /* check if role exists */ + rid = store->table_api.column_find_row(m->session->tr, auths_id, &default_role_id, NULL); + if (is_oid_nil(rid)) { + if (m->session->tr->active && (other = mvc_rollback(m, 0, NULL, false)) != MAL_SUCCEED) + freeException(other); + GDKfree(username); + _DELETE(schema_path); + return -4; + } + m->role_id = default_role_id; + if (!(userrole = store->table_api.column_find_value(m->session->tr, auths_name, rid))) { + if (m->session->tr->active && (other = mvc_rollback(m, 0, NULL, false)) != MAL_SUCCEED) + freeException(other); + GDKfree(username); + _DELETE(schema_path); + return -1; + } /* while getting the session's schema, set the search path as well */ if (!(ok = mvc_set_schema(m, schema)) || (path_err = parse_schema_path_str(m, schema_path, true)) != MAL_SUCCEED) { @@ -738,10 +761,11 @@ monet5_user_set_def_schema(mvc *m, oid u return ok == 0 ? -3 : -1; } + /* reset the user and schema names */ if (!sqlvar_set_string(find_global_var(m, sys, "current_schema"), schema) || !sqlvar_set_string(find_global_var(m, sys, "current_user"), username) || - !sqlvar_set_string(find_global_var(m, sys, "current_role"), username)) { + !sqlvar_set_string(find_global_var(m, sys, "current_role"), userrole)) { res = -1; } GDKfree(username); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org