diff --git a/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc b/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc index b7383a2b1..2da28845f 100644 --- a/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc +++ b/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc @@ -913,11 +913,23 @@ static uint32_t resolve_query_type(parsing_info_t *pi, THD* thd) /** System session variable */ case Item_func::GSYSVAR_FUNC: - func_qtype |= QUERY_TYPE_SYSVAR_READ; - MXS_DEBUG("%lu [resolve_query_type] " - "functype GSYSVAR_FUNC, system " - "variable read.", - pthread_self()); + { + const char* name = item->name; + if (name && + ((strcasecmp(name, "@@last_insert_id") == 0) || + (strcasecmp(name, "@@identity") == 0))) + { + func_qtype |= QUERY_TYPE_MASTER_READ; + } + else + { + func_qtype |= QUERY_TYPE_SYSVAR_READ; + } + MXS_DEBUG("%lu [resolve_query_type] " + "functype GSYSVAR_FUNC, system " + "variable read.", + pthread_self()); + } break; /** User-defined variable read */ diff --git a/query_classifier/qc_sqlite/qc_sqlite.c b/query_classifier/qc_sqlite/qc_sqlite.c index d44c09949..71280297c 100644 --- a/query_classifier/qc_sqlite/qc_sqlite.c +++ b/query_classifier/qc_sqlite/qc_sqlite.c @@ -670,7 +670,15 @@ static void update_affected_fields(QC_SQLITE_INFO* info, } else { - info->types |= QUERY_TYPE_SYSVAR_READ; + if ((strcasecmp(&zToken[2], "identity") == 0) || + (strcasecmp(&zToken[2], "last_insert_id") == 0)) + { + info->types |= QUERY_TYPE_MASTER_READ; + } + else + { + info->types |= QUERY_TYPE_SYSVAR_READ; + } } } else diff --git a/query_classifier/test/expected.sql b/query_classifier/test/expected.sql index fd67bcc91..0aa0a9739 100644 --- a/query_classifier/test/expected.sql +++ b/query_classifier/test/expected.sql @@ -12,3 +12,6 @@ QUERY_TYPE_BEGIN_TRX QUERY_TYPE_ROLLBACK QUERY_TYPE_COMMIT QUERY_TYPE_SESSION_WRITE +QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ +QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ +QUERY_TYPE_READ|QUERY_TYPE_MASTER_READ diff --git a/query_classifier/test/input.sql b/query_classifier/test/input.sql index 450bf81c8..bfa445297 100644 --- a/query_classifier/test/input.sql +++ b/query_classifier/test/input.sql @@ -12,3 +12,6 @@ BEGIN; ROLLBACK; COMMIT; use X; +select last_insert_id(); +select @@last_insert_id; +select @@identity;