![]() |
MySQL 8.0.43
Source Code Documentation
|
Classes for query execution. More...
#include <sys/types.h>#include <cstring>#include <memory>#include <string>#include <vector>#include "my_alloc.h"#include "my_inttypes.h"#include "my_table_map.h"#include "sql/iterators/row_iterator.h"#include "sql/sql_lex.h"#include "sql/sql_opt_exec_shared.h"#include "sql/table.h"#include "sql/temp_table_param.h"Go to the source code of this file.
Classes | |
| struct | SJ_TMP_TABLE_TAB |
| class | SJ_TMP_TABLE |
| class | Semijoin_mat_exec |
| Executor structure for the materialized semi-join info, which contains. More... | |
| class | QEP_TAB |
| struct | PendingCondition |
| struct | PendingInvalidator |
| Cache invalidator iterators we need to apply, but cannot yet due to outer joins. More... | |
Enumerations | |
| enum | Copy_func_type : int { CFT_ALL , CFT_WF_FRAMING , CFT_WF_NON_FRAMING , CFT_WF_NEEDS_PARTITION_CARDINALITY , CFT_WF_USES_ONLY_ONE_ROW , CFT_HAS_NO_WF , CFT_HAS_WF , CFT_WF , CFT_FIELDS } |
| enum | CallingContext { TOP_LEVEL , DIRECTLY_UNDER_SEMIJOIN , DIRECTLY_UNDER_OUTER_JOIN , DIRECTLY_UNDER_WEEDOUT } |
Functions | |
| void | setup_tmptable_write_func (QEP_TAB *tab, Opt_trace_object *trace) |
| Setup write_func of QEP_tmp_table object. More... | |
| bool | copy_fields (Temp_table_param *param, const THD *thd, bool reverse_copy=false) |
| Make a copy of all simple SELECT'ed fields. More... | |
| bool | copy_funcs (Temp_table_param *, const THD *thd, Copy_func_type type=CFT_ALL) |
| Copy result of functions to record in tmp_table. More... | |
| bool | construct_lookup (THD *thd, TABLE *table, Index_lookup *ref) |
| Copy the lookup key into the table ref's key buffer. More... | |
| int | report_handler_error (TABLE *table, int error) |
| Help function when we get some an error from the table handler. More... | |
| int | join_read_const_table (JOIN_TAB *tab, POSITION *pos) |
| Reads content of constant table. More... | |
| int | do_sj_dups_weedout (THD *thd, SJ_TMP_TABLE *sjtbl) |
| SemiJoinDuplicateElimination: Weed out duplicate row combinations. More... | |
| int | update_item_cache_if_changed (List< Cached_item > &list) |
| bool | change_to_use_tmp_fields (mem_root_deque< Item * > *fields, THD *thd, Ref_item_array ref_item_array, mem_root_deque< Item * > *res_fields, size_t added_non_hidden_fields) |
| Change all funcs and sum_funcs to fields in tmp table, and create new list of all items. More... | |
| bool | change_to_use_tmp_fields_except_sums (mem_root_deque< Item * > *fields, THD *thd, Query_block *select, Ref_item_array ref_item_array, mem_root_deque< Item * > *res_fields, size_t added_non_hidden_fields) |
| Change all sum_func refs to fields to point at fields in tmp table. More... | |
| bool | prepare_sum_aggregators (Item_sum **func_ptr, bool need_distinct) |
| bool | setup_sum_funcs (THD *thd, Item_sum **func_ptr) |
Call setup() for all sum functions. More... | |
| bool | make_group_fields (JOIN *main_join, JOIN *curr_join) |
| allocate group fields or take prepared (cached). More... | |
| bool | check_unique_constraint (TABLE *table) |
| Check unique_constraint. More... | |
| ulonglong | unique_hash (const Field *field, ulonglong *hash) |
| Generate hash for a field. More... | |
| int | read_const (TABLE *table, Index_lookup *ref) |
| bool | set_record_buffer (TABLE *table, double expected_rows_to_fetch) |
| Allocate a data buffer that the storage engine can use for fetching batches of records. More... | |
| void | init_tmptable_sum_functions (Item_sum **func_ptr) |
| void | update_tmptable_sum_func (Item_sum **func_ptr, TABLE *tmp_table) |
| Update record 0 in tmp_table from record 1. More... | |
| bool | has_rollup_result (Item *item) |
| Checks if an item has a ROLLUP NULL which needs to be written to temp table. More... | |
| bool | is_rollup_group_wrapper (const Item *item) |
| Item * | unwrap_rollup_group (Item *item) |
| Item * | CreateConjunction (List< Item > *items) |
| Create an AND conjunction of all given items. More... | |
| unique_ptr_destroy_only< RowIterator > | PossiblyAttachFilterIterator (unique_ptr_destroy_only< RowIterator > iterator, const std::vector< Item * > &conditions, THD *thd) |
| void | SplitConditions (Item *condition, QEP_TAB *current_table, std::vector< Item * > *predicates_below_join, std::vector< PendingCondition > *predicates_above_join, std::vector< PendingCondition > *join_conditions, plan_idx semi_join_table_idx, qep_tab_map left_tables) |
| AccessPath * | MoveCompositeIteratorsFromTablePath (AccessPath *path, const Query_block &query_block) |
| For a MATERIALIZE access path, move any non-basic iterators (e.g. More... | |
| AccessPath * | GetAccessPathForDerivedTable (THD *thd, QEP_TAB *qep_tab, AccessPath *table_path) |
| AccessPath * | GetAccessPathForDerivedTable (THD *thd, Table_ref *table_ref, TABLE *table, bool rematerialize, Mem_root_array< const AccessPath * > *invalidators, bool need_rowid, AccessPath *table_path) |
| void | ConvertItemsToCopy (const mem_root_deque< Item * > &items, Field **fields, Temp_table_param *param) |
| For historical reasons, derived table materialization and temporary table materialization didn't specify the fields to materialize in the same way. More... | |
| std::string | RefToString (const Index_lookup &ref, const KEY *key, bool include_nulls) |
| bool | MaterializeIsDoingDeduplication (TABLE *table) |
| (end of group Query_Executor) More... | |
| bool | ExtractConditions (Item *condition, Mem_root_array< Item * > *condition_parts) |
| Split AND conditions into their constituent parts, recursively. More... | |
| AccessPath * | create_table_access_path (THD *thd, TABLE *table, AccessPath *range_scan, Table_ref *table_ref, POSITION *position, bool count_examined_rows) |
| create_table_access_path is used to scan by using a number of different methods. More... | |
| unique_ptr_destroy_only< RowIterator > | init_table_iterator (THD *thd, TABLE *table, AccessPath *range_scan, Table_ref *table_ref, POSITION *position, bool ignore_not_found_rows, bool count_examined_rows) |
| Creates an iterator for the given table, then calls Init() on the resulting iterator. More... | |
| unique_ptr_destroy_only< RowIterator > | init_table_iterator (THD *thd, TABLE *table, bool ignore_not_found_rows, bool count_examined_rows) |
| A short form for when there's no range scan, recursive CTEs or cost information; just a unique_result or a simple table scan. More... | |
| AccessPath * | ConnectJoins (plan_idx upper_first_idx, plan_idx first_idx, plan_idx last_idx, QEP_TAB *qep_tabs, THD *thd, CallingContext calling_context, std::vector< PendingCondition > *pending_conditions, std::vector< PendingInvalidator > *pending_invalidators, std::vector< PendingCondition > *pending_join_conditions, qep_tab_map *unhandled_duplicates, table_map *conditions_depend_on_outer_tables) |
Classes for query execution.
| enum CallingContext |
| enum Copy_func_type : int |
| AccessPath * ConnectJoins | ( | plan_idx | upper_first_idx, |
| plan_idx | first_idx, | ||
| plan_idx | last_idx, | ||
| QEP_TAB * | qep_tabs, | ||
| THD * | thd, | ||
| CallingContext | calling_context, | ||
| std::vector< PendingCondition > * | pending_conditions, | ||
| std::vector< PendingInvalidator > * | pending_invalidators, | ||
| std::vector< PendingCondition > * | pending_join_conditions, | ||
| qep_tab_map * | unhandled_duplicates, | ||
| table_map * | conditions_depend_on_outer_tables | ||
| ) |
| AccessPath * create_table_access_path | ( | THD * | thd, |
| TABLE * | table, | ||
| AccessPath * | range_scan, | ||
| Table_ref * | table_ref, | ||
| POSITION * | position, | ||
| bool | count_examined_rows | ||
| ) |
create_table_access_path is used to scan by using a number of different methods.
Which method to use is set-up in this call so that you can create an iterator from the returned access path and fetch rows through said iterator afterwards.
| thd | Thread handle |
| table | Table the data [originally] comes from |
| range_scan | AccessPath to scan the table with, or nullptr |
| table_ref | Position for the table, must be non-nullptr for WITH RECURSIVE |
| position | Place to get cost information from, or nullptr |
| count_examined_rows | See AccessPath::count_examined_rows. |
| unique_ptr_destroy_only< RowIterator > init_table_iterator | ( | THD * | thd, |
| TABLE * | table, | ||
| AccessPath * | range_scan, | ||
| Table_ref * | table_ref, | ||
| POSITION * | position, | ||
| bool | ignore_not_found_rows, | ||
| bool | count_examined_rows | ||
| ) |
Creates an iterator for the given table, then calls Init() on the resulting iterator.
Unlike create_table_iterator(), this can create iterators for sort buffer results (which are set in the TABLE object during query execution). Returns nullptr on failure.
|
inline |
A short form for when there's no range scan, recursive CTEs or cost information; just a unique_result or a simple table scan.
Normally, you should prefer just instantiating an iterator yourself – this is for legacy use only.
| bool MaterializeIsDoingDeduplication | ( | TABLE * | table | ) |
(end of group Query_Executor)
| unique_ptr_destroy_only< RowIterator > PossiblyAttachFilterIterator | ( | unique_ptr_destroy_only< RowIterator > | iterator, |
| const std::vector< Item * > & | conditions, | ||
| THD * | thd | ||
| ) |
| void SplitConditions | ( | Item * | condition, |
| QEP_TAB * | current_table, | ||
| std::vector< Item * > * | predicates_below_join, | ||
| std::vector< PendingCondition > * | predicates_above_join, | ||
| std::vector< PendingCondition > * | join_conditions, | ||
| plan_idx | semi_join_table_idx, | ||
| qep_tab_map | left_tables | ||
| ) |