Changeset: b86245e5174a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b86245e5174a
Added Files:
sql/test/transactions/Tests/rollback_and_schema-Bug-7499.test
Modified Files:
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_user.c
sql/include/sql_catalog.h
sql/storage/store.c
sql/test/transactions/Tests/All
Branch: Dec2023
Log Message:
fixed issue #7499, ie keep default schema in the session, on missing default
schema give an error.
diffs (110 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
@@ -821,7 +821,7 @@ SQLtrans(mvc *m)
}
s = m->session;
if (!s->schema) {
- switch (monet5_user_get_def_schema(m, m->user_id,
&s->schema_name)) {
+ switch (monet5_user_get_def_schema(m, m->user_id,
&s->def_schema_name)) {
case -1:
mvc_cancel_session(m);
throw(SQL, "sql.trans", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
@@ -834,6 +834,7 @@ SQLtrans(mvc *m)
default:
break;
}
+ s->schema_name = s->def_schema_name;
if (!(s->schema = find_sql_schema(s->tr,
s->schema_name))) {
mvc_cancel_session(m);
throw(SQL, "sql.trans", SQLSTATE(42000) "The
session's schema was not found, this session is going to terminate");
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
@@ -849,6 +849,8 @@ monet5_user_set_def_schema(mvc *m, oid u
}
/* while getting the session's schema, set the search path as well */
+ /* new default schema */
+ m->session->def_schema_name = schema;
if (!(ok = mvc_set_schema(m, schema)) || (path_err =
parse_schema_path_str(m, schema_path, true)) != MAL_SUCCEED) {
if (m->session->tr->active && (other = mvc_rollback(m, 0, NULL,
false)) != MAL_SUCCEED)
freeException(other);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -750,6 +750,7 @@ typedef struct sql_session {
sql_allocator *sa;
sql_trans *tr; /* active transaction */
+ char *def_schema_name; /* users default schema name */
char *schema_name; /* transaction's schema name */
sql_schema *schema;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -7214,13 +7214,11 @@ sql_session_destroy(sql_session *s)
int
sql_session_reset(sql_session *s, int ac)
{
- char *def_schema_name = SA_STRDUP(s->sa, "sys");
-
- if (!s->tr || !def_schema_name)
+ if (!s->tr)
return 0;
assert(s->tr && s->tr->active == 0);
- s->schema_name = def_schema_name;
+ s->schema_name = s->def_schema_name;
s->schema = NULL;
s->auto_commit = s->ac_on_commit = ac;
s->level = tr_serializable;
@@ -7236,7 +7234,11 @@ sql_trans_begin(sql_session *s)
store_lock(store);
TRC_DEBUG(SQL_STORE, "Enter sql_trans_begin for transaction: " ULLFMT
"\n", tr->tid);
tr->ts = store_timestamp(store);
- if (!(s->schema = find_sql_schema(tr, s->schema_name))) {
+ if (s->schema_name && !(s->schema = find_sql_schema(tr,
s->schema_name)))
+ s->schema_name = s->def_schema_name;
+ if (!s->schema_name)
+ s->schema_name = "sys";
+ if (s->schema_name && !(s->schema = find_sql_schema(tr,
s->schema_name))) {
TRC_DEBUG(SQL_STORE, "Exit sql_trans_begin for transaction: "
ULLFMT " with error, the schema %s was not found\n", tr->tid, s->schema_name);
store_unlock(store);
return -3;
@@ -7268,6 +7270,7 @@ sql_trans_end(sql_session *s, int ok)
s->tr->active = 0;
s->tr->status = 0;
s->auto_commit = s->ac_on_commit;
+ s->schema = NULL;
list_remove_data(store->active, NULL, s->tr);
ATOMIC_SET(&store->lastactive, GDKusec());
ATOMIC_DEC(&store->nr_active);
diff --git a/sql/test/transactions/Tests/All b/sql/test/transactions/Tests/All
--- a/sql/test/transactions/Tests/All
+++ b/sql/test/transactions/Tests/All
@@ -10,3 +10,4 @@ truncate-insert-restart
update_drop_crash
update_drop_crash2
insert_drop_crash
+rollback_and_schema-Bug-7499
diff --git a/sql/test/transactions/Tests/rollback_and_schema-Bug-7499.test
b/sql/test/transactions/Tests/rollback_and_schema-Bug-7499.test
new file mode 100644
--- /dev/null
+++ b/sql/test/transactions/Tests/rollback_and_schema-Bug-7499.test
@@ -0,0 +1,14 @@
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE SCHEMA test
+
+statement ok
+SET SCHEMA test
+
+statement ok
+ROLLBACK
+
+statement ok
+SET SCHEMA sys
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]