From 87d84bc81c1940c36f2a1577bc47fa15ffb4c32b Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Tue, 14 Mar 2017 17:17:04 +0200 Subject: [PATCH] Ignore implicit commits --- server/core/query_classifier.cc | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/server/core/query_classifier.cc b/server/core/query_classifier.cc index 4b82f1616..a5dfff84f 100644 --- a/server/core/query_classifier.cc +++ b/server/core/query_classifier.cc @@ -871,18 +871,32 @@ static uint32_t qc_get_trx_type_mask_using_qc(GWBUF* stmt) { uint32_t type_mask = qc_get_type_mask(stmt); - if (!(type_mask & QUERY_TYPE_BEGIN_TRX)) + if (qc_query_is_type(type_mask, QUERY_TYPE_WRITE) && + qc_query_is_type(type_mask, QUERY_TYPE_COMMIT)) { - type_mask &= ~(QUERY_TYPE_WRITE | QUERY_TYPE_READ); + // This is a commit reported for "CREATE TABLE...", + // "DROP TABLE...", etc. that cause an implicit commit. + type_mask = 0; } + else + { + // Only START TRANSACTION can be explicitly READ or WRITE. + if (!(type_mask & QUERY_TYPE_BEGIN_TRX)) + { + // So, strip them away for everything else. + type_mask &= ~(QUERY_TYPE_WRITE | QUERY_TYPE_READ); + } - type_mask &= (QUERY_TYPE_BEGIN_TRX | - QUERY_TYPE_WRITE | - QUERY_TYPE_READ | - QUERY_TYPE_COMMIT | - QUERY_TYPE_ROLLBACK | - QUERY_TYPE_ENABLE_AUTOCOMMIT | - QUERY_TYPE_DISABLE_AUTOCOMMIT); + // Then leave only the bits related to transaction and + // autocommit state. + type_mask &= (QUERY_TYPE_BEGIN_TRX | + QUERY_TYPE_WRITE | + QUERY_TYPE_READ | + QUERY_TYPE_COMMIT | + QUERY_TYPE_ROLLBACK | + QUERY_TYPE_ENABLE_AUTOCOMMIT | + QUERY_TYPE_DISABLE_AUTOCOMMIT); + } return type_mask; }