MySQL  8.0.17
Source Code Documentation
Sql_cmd_insert_base Class Reference

Base class for all INSERT and REPLACE statements. More...

#include <sql_insert.h>

Inheritance diagram for Sql_cmd_insert_base:
Sql_cmd_dml Sql_cmd Sql_cmd_insert_select Sql_cmd_insert_values

Public Member Functions

 Sql_cmd_insert_base (bool is_replace_arg, enum_duplicates duplicates_arg)
 
virtual void cleanup (THD *) override
 Command-specific reinitialization before execution of prepared statement. More...
 
virtual bool accept (THD *thd, Select_lex_visitor *visitor) override
 
- Public Member Functions inherited from Sql_cmd_dml
virtual bool is_data_change_stmt () const
 
virtual bool prepare (THD *thd)
 Command-specific resolving (doesn't include LEX::prepare()) More...
 
virtual bool execute (THD *thd)
 Execute this query once. More...
 
virtual bool is_dml () const
 
virtual bool is_single_table_plan () const
 
- 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 is_prepared () const
 
void set_owner (Prepared_statement *stmt)
 Set the owning prepared statement. More...
 
Prepared_statementget_owner ()
 Get the owning prepared statement. More...
 
virtual void unprepare (THD *thd)
 Temporary function used to "unprepare" a prepared statement after preparation, so that a subsequent execute statement will reprepare it. More...
 
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...
 

Public Attributes

bool empty_field_list_on_rset
 
List< Iteminsert_field_list
 Field list to insert/replace. More...
 
List< List_iteminsert_many_values
 Row data to insert/replace. More...
 
uint value_count
 Number of values per row in insert_many_values, available after resolving. More...
 
List< Itemupdate_field_list
 ON DUPLICATE KEY UPDATE field list. More...
 
List< Itemupdate_value_list
 ON DUPLICATE KEY UPDATE data value list. More...
 
const enum_duplicates duplicates
 

Protected Member Functions

virtual bool precheck (THD *thd) override
 Perform a precheck of table privileges for the specific operation. More...
 
virtual bool prepare_inner (THD *thd) override
 Prepare items in INSERT statement. More...
 
- Protected Member Functions inherited from Sql_cmd_dml
 Sql_cmd_dml ()
 
bool is_empty_query () const
 
void set_empty_query ()
 Set statement as returning no data. More...
 
virtual bool execute_inner (THD *thd)
 The inner parts of query optimization and execution. More...
 
- Protected Member Functions inherited from Sql_cmd
 Sql_cmd ()
 
virtual ~Sql_cmd ()
 
bool needs_explicit_preparation () const
 
void set_prepared ()
 Set this statement as prepared. More...
 

Protected Attributes

const bool is_replace
 
- Protected Attributes inherited from Sql_cmd_dml
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...
 
- Protected Attributes inherited from Sql_cmd
bool prepare_only
 

Private Member Functions

bool resolve_update_expressions (THD *thd)
 Resolve ON DUPLICATE KEY UPDATE expressions. More...
 

Detailed Description

Base class for all INSERT and REPLACE statements.

Abstract class that is inherited by Sql_cmd_insert_values and Sql_cmd_insert_select.

Constructor & Destructor Documentation

◆ Sql_cmd_insert_base()

Sql_cmd_insert_base::Sql_cmd_insert_base ( bool  is_replace_arg,
enum_duplicates  duplicates_arg 
)
inlineexplicit

Member Function Documentation

◆ accept()

bool Sql_cmd_insert_base::accept ( THD thd,
Select_lex_visitor visitor 
)
overridevirtual

Reimplemented from Sql_cmd.

◆ cleanup()

virtual void Sql_cmd_insert_base::cleanup ( THD thd)
inlineoverridevirtual

Command-specific reinitialization before execution of prepared statement.

See also
reinit_stmt_before_use()
Note
Currently this function is overloaded for INSERT/REPLACE stmts only.
Parameters
thdCurrent THD.

Reimplemented from Sql_cmd.

◆ precheck()

bool Sql_cmd_insert_base::precheck ( THD thd)
overrideprotectedvirtual

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 SELECT_LEX::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.

Parameters
thdthread handler
Returns
false if success, true if false

Implements Sql_cmd_dml.

◆ prepare_inner()

bool Sql_cmd_insert_base::prepare_inner ( THD thd)
overrideprotectedvirtual

Prepare items in INSERT statement.

Parameters
thdThread handler

WARNING You MUST set table->insert_values to 0 after calling this function before releasing the table object.

Returns
false if success, true if error

Implements Sql_cmd_dml.

◆ resolve_update_expressions()

bool Sql_cmd_insert_base::resolve_update_expressions ( THD thd)
private

Resolve ON DUPLICATE KEY UPDATE expressions.

Caller is responsible for setting up the columns to be updated before calling this function.

Parameters
thdThread handler
Returns
false if success, true if error

Member Data Documentation

◆ duplicates

const enum_duplicates Sql_cmd_insert_base::duplicates

◆ empty_field_list_on_rset

bool Sql_cmd_insert_base::empty_field_list_on_rset

◆ insert_field_list

List<Item> Sql_cmd_insert_base::insert_field_list

Field list to insert/replace.

One of two things:

  1. For the INSERT/REPLACE ... (col1, ... colN) VALUES ... syntax this is a list of col1, ..., colN fields.
  2. For the INSERT/REPLACE ... SET col1=x1, ... colM=xM syntax extension this is a list of col1, ... colM fields as well.

◆ insert_many_values

List<List_item> Sql_cmd_insert_base::insert_many_values

Row data to insert/replace.

One of two things:

  1. For the INSERT/REPLACE ... VALUES (row1), (row2), ... (rowN) syntax the list contains N List_item lists: one List_item per row.
  2. For the INSERT/REPLACE ... SET col1=x1, ... colM=xM syntax extension this list contains only 1 List_item of M data values: this way we emulate this syntax: INSERT/REPLACE ... (col1, ... colM) VALUE (x1, ..., xM);

◆ is_replace

const bool Sql_cmd_insert_base::is_replace
protected

◆ update_field_list

List<Item> Sql_cmd_insert_base::update_field_list

ON DUPLICATE KEY UPDATE field list.

◆ update_value_list

List<Item> Sql_cmd_insert_base::update_value_list

ON DUPLICATE KEY UPDATE data value list.

◆ value_count

uint Sql_cmd_insert_base::value_count

Number of values per row in insert_many_values, available after resolving.


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