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

Reply via email to