MySQL  8.0.27
Source Code Documentation
Sql_cmd_dml Class Referenceabstract

#include <sql_cmd_dml.h>

Inheritance diagram for Sql_cmd_dml:
Sql_cmd Sql_cmd_call Sql_cmd_delete Sql_cmd_insert_base Sql_cmd_select Sql_cmd_update Sql_cmd_insert_select Sql_cmd_insert_values Sql_cmd_do Sql_cmd_show Sql_cmd_show_charsets Sql_cmd_show_collations Sql_cmd_show_create_user Sql_cmd_show_databases Sql_cmd_show_engines Sql_cmd_show_noplan Sql_cmd_show_open_tables Sql_cmd_show_plugins Sql_cmd_show_processlist Sql_cmd_show_profile Sql_cmd_show_schema_base Sql_cmd_show_status Sql_cmd_show_status_func Sql_cmd_show_status_proc Sql_cmd_show_table_base Sql_cmd_show_variables

Public Member Functions

virtual bool is_data_change_stmt () const
 
bool prepare (THD *thd) override
 Command-specific resolving (doesn't include LEX::prepare()) More...
 
bool execute (THD *thd) override
 Execute a DML statement. More...
 
bool is_dml () const override
 
virtual bool may_use_cursor () const
 
bool is_single_table_plan () const override
 
Query_resultquery_result () const
 
void set_query_result (Query_result *result)
 Set query result object for this query statement. More...
 
void set_lazy_result ()
 Signal that root result object needs preparing in next execution. More...
 
- Public Member Functions inherited from Sql_cmd
virtual enum_sql_command sql_command_code () const =0
 Return the command code for this statement. More...
 
bool needs_explicit_preparation () const
 
bool is_regular () const
 
bool is_prepared () const
 
virtual void cleanup (THD *)
 Command-specific reinitialization before execution of prepared statement. More...
 
void set_owner (Prepared_statement *stmt)
 Set the owning prepared statement. More...
 
Prepared_statementowner () const
 Get the owning prepared statement. More...
 
void set_as_part_of_sp ()
 Mark statement as part of procedure. More...
 
bool is_part_of_sp () const
 
virtual bool accept (THD *, Select_lex_visitor *)
 
virtual const MYSQL_LEX_CSTRINGeligible_secondary_storage_engine () const
 Is this statement of a type and on a form that makes it eligible for execution in a secondary storage engine? More...
 
void disable_secondary_storage_engine ()
 Disable use of secondary storage engines in this statement. More...
 
bool secondary_storage_engine_disabled () const
 Has use of secondary storage engines been disabled for this statement? More...
 
void use_secondary_storage_engine (const handlerton *hton)
 Mark the current statement as using a secondary storage engine. More...
 
bool using_secondary_storage_engine () const
 Is this statement using a secondary storage engine? More...
 
const handlertonsecondary_engine () const
 Get the handlerton of the secondary engine that is used for executing this statement, or nullptr if a secondary engine is not used. More...
 
void set_optional_transform_prepared (bool value)
 
bool is_optional_transform_prepared ()
 

Protected Member Functions

 Sql_cmd_dml ()
 
bool is_empty_query () const
 
void set_empty_query ()
 Set statement as returning no data. More...
 
virtual bool precheck (THD *thd)=0
 Perform a precheck of table privileges for the specific operation. More...
 
virtual bool check_privileges (THD *thd)=0
 Check privileges on a prepared statement, called at start of execution of the statement. More...
 
bool check_all_table_privileges (THD *thd)
 Read and check privileges for all tables in a DML statement. More...
 
virtual bool prepare_inner (THD *thd)=0
 Perform the command-specific parts of DML command preparation, to be called from prepare() More...
 
virtual bool execute_inner (THD *thd)
 The inner parts of query optimization and execution. More...
 
virtual bool restore_cmd_properties (THD *thd)
 Restore command properties before execution. More...
 
virtual bool save_cmd_properties (THD *thd)
 Save command properties, such as prepared query details and table props. More...
 
const MYSQL_LEX_CSTRINGget_eligible_secondary_engine () const
 Helper function that checks if the command is eligible for secondary engine and if that's true returns the name of that eligible secondary storage engine. More...
 
- Protected Member Functions inherited from Sql_cmd
 Sql_cmd ()
 
virtual ~Sql_cmd ()
 
void set_prepared ()
 Set this statement as prepared. More...
 

Protected Attributes

LEXlex
 Pointer to LEX for this statement. More...
 
Query_resultresult
 Pointer to object for handling of the result. More...
 
bool m_empty_query
 True if query will produce no rows. More...
 
bool m_lazy_result
 True: prepare query result on next execution. More...
 

Constructor & Destructor Documentation

◆ Sql_cmd_dml()

Sql_cmd_dml::Sql_cmd_dml ( )
inlineprotected

Member Function Documentation

◆ check_privileges()

virtual bool Sql_cmd_dml::check_privileges ( THD thd)
protectedpure virtual

Check privileges on a prepared statement, called at start of execution of the statement.

Check that user has all relevant privileges to the statement, ie. INSERT privilege for columns inserted into, UPDATE privilege for columns that are updated, DELETE privilege for tables that are deleted from, SELECT privilege for columns that are referenced, etc.

Parameters
thdthread handler
Returns
false if success, true if false

Implemented in Sql_cmd_update, Sql_cmd_show_replica_status, Sql_cmd_show_replicas, Sql_cmd_show_relaylog_events, Sql_cmd_show_processlist, Sql_cmd_show_master_status, Sql_cmd_show_grants, Sql_cmd_show_events, Sql_cmd_show_engine_status, Sql_cmd_show_engine_mutex, Sql_cmd_show_engine_logs, Sql_cmd_show_databases, Sql_cmd_show_create_user, Sql_cmd_show_create_trigger, Sql_cmd_show_create_table, Sql_cmd_show_create_procedure, Sql_cmd_show_create_function, Sql_cmd_show_create_event, Sql_cmd_show_create_database, Sql_cmd_show_binlogs, Sql_cmd_show_binlog_events, Sql_cmd_show_routine_code, Sql_cmd_show_table_base, Sql_cmd_show_schema_base, Sql_cmd_select, Sql_cmd_insert_base, Sql_cmd_delete, Sql_cmd_call, and Sql_cmd_show.

◆ is_data_change_stmt()

virtual bool Sql_cmd_dml::is_data_change_stmt ( ) const
inlinevirtual
Returns
true if data change statement, false if not (SELECT statement)

Reimplemented in Sql_cmd_select, and Sql_cmd_call.

◆ is_dml()

bool Sql_cmd_dml::is_dml ( ) const
inlineoverridevirtual
Returns
true if SQL command is a DML statement

Reimplemented from Sql_cmd.

◆ is_empty_query()

bool Sql_cmd_dml::is_empty_query ( ) const
inlineprotected
Returns
true if query is guaranteed to return no data
  • Check empty query expression for INSERT

◆ is_single_table_plan()

bool Sql_cmd_dml::is_single_table_plan ( ) const
inlineoverridevirtual
Returns
true if implemented as single table plan, DML statement only

Reimplemented from Sql_cmd.

Reimplemented in Sql_cmd_update, Sql_cmd_insert_values, and Sql_cmd_delete.

◆ may_use_cursor()

virtual bool Sql_cmd_dml::may_use_cursor ( ) const
inlinevirtual

Reimplemented in Sql_cmd_select.

◆ precheck()

virtual bool Sql_cmd_dml::precheck ( THD thd)
protectedpure virtual

Perform a precheck of table privileges for the specific operation.

Check that user has some relevant privileges for all tables involved in the statement, e.g. SELECT privileges for tables selected from, INSERT privileges for tables inserted into, etc. This function will also populate TABLE_LIST::grant with all privileges the user has for each table, which is later used during checking of column privileges. Note that at preparation time, views are not expanded yet. Privilege checking is thus rudimentary and must be complemented with later calls to Query_block::check_view_privileges(). The reason to call this function at such an early stage is to be able to quickly reject statements for which the user obviously has insufficient privileges. This function is called before preparing the statement. The function must also be complemented with proper privilege checks for all involved columns (e.g. check_column_grant_*).

See also
also the function comment of Query_block::prepare(). During execution of a prepared statement, call check_privileges() instead.
Parameters
thdthread handler
Returns
false if success, true if false

Implemented in Sql_cmd_update, Sql_cmd_show, Sql_cmd_select, Sql_cmd_insert_base, Sql_cmd_delete, and Sql_cmd_call.

◆ prepare_inner()

virtual bool Sql_cmd_dml::prepare_inner ( THD thd)
protectedpure virtual

Perform the command-specific parts of DML command preparation, to be called from prepare()

Parameters
thdthe current thread
Returns
false if success, true if error

Implemented in Sql_cmd_update, Sql_cmd_select, Sql_cmd_insert_base, Sql_cmd_delete, and Sql_cmd_call.

◆ set_empty_query()

void Sql_cmd_dml::set_empty_query ( )
inlineprotected

Set statement as returning no data.

◆ set_lazy_result()

void Sql_cmd_dml::set_lazy_result ( )
inline

Signal that root result object needs preparing in next execution.

Member Data Documentation

◆ lex

LEX* Sql_cmd_dml::lex
protected

Pointer to LEX for this statement.

◆ m_empty_query

bool Sql_cmd_dml::m_empty_query
protected

True if query will produce no rows.

◆ m_lazy_result

bool Sql_cmd_dml::m_lazy_result
protected

True: prepare query result on next execution.

◆ result

Query_result* Sql_cmd_dml::result
protected

Pointer to object for handling of the result.


The documentation for this class was generated from the following files: