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