MySQL 9.1.0
Source Code Documentation
|
Base class for all INSERT and REPLACE statements. More...
#include <sql_insert.h>
Public Member Functions | |
Sql_cmd_insert_base (bool is_replace_arg, enum_duplicates duplicates_arg) | |
bool | accept (THD *thd, Select_lex_visitor *visitor) override |
Public Member Functions inherited from Sql_cmd_dml | |
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... | |
enum enum_sql_cmd_type | sql_cmd_type () const override |
virtual bool | may_use_cursor () const |
bool | is_single_table_plan () const override |
Query_result * | query_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... | |
bool | are_dynamic_parameters_allowed () const final |
Signal that DML statement can have dynamic parameters. 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 bool | reprepare_on_execute_required () const |
Some SQL commands currently require re-preparation on re-execution of a prepared statement or stored procedure. More... | |
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_statement * | owner () 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 const MYSQL_LEX_CSTRING * | eligible_secondary_storage_engine (THD *) const |
Is this statement of a type and on a form that makes it eligible for execution in a secondary storage engine? More... | |
virtual bool | is_bulk_load () const |
void | disable_secondary_storage_engine () |
Disable use of secondary storage engines in this statement. More... | |
void | enable_secondary_storage_engine () |
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 handlerton * | secondary_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 () |
Public Attributes | |
mem_root_deque< Item * > | insert_field_list |
Field list to insert/replace. More... | |
mem_root_deque< List_item * > | insert_many_values |
Row data to insert/replace. More... | |
bool | values_need_privilege_check {false} |
True if VALUES clause contain column references that need privilege check. More... | |
uint | column_count |
Number of columns in original insert column list. More... | |
uint | value_count |
Number of values per row in insert_many_values, available after resolving. More... | |
mem_root_deque< Item * > | update_field_list |
ON DUPLICATE KEY UPDATE field list. More... | |
mem_root_deque< Item * > | update_value_list |
ON DUPLICATE KEY UPDATE data value list. More... | |
Table_ref * | values_table {nullptr} |
ON DUPLICATE KEY UPDATE reference to VALUES. More... | |
Create_col_name_list * | values_column_list {nullptr} |
mem_root_deque< Item * > | values_field_list |
Field list for VALUES derived table. More... | |
const enum_duplicates | duplicates |
Protected Member Functions | |
bool | precheck (THD *thd) override |
Perform a precheck of table privileges for the specific operation. More... | |
bool | check_privileges (THD *thd) override |
Check privileges on a prepared statement, called at start of execution of the statement. More... | |
bool | prepare_inner (THD *thd) override |
Prepare items in INSERT statement. More... | |
bool | restore_cmd_properties (THD *thd) override |
Restore command properties before execution. 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... | |
bool | check_all_table_privileges (THD *thd) |
Read and check privileges for all tables in a DML statement. More... | |
virtual bool | execute_inner (THD *thd) |
The inner parts of query optimization and execution. More... | |
virtual bool | save_cmd_properties (THD *thd) |
Save command properties, such as prepared query details and table props. More... | |
const MYSQL_LEX_CSTRING * | get_eligible_secondary_engine (THD *thd) 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 | |
const bool | is_replace |
true when REPLACE statement, false when INSERT statement More... | |
Protected Attributes inherited from Sql_cmd_dml | |
LEX * | lex |
Pointer to LEX for this statement. More... | |
Query_result * | result |
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... | |
Private Member Functions | |
bool | resolve_update_expressions (THD *thd) |
Resolve ON DUPLICATE KEY UPDATE expressions. More... | |
bool | prepare_values_table (THD *thd) |
Prepare the derived table created as a VALUES alias. More... | |
bool | resolve_values_table_columns (THD *thd) |
Resolve the columns of the optional VALUES table to the insert_values of the table inserted into. More... | |
bool | get_default_columns (THD *thd, TABLE *table, MY_BITMAP **m_function_default_columns) |
Base class for all INSERT and REPLACE statements.
Abstract class that is inherited by Sql_cmd_insert_values and Sql_cmd_insert_select.
|
inlineexplicit |
|
overridevirtual |
Reimplemented from Sql_cmd.
|
overrideprotectedvirtual |
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.
thd | thread handler |
Implements Sql_cmd_dml.
|
private |
|
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_ref::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_*).
thd | thread handler |
Implements Sql_cmd_dml.
|
overrideprotectedvirtual |
Prepare items in INSERT statement.
thd | Thread handler |
WARNING You MUST set table->insert_values to 0 after calling this function before releasing the table object.
Implements Sql_cmd_dml.
|
private |
Prepare the derived table created as a VALUES alias.
When an optional table alias is specified for the VALUES of an INSERT statement, we create a derived table to contain its values. The field translation of this derived table is pointed to the insert buffer of the table we are inserting into, by means of the Item_insert_value objects we create here. An Item_insert_value object will originally contain the corresponding Item_field of the insert table, which is then cloned during its fix_field implementation to move the underlying Field to insert_values instead.
The derived table is initialized in Sql_cmd_insert_base::make_cmd, but we have to wait until after the insert table is resolved to create our field translation indirection. If the table alias is not given explicit column names in the query, it must take the column names of the insert table; this information is not available to us until the insert table is resolved.
thd | Thread context. |
|
private |
Resolve ON DUPLICATE KEY UPDATE expressions.
Caller is responsible for setting up the columns to be updated before calling this function.
thd | Thread handler |
|
private |
Resolve the columns of the optional VALUES table to the insert_values of the table inserted into.
Field_translation of this table contains Item_insert_value objects pointing to the Item_field objects of the insert table. Caller is responsible for fixing these fields before calling this function.
thd | Thread context. |
|
overrideprotectedvirtual |
Restore command properties before execution.
Reimplemented from Sql_cmd_dml.
uint Sql_cmd_insert_base::column_count |
Number of columns in original insert column list.
const enum_duplicates Sql_cmd_insert_base::duplicates |
mem_root_deque<Item *> Sql_cmd_insert_base::insert_field_list |
Field list to insert/replace.
One of two things:
mem_root_deque<List_item *> Sql_cmd_insert_base::insert_many_values |
Row data to insert/replace.
One of two things:
|
protected |
true when REPLACE statement, false when INSERT statement
mem_root_deque<Item *> Sql_cmd_insert_base::update_field_list |
ON DUPLICATE KEY UPDATE field list.
mem_root_deque<Item *> Sql_cmd_insert_base::update_value_list |
ON DUPLICATE KEY UPDATE data value list.
uint Sql_cmd_insert_base::value_count |
Number of values per row in insert_many_values, available after resolving.
Create_col_name_list* Sql_cmd_insert_base::values_column_list {nullptr} |
mem_root_deque<Item *> Sql_cmd_insert_base::values_field_list |
Field list for VALUES derived table.
If no insert_field exists (e.g. INSERT INTO t0 ..), we have to create one to create Item_insert_values for ODKU statements.
bool Sql_cmd_insert_base::values_need_privilege_check {false} |
True if VALUES clause contain column references that need privilege check.
ON DUPLICATE KEY UPDATE reference to VALUES.
. as a derived table.