From 48a67eeef213dfb294d7ebb4607ede70e9d2860a Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Thu, 29 Jun 2017 14:57:49 +0200 Subject: [PATCH] qc_mysqlembedded: Collect ... WHERE EXISTS ... Information was not collected from the subselect in a situation e.g. like SELECT ... WHERE NOT EXISTS (SELECT ...) --- .../qc_mysqlembedded/qc_mysqlembedded.cc | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc b/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc index e72aebcaa..9b5e2fc09 100644 --- a/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc +++ b/query_classifier/qc_mysqlembedded/qc_mysqlembedded.cc @@ -2442,6 +2442,7 @@ static bool should_function_be_ignored(parsing_info_t* pi, const char* func_name (strcasecmp(func_name, "cast_as_unsigned") == 0) || (strcasecmp(func_name, "get_user_var") == 0) || (strcasecmp(func_name, "get_system_var") == 0) || + (strcasecmp(func_name, "not") == 0) || (strcasecmp(func_name, "set_user_var") == 0) || (strcasecmp(func_name, "set_system_var") == 0)) { @@ -2678,7 +2679,25 @@ static void update_field_infos(parsing_info_t* pi, break; case Item_subselect::EXISTS_SUBS: - // TODO: Handle these explicitly as well. + { + Item_exists_subselect* exists_subselect_item = + static_cast(item); + + st_select_lex* ssl = exists_subselect_item->get_select_lex(); + if (ssl) + { + uint32_t sub_usage = usage; + + sub_usage &= ~QC_USED_IN_SELECT; + sub_usage |= QC_USED_IN_SUBSELECT; + + update_field_infos(pi, + get_lex(pi), + ssl, + sub_usage, + excludep); + } + } break; case Item_subselect::SINGLEROW_SUBS: