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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list