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

Reply via email to