From fcbea9fa40db1fb626eaf394c93e6b11225aa695 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Mon, 5 Dec 2016 23:38:03 +0200 Subject: [PATCH] Fix transaction tracking If autocommit is disables, a transaction will always be open. --- .../protocol/MySQL/MySQLClient/mysql_client.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/modules/protocol/MySQL/MySQLClient/mysql_client.c b/server/modules/protocol/MySQL/MySQLClient/mysql_client.c index 94040b3a3..d0df0b6de 100644 --- a/server/modules/protocol/MySQL/MySQLClient/mysql_client.c +++ b/server/modules/protocol/MySQL/MySQLClient/mysql_client.c @@ -1450,8 +1450,10 @@ static int route_by_statement(SESSION* session, uint64_t capabilities, GWBUF** p { if (type & QUERY_TYPE_DISABLE_AUTOCOMMIT) { + /** Autocommit is disabled, a transaction will + * always be open */ session_set_autocommit(session, false); - session_set_trx_state(session, SESSION_TRX_INACTIVE); + session_set_trx_state(session, SESSION_TRX_ACTIVE); } else { @@ -1474,7 +1476,13 @@ static int route_by_statement(SESSION* session, uint64_t capabilities, GWBUF** p } else if ((type & QUERY_TYPE_COMMIT) || (type & QUERY_TYPE_ROLLBACK)) { - session_set_trx_state(session, SESSION_TRX_INACTIVE); + if (session_is_autocommit(session) || + (type & QUERY_TYPE_ENABLE_AUTOCOMMIT)) + { + /** Autocommit is either on or being enabled + * and both of these cause an implicit commit */ + session_set_trx_state(session, SESSION_TRX_INACTIVE); + } if (type & QUERY_TYPE_ENABLE_AUTOCOMMIT) {