MXS-2439 Do not classify implicit commits as commits

The type mask of CREATE, ALTER, etc. that cause an implicit commit
will no longer contain the bit QUERY_TYPE_COMMIT.

As an implicit commit does not change the transaction state as seen
by MaxScale, it does not make sense to claim that the statement is
a commit.
This commit is contained in:
Johan Wikman
2019-04-16 13:26:52 +03:00
parent b9e6384a41
commit 524a083203
3 changed files with 25 additions and 34 deletions

View File

@ -774,9 +774,8 @@ static uint32_t resolve_query_type(parsing_info_t* pi, THD* thd)
if (set_autocommit_stmt == 1) if (set_autocommit_stmt == 1)
{ {
type |= QUERY_TYPE_ENABLE_AUTOCOMMIT; type |= QUERY_TYPE_ENABLE_AUTOCOMMIT;
type |= QUERY_TYPE_COMMIT;
} }
type |= QUERY_TYPE_COMMIT;
} }
if (set_autocommit_stmt == 0) if (set_autocommit_stmt == 0)

View File

@ -1550,7 +1550,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_ALTER; m_operation = QUERY_OP_ALTER;
} }
@ -1568,7 +1568,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
update_names_from_srclist(NULL, pSrcList); update_names_from_srclist(NULL, pSrcList);
@ -1600,7 +1600,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
if (pTableName) if (pTableName)
{ {
@ -1650,7 +1650,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_CREATE; m_operation = QUERY_OP_CREATE;
if (pTblName) if (pTblName)
@ -1679,7 +1679,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_CREATE; m_operation = QUERY_OP_CREATE;
const Token* pName = pName2->z ? pName2 : pName1; const Token* pName = pName2->z ? pName2 : pName1;
@ -1792,7 +1792,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_DROP; m_operation = QUERY_OP_DROP;
update_names_from_srclist(NULL, pTable); update_names_from_srclist(NULL, pTable);
@ -1807,10 +1807,6 @@ public:
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = QUERY_TYPE_WRITE; m_type_mask = QUERY_TYPE_WRITE;
if (!isTemp)
{
m_type_mask |= QUERY_TYPE_COMMIT;
}
m_operation = QUERY_OP_DROP; m_operation = QUERY_OP_DROP;
if (!isView) if (!isView)
{ {
@ -1949,10 +1945,6 @@ public:
{ {
m_type_mask |= QUERY_TYPE_CREATE_TMP_TABLE; m_type_mask |= QUERY_TYPE_CREATE_TMP_TABLE;
} }
else
{
m_type_mask |= QUERY_TYPE_COMMIT;
}
const Token* pName = pName2->z ? pName2 : pName1; const Token* pName = pName2->z ? pName2 : pName1;
const Token* pDatabase = pName2->z ? pName1 : NULL; const Token* pDatabase = pName2->z ? pName1 : NULL;
@ -2095,7 +2087,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_ALTER; m_operation = QUERY_OP_ALTER;
switch (command) switch (command)
@ -2143,7 +2135,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
update_names_from_srclist(NULL, pTables); update_names_from_srclist(NULL, pTables);
@ -2245,7 +2237,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_DROP; m_operation = QUERY_OP_DROP;
switch (what) switch (what)
@ -2380,7 +2372,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
} }
void maxscaleHandler(Parse* pParse, mxs_handler_t type, SrcList* pFullName, Token* pName) void maxscaleHandler(Parse* pParse, mxs_handler_t type, SrcList* pFullName, Token* pName)
@ -2505,7 +2497,7 @@ public:
{ {
case TK_ALTER: case TK_ALTER:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_ALTER; m_operation = QUERY_OP_ALTER;
break; break;
@ -2530,7 +2522,7 @@ public:
case TK_CREATE: case TK_CREATE:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_CREATE; m_operation = QUERY_OP_CREATE;
break; break;
@ -2548,7 +2540,7 @@ public:
case TK_DROP: case TK_DROP:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_DROP; m_operation = QUERY_OP_DROP;
break; break;
@ -2565,7 +2557,7 @@ public:
case TK_GRANT: case TK_GRANT:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_GRANT; m_operation = QUERY_OP_GRANT;
break; break;
@ -2598,13 +2590,13 @@ public:
case TK_REVOKE: case TK_REVOKE:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_REVOKE; m_operation = QUERY_OP_REVOKE;
break; break;
case TK_RESET: case TK_RESET:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
break; break;
case TK_SELECT: case TK_SELECT:
@ -2643,7 +2635,7 @@ public:
case TK_TRUNCATE: case TK_TRUNCATE:
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
break; break;
case TK_XA: case TK_XA:
@ -2665,7 +2657,7 @@ public:
if (m_keyword_2 == TK_TABLE) if (m_keyword_2 == TK_TABLE)
{ {
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
} }
break; break;
@ -2690,7 +2682,7 @@ public:
if (m_keyword_2 == TK_TABLE) if (m_keyword_2 == TK_TABLE)
{ {
m_status = QC_QUERY_TOKENIZED; m_status = QC_QUERY_TOKENIZED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
} }
break; break;
@ -2740,7 +2732,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT; m_type_mask = QUERY_TYPE_WRITE;
for (int i = 0; i < pTables->nSrc; ++i) for (int i = 0; i < pTables->nSrc; ++i)
{ {
@ -2826,7 +2818,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
switch (kind) switch (kind)
{ {
@ -2852,7 +2844,7 @@ public:
switch (what) switch (what)
{ {
case MXS_RESET_QUERY_CACHE: case MXS_RESET_QUERY_CACHE:
m_type_mask = (QUERY_TYPE_SESSION_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_SESSION_WRITE;
break; break;
default: default:
@ -3123,7 +3115,7 @@ public:
mxb_assert(this_thread.initialized); mxb_assert(this_thread.initialized);
m_status = QC_QUERY_PARSED; m_status = QC_QUERY_PARSED;
m_type_mask = (QUERY_TYPE_WRITE | QUERY_TYPE_COMMIT); m_type_mask = QUERY_TYPE_WRITE;
m_operation = QUERY_OP_TRUNCATE; m_operation = QUERY_OP_TRUNCATE;
char* zDatabase; char* zDatabase;

View File

@ -2,7 +2,7 @@ QUERY_TYPE_READ
QUERY_TYPE_READ QUERY_TYPE_READ
QUERY_TYPE_WRITE QUERY_TYPE_WRITE
QUERY_TYPE_WRITE QUERY_TYPE_WRITE
QUERY_TYPE_WRITE|QUERY_TYPE_COMMIT QUERY_TYPE_WRITE
QUERY_TYPE_WRITE|QUERY_TYPE_CREATE_TMP_TABLE QUERY_TYPE_WRITE|QUERY_TYPE_CREATE_TMP_TABLE
QUERY_TYPE_READ|QUERY_TYPE_SYSVAR_READ QUERY_TYPE_READ|QUERY_TYPE_SYSVAR_READ
QUERY_TYPE_READ|QUERY_TYPE_USERVAR_READ QUERY_TYPE_READ|QUERY_TYPE_USERVAR_READ