Changeset: c5eaab16eaf3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c5eaab16eaf3
Modified Files:
sql/backends/monet5/sql_transaction.c
sql/server/rel_trans.c
sql/storage/store.c
Branch: Jul2021
Log Message:
Forgot default transaction iso level if not given (serializable). Small cleanup
diffs (90 lines):
diff --git a/sql/backends/monet5/sql_transaction.c
b/sql/backends/monet5/sql_transaction.c
--- a/sql/backends/monet5/sql_transaction.c
+++ b/sql/backends/monet5/sql_transaction.c
@@ -107,9 +107,6 @@ SQLtransaction_begin(Client cntxt, MalBl
throw(SQL, "sql.trans", SQLSTATE(25001) "START TRANSACTION:
cannot start a transaction within a transaction");
if (sql->session->tr->active)
msg = mvc_rollback(sql, 0, NULL, false);
- sql->session->auto_commit = 0;
- sql->session->ac_on_commit = 1;
- sql->session->level = chain;
if (msg)
return msg;
switch (mvc_trans(sql)) {
@@ -120,6 +117,10 @@ SQLtransaction_begin(Client cntxt, MalBl
default:
break;
}
+ /* set transaction properties after successfuly starting */
+ sql->session->auto_commit = 0;
+ sql->session->ac_on_commit = 1;
+ sql->session->level = chain;
return MAL_SUCCEED;
}
@@ -140,9 +141,6 @@ SQLtransaction2(Client cntxt, MalBlkPtr
throw(SQL, "sql.trans", SQLSTATE(25001) "START TRANSACTION:
cannot start a transaction within a transaction");
if (sql->session->tr->active)
msg = mvc_rollback(sql, 0, NULL, false);
- sql->session->auto_commit = 0;
- sql->session->ac_on_commit = 1;
- sql->session->level = 0;
if (msg)
return msg;
switch (mvc_trans(sql)) {
@@ -153,5 +151,9 @@ SQLtransaction2(Client cntxt, MalBlkPtr
default:
break;
}
+ /* set transaction properties after successfuly starting */
+ sql->session->auto_commit = 0;
+ sql->session->ac_on_commit = 1;
+ sql->session->level = 0;
return MAL_SUCCEED;
}
diff --git a/sql/server/rel_trans.c b/sql/server/rel_trans.c
--- a/sql/server/rel_trans.c
+++ b/sql/server/rel_trans.c
@@ -57,18 +57,21 @@ rel_transactions(sql_query *query, symbo
ret= rel_trans(sql, ddl_rollback, n->data.i_val,
n->next->data.sval);
} break;
case TR_START:
- case TR_MODE:
- assert(s->type == type_int && (s->data.i_val & tr_append) == 0);
+ case TR_MODE: {
+ int tr_mode = s->data.i_val;
- if ((s->data.i_val & tr_none) == tr_none)
+ assert(s->type == type_int && (tr_mode & tr_append) == 0);
+ if ((tr_mode & tr_none) == tr_none)
return sql_error(sql, 01, SQLSTATE(42000) "Transaction
diagnostic not supported");
- if ((s->data.i_val & tr_readonly) == tr_readonly)
+ if ((tr_mode & tr_readonly) == tr_readonly)
return sql_error(sql, 01, SQLSTATE(42000) "Readonly
transactions not supported");
- if ((s->data.i_val & tr_snapshot) == tr_snapshot &&
(s->data.i_val & tr_serializable) == tr_serializable)
+ if ((tr_mode & tr_snapshot) == tr_snapshot && (tr_mode &
tr_serializable) == tr_serializable)
return sql_error(sql, 01, SQLSTATE(42000) "Cannot set
multiple ISO levels on the same transaction");
- s->data.i_val &= ~tr_writable; /* all transactions are writable
by default */
- ret = rel_trans(sql, ddl_trans, s->data.i_val, NULL);
- break;
+ if ((tr_mode & tr_snapshot) == 0 && (tr_mode & tr_serializable)
== 0)
+ tr_mode |= tr_serializable; /* set serializable level
by default */
+ tr_mode &= ~tr_writable; /* all transactions are writable by
default */
+ ret = rel_trans(sql, ddl_trans, tr_mode, NULL);
+ } break;
default:
return sql_error(sql, 01, SQLSTATE(42000) "Transaction unknown
Symbol(%p)->token = %s", s, token2string(s->token));
}
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -6810,8 +6810,7 @@ sql_session_reset(sql_session *s, int ac
s->schema_name = def_schema_name;
s->schema = NULL;
s->auto_commit = s->ac_on_commit = ac;
- s->level &= ~tr_snapshot;
- s->level |= tr_serializable;
+ s->level = tr_serializable;
return 1;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list