Changeset: 7ddc2a4ddd03 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7ddc2a4ddd03
Modified Files:
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_user.c
        sql/backends/monet5/sql_user.h
Branch: Jul2015
Log Message:

properly reset schema after dropping schema


diffs (101 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
@@ -394,8 +394,18 @@ void
 SQLtrans(mvc *m)
 {
        m->caching = m->cache;
-       if (!m->session->active)
+       if (!m->session->active) {
+               sql_session *s;
+
                mvc_trans(m);
+               s = m->session;
+               if (!s->schema) {
+                       s->schema_name = monet5_user_get_def_schema(m, 
m->user_id);
+                       assert(s->schema_name);
+                       s->schema = find_sql_schema(s->tr, s->schema_name);
+                       assert(s->schema);
+               }
+       }
 }
 
 str
@@ -445,7 +455,7 @@ SQLinitClient(Client c)
        if (m->session->tr)
                reset_functions(m->session->tr);
        /* pass through credentials of the user if not console */
-       schema = monet5_user_get_def_schema(m, c->user);
+       schema = monet5_user_set_def_schema(m, c->user);
        if (!schema) {
                _DELETE(schema);
                throw(PERMD, "SQLinitClient", "08004!schema authorization 
error");
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
@@ -405,6 +405,52 @@ monet5_user_get_def_schema(mvc *m, oid u
        sql_column *schemas_name = NULL;
        sql_column *schemas_id = NULL;
        sql_table *auths = NULL;
+       sql_column *auths_id = NULL;
+       sql_column *auths_name = NULL;
+       void *p = 0;
+       str username = NULL;
+       str schema = NULL;
+
+       sys = find_sql_schema(m->session->tr, "sys");
+       auths = find_sql_table(sys, "auths");
+       auths_id = find_sql_column(auths, "id");
+       auths_name = find_sql_column(auths, "name");
+       if ((rid = table_funcs.column_find_row(m->session->tr, auths_id, &user, 
NULL)) != oid_nil)
+               username = table_funcs.column_find_value(m->session->tr, 
auths_name, rid);
+
+       user_info = find_sql_table(sys, "db_user_info");
+       users_name = find_sql_column(user_info, "name");
+       users_schema = find_sql_column(user_info, "default_schema");
+       if ((rid = table_funcs.column_find_row(m->session->tr, users_name, 
username, NULL)) != oid_nil)
+               p = table_funcs.column_find_value(m->session->tr, users_schema, 
rid);
+
+       assert(p);
+       schema_id = *(sqlid *) p;
+       _DELETE(p);
+
+       schemas = find_sql_table(sys, "schemas");
+       schemas_name = find_sql_column(schemas, "name");
+       schemas_id = find_sql_column(schemas, "id");
+
+       if ((rid = table_funcs.column_find_row(m->session->tr, schemas_id, 
&schema_id, NULL)) != oid_nil)
+               schema = table_funcs.column_find_value(m->session->tr, 
schemas_name, rid);
+       stack_set_string(m, "current_schema", schema);
+       return schema;
+}
+
+str
+monet5_user_set_def_schema(mvc *m, oid user)
+{
+       oid rid;
+       sqlid schema_id;
+       sql_schema *sys = NULL;
+       sql_table *user_info = NULL;
+       sql_column *users_name = NULL;
+       sql_column *users_schema = NULL;
+       sql_table *schemas = NULL;
+       sql_column *schemas_name = NULL;
+       sql_column *schemas_id = NULL;
+       sql_table *auths = NULL;
        sql_column *auths_name = NULL;
 
        void *p = 0;
diff --git a/sql/backends/monet5/sql_user.h b/sql/backends/monet5/sql_user.h
--- a/sql/backends/monet5/sql_user.h
+++ b/sql/backends/monet5/sql_user.h
@@ -11,7 +11,8 @@
 #include "sql.h"               /* includes sql_backend.h */
 
 sql5_export void monet5_user_init(backend_functions *be_funcs);
-sql5_export str monet5_user_get_def_schema(mvc *m, oid user);
+sql5_export str monet5_user_set_def_schema(mvc *m, oid user /* mal user id */);
+sql5_export str monet5_user_get_def_schema(mvc *m, oid user /* sql user id */);
 
 sql5_export str db_users_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str db_password_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to