Add Statement::sql_command_flags() function.

Now one can call thd->sql_command_flags() instead of
sql_command_flags[thd->lex->sql_command].
This commit is contained in:
Nikita Malyavin 2023-09-20 18:23:16 +04:00 committed by Oleksandr Byelkin
parent 4246c0fa01
commit 62d35a074f
3 changed files with 19 additions and 16 deletions

View File

@ -1341,7 +1341,7 @@ void THD::update_stats(void)
/* A SQL query. */ /* A SQL query. */
if (lex->sql_command == SQLCOM_SELECT) if (lex->sql_command == SQLCOM_SELECT)
select_commands++; select_commands++;
else if (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) else if (sql_command_flags() & CF_STATUS_COMMAND)
{ {
/* Ignore 'SHOW ' commands */ /* Ignore 'SHOW ' commands */
} }
@ -6651,8 +6651,8 @@ int THD::decide_logging_format(TABLE_LIST *tables)
blackhole_table_found= 1; blackhole_table_found= 1;
if (share->non_determinstic_insert && if (share->non_determinstic_insert &&
(sql_command_flags[lex->sql_command] & CF_CAN_GENERATE_ROW_EVENTS (sql_command_flags() & CF_CAN_GENERATE_ROW_EVENTS
&& !(sql_command_flags[lex->sql_command] & CF_SCHEMA_CHANGE))) && !(sql_command_flags() & CF_SCHEMA_CHANGE)))
has_write_tables_with_unsafe_statements= true; has_write_tables_with_unsafe_statements= true;
trans= table->file->has_transactions(); trans= table->file->has_transactions();
@ -6901,8 +6901,7 @@ int THD::decide_logging_format(TABLE_LIST *tables)
if (blackhole_table_found && if (blackhole_table_found &&
variables.binlog_format == BINLOG_FORMAT_ROW && variables.binlog_format == BINLOG_FORMAT_ROW &&
(sql_command_flags[lex->sql_command] & (sql_command_flags() & (CF_UPDATES_DATA | CF_DELETES_DATA)))
(CF_UPDATES_DATA | CF_DELETES_DATA)))
{ {
String table_names; String table_names;
/* /*
@ -6922,8 +6921,7 @@ int THD::decide_logging_format(TABLE_LIST *tables)
} }
if (!table_names.is_empty()) if (!table_names.is_empty())
{ {
bool is_update= MY_TEST(sql_command_flags[lex->sql_command] & bool is_update= MY_TEST(sql_command_flags() & CF_UPDATES_DATA);
CF_UPDATES_DATA);
/* /*
Replace the last ',' with '.' for table_names Replace the last ',' with '.' for table_names
*/ */

View File

@ -1489,6 +1489,8 @@ struct send_column_info_state
} }
}; };
extern uint sql_command_flags[];
/** /**
@class Statement @class Statement
@ -1569,6 +1571,10 @@ public:
{ {
set_query_inner(CSET_STRING()); set_query_inner(CSET_STRING());
} }
ulong sql_command_flags() const
{
return ::sql_command_flags[lex->sql_command];
}
/** /**
Name of the current (default) database. Name of the current (default) database.

View File

@ -4451,7 +4451,7 @@ reexecute:
the error stack. 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(); reprepare_observer.reset_reprepare_observer();
DBUG_ASSERT(thd->m_reprepare_observer == NULL); DBUG_ASSERT(thd->m_reprepare_observer == NULL);
@ -4463,7 +4463,7 @@ reexecute:
thd->m_reprepare_observer= NULL; thd->m_reprepare_observer= NULL;
if (unlikely(error) && if (unlikely(error) &&
(sql_command_flags[lex->sql_command] & CF_REEXECUTION_FRAGILE) && (sql_command_flags() & CF_REEXECUTION_FRAGILE) &&
!thd->is_fatal_error && !thd->killed && !thd->is_fatal_error && !thd->killed &&
reprepare_observer.is_invalidated() && reprepare_observer.is_invalidated() &&
reprepare_observer.can_retry()) reprepare_observer.can_retry())
@ -4578,7 +4578,7 @@ Prepared_statement::execute_bulk_loop(String *expanded_query,
goto err; 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.")); DBUG_PRINT("error", ("Command is not supported in bulk execution."));
my_error(ER_UNSUPPORTED_PS, MYF(0)); 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, Here second buffer for not optimized commands,
optimized commands do it inside thier internal loop. 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()) this->lex->has_returning())
{ {
// Above check can be true for SELECT in future // 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, Here we set parameters for not optimized commands,
optimized commands do it inside thier internal loop. 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)) if (set_bulk_parameters(TRUE))
{ {
@ -4644,7 +4644,7 @@ reexecute:
the error stack. 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(); reprepare_observer.reset_reprepare_observer();
DBUG_ASSERT(thd->m_reprepare_observer == NULL); DBUG_ASSERT(thd->m_reprepare_observer == NULL);
@ -4656,8 +4656,7 @@ reexecute:
thd->m_reprepare_observer= NULL; thd->m_reprepare_observer= NULL;
#ifdef WITH_WSREP #ifdef WITH_WSREP
if (!(sql_command_flags[lex->sql_command] & CF_PS_ARRAY_BINDING_OPTIMIZED) && if (!(sql_command_flags() & CF_PS_ARRAY_BINDING_OPTIMIZED) && WSREP(thd))
WSREP(thd))
{ {
if (wsrep_after_statement(thd)) if (wsrep_after_statement(thd))
{ {
@ -4673,7 +4672,7 @@ reexecute:
else else
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
if (unlikely(error) && if (unlikely(error) &&
(sql_command_flags[lex->sql_command] & CF_REEXECUTION_FRAGILE) && (sql_command_flags() & CF_REEXECUTION_FRAGILE) &&
!thd->is_fatal_error && !thd->killed && !thd->is_fatal_error && !thd->killed &&
reprepare_observer.is_invalidated() && reprepare_observer.is_invalidated() &&
reprepare_observer.can_retry()) reprepare_observer.can_retry())