From 62d35a074fdd0de61b2085c1734c079e6a17eaec Mon Sep 17 00:00:00 2001 From: Nikita Malyavin Date: Wed, 20 Sep 2023 18:23:16 +0400 Subject: [PATCH] Add Statement::sql_command_flags() function. Now one can call thd->sql_command_flags() instead of sql_command_flags[thd->lex->sql_command]. --- sql/sql_class.cc | 12 +++++------- sql/sql_class.h | 6 ++++++ sql/sql_prepare.cc | 17 ++++++++--------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 13e478eeb4e..00161d19a9b 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1341,7 +1341,7 @@ void THD::update_stats(void) /* A SQL query. */ if (lex->sql_command == SQLCOM_SELECT) select_commands++; - else if (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) + else if (sql_command_flags() & CF_STATUS_COMMAND) { /* Ignore 'SHOW ' commands */ } @@ -6651,8 +6651,8 @@ int THD::decide_logging_format(TABLE_LIST *tables) blackhole_table_found= 1; if (share->non_determinstic_insert && - (sql_command_flags[lex->sql_command] & CF_CAN_GENERATE_ROW_EVENTS - && !(sql_command_flags[lex->sql_command] & CF_SCHEMA_CHANGE))) + (sql_command_flags() & CF_CAN_GENERATE_ROW_EVENTS + && !(sql_command_flags() & CF_SCHEMA_CHANGE))) has_write_tables_with_unsafe_statements= true; trans= table->file->has_transactions(); @@ -6901,8 +6901,7 @@ int THD::decide_logging_format(TABLE_LIST *tables) if (blackhole_table_found && variables.binlog_format == BINLOG_FORMAT_ROW && - (sql_command_flags[lex->sql_command] & - (CF_UPDATES_DATA | CF_DELETES_DATA))) + (sql_command_flags() & (CF_UPDATES_DATA | CF_DELETES_DATA))) { String table_names; /* @@ -6922,8 +6921,7 @@ int THD::decide_logging_format(TABLE_LIST *tables) } if (!table_names.is_empty()) { - bool is_update= MY_TEST(sql_command_flags[lex->sql_command] & - CF_UPDATES_DATA); + bool is_update= MY_TEST(sql_command_flags() & CF_UPDATES_DATA); /* Replace the last ',' with '.' for table_names */ diff --git a/sql/sql_class.h b/sql/sql_class.h index 95a1faf1f9d..5c75c9655e3 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1489,6 +1489,8 @@ struct send_column_info_state } }; +extern uint sql_command_flags[]; + /** @class Statement @@ -1569,6 +1571,10 @@ public: { set_query_inner(CSET_STRING()); } + ulong sql_command_flags() const + { + return ::sql_command_flags[lex->sql_command]; + } /** Name of the current (default) database. diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 3e915cf3af5..364a125c9b4 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -4451,7 +4451,7 @@ reexecute: the error stack. */ - if (sql_command_flags[lex->sql_command] & CF_REEXECUTION_FRAGILE) + if (sql_command_flags() & CF_REEXECUTION_FRAGILE) { reprepare_observer.reset_reprepare_observer(); DBUG_ASSERT(thd->m_reprepare_observer == NULL); @@ -4463,7 +4463,7 @@ reexecute: thd->m_reprepare_observer= NULL; if (unlikely(error) && - (sql_command_flags[lex->sql_command] & CF_REEXECUTION_FRAGILE) && + (sql_command_flags() & CF_REEXECUTION_FRAGILE) && !thd->is_fatal_error && !thd->killed && reprepare_observer.is_invalidated() && reprepare_observer.can_retry()) @@ -4578,7 +4578,7 @@ Prepared_statement::execute_bulk_loop(String *expanded_query, goto err; } - if (!(sql_command_flags[lex->sql_command] & CF_PS_ARRAY_BINDING_SAFE)) + if (!(sql_command_flags() & CF_PS_ARRAY_BINDING_SAFE)) { DBUG_PRINT("error", ("Command is not supported in bulk execution.")); my_error(ER_UNSUPPORTED_PS, MYF(0)); @@ -4588,7 +4588,7 @@ Prepared_statement::execute_bulk_loop(String *expanded_query, Here second buffer for not optimized commands, optimized commands do it inside thier internal loop. */ - if (!(sql_command_flags[lex->sql_command] & CF_PS_ARRAY_BINDING_OPTIMIZED) && + if (!(sql_command_flags() & CF_PS_ARRAY_BINDING_OPTIMIZED) && this->lex->has_returning()) { // Above check can be true for SELECT in future @@ -4621,7 +4621,7 @@ Prepared_statement::execute_bulk_loop(String *expanded_query, Here we set parameters for not optimized commands, optimized commands do it inside thier internal loop. */ - if (!(sql_command_flags[lex->sql_command] & CF_PS_ARRAY_BINDING_OPTIMIZED)) + if (!(sql_command_flags() & CF_PS_ARRAY_BINDING_OPTIMIZED)) { if (set_bulk_parameters(TRUE)) { @@ -4644,7 +4644,7 @@ reexecute: the error stack. */ - if (sql_command_flags[lex->sql_command] & CF_REEXECUTION_FRAGILE) + if (sql_command_flags() & CF_REEXECUTION_FRAGILE) { reprepare_observer.reset_reprepare_observer(); DBUG_ASSERT(thd->m_reprepare_observer == NULL); @@ -4656,8 +4656,7 @@ reexecute: thd->m_reprepare_observer= NULL; #ifdef WITH_WSREP - if (!(sql_command_flags[lex->sql_command] & CF_PS_ARRAY_BINDING_OPTIMIZED) && - WSREP(thd)) + if (!(sql_command_flags() & CF_PS_ARRAY_BINDING_OPTIMIZED) && WSREP(thd)) { if (wsrep_after_statement(thd)) { @@ -4673,7 +4672,7 @@ reexecute: else #endif /* WITH_WSREP */ if (unlikely(error) && - (sql_command_flags[lex->sql_command] & CF_REEXECUTION_FRAGILE) && + (sql_command_flags() & CF_REEXECUTION_FRAGILE) && !thd->is_fatal_error && !thd->killed && reprepare_observer.is_invalidated() && reprepare_observer.can_retry())