MySQL 8.4.2
Source Code Documentation
|
Implementation of name resolution stage. More...
#include "sql/sql_resolver.h"
#include <sys/types.h>
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdio>
#include <cstring>
#include <deque>
#include <functional>
#include <initializer_list>
#include <utility>
#include <vector>
#include "field_types.h"
#include "lex_string.h"
#include "map_helpers.h"
#include "mem_root_deque.h"
#include "my_alloc.h"
#include "my_bitmap.h"
#include "my_compiler.h"
#include "my_dbug.h"
#include "my_inttypes.h"
#include "my_sqlcommand.h"
#include "my_sys.h"
#include "my_table_map.h"
#include "mysql/components/services/bits/psi_bits.h"
#include "mysql_com.h"
#include "mysqld_error.h"
#include "prealloced_array.h"
#include "sql/aggregate_check.h"
#include "sql/auth/auth_acls.h"
#include "sql/auth/auth_common.h"
#include "sql/check_stack.h"
#include "sql/current_thd.h"
#include "sql/derror.h"
#include "sql/enum_query_type.h"
#include "sql/error_handler.h"
#include "sql/field.h"
#include "sql/item.h"
#include "sql/item_cmpfunc.h"
#include "sql/item_func.h"
#include "sql/item_row.h"
#include "sql/item_subselect.h"
#include "sql/item_sum.h"
#include "sql/join_optimizer/bit_utils.h"
#include "sql/join_optimizer/join_optimizer.h"
#include "sql/mdl.h"
#include "sql/mem_root_array.h"
#include "sql/nested_join.h"
#include "sql/opt_hints.h"
#include "sql/opt_trace.h"
#include "sql/opt_trace_context.h"
#include "sql/parse_tree_nodes.h"
#include "sql/parser_yystype.h"
#include "sql/query_options.h"
#include "sql/query_result.h"
#include "sql/range_optimizer/partition_pruning.h"
#include "sql/range_optimizer/range_optimizer.h"
#include "sql/sql_base.h"
#include "sql/sql_class.h"
#include "sql/sql_cmd.h"
#include "sql/sql_const.h"
#include "sql/sql_derived.h"
#include "sql/sql_error.h"
#include "sql/sql_executor.h"
#include "sql/sql_lex.h"
#include "sql/sql_list.h"
#include "sql/sql_optimizer.h"
#include "sql/sql_select.h"
#include "sql/sql_test.h"
#include "sql/sql_union.h"
#include "sql/system_variables.h"
#include "sql/table.h"
#include "sql/thd_raii.h"
#include "sql/thr_malloc.h"
#include "sql/visible_fields.h"
#include "sql/window.h"
#include "template_utils.h"
#include "thr_lock.h"
Classes | |
class | Semijoin_decorrelation |
Context object used by semijoin equality decorrelation code. More... | |
struct | Lifted_expressions_map |
Helper singleton class used to track information needed to perform the transform of a correlated scalar subquery in a derived table, as performed by decorrelate_derived_scalar_subquery_pre and decorrelate_derived_scalar_subquery_pre . More... | |
Functions | |
static bool | simplify_const_condition (THD *thd, Item **cond, bool remove_cond, bool *ret_cond_value) |
Try to replace a const condition with a simple constant. More... | |
static Item * | create_rollup_switcher (THD *thd, Query_block *query_block, Item_sum *item, int send_group_parts) |
static bool | fulltext_uses_rollup_column (const Query_block *query_block) |
Checks if there are any calls to the MATCH function that take a ROLLUP column as argument in the SELECT list, GROUP BY clause, HAVING clause or ORDER BY clause. More... | |
static void | update_used_tables_for_join (mem_root_deque< Table_ref * > *tables) |
Update used tables information for a JOIN expression. More... | |
static Table_ref ** | make_leaf_tables (Table_ref **list, Table_ref *tables) |
Make list of leaf tables of join table tree. More... | |
static void | fix_tables_after_pullout (Query_block *parent_query_block, Query_block *removed_query_block, Table_ref *tr, uint table_adjust, table_map lateral_deps) |
Update table reference information for conditions and expressions due to query blocks having been merged in from derived tables/views and due to semi-join transformation. More... | |
static bool | decorrelate_equality (Semijoin_decorrelation &sj_decor, Item_func *func, bool *was_correlated) |
Try to decorrelate an (in)equality node. More... | |
static bool | can_decorrelate_operator (Item_func *func, bool only_eq) |
bool | walk_join_list (mem_root_deque< Table_ref * > &list, std::function< bool(Table_ref *)> action) |
static bool | build_sj_exprs (THD *thd, mem_root_deque< Item * > *sj_outer_exprs, mem_root_deque< Item * > *sj_inner_exprs, Item_exists_subselect *subq_pred, Query_block *subq_query_block) |
Builds the list of SJ outer/inner expressions. More... | |
static bool | replace_subcondition (THD *thd, Item **tree, Item *old_cond, Item *new_cond, bool do_fix_fields, bool *found_ptr=nullptr) |
Destructively replaces a sub-condition inside a condition tree. More... | |
void | propagate_nullability (mem_root_deque< Table_ref * > *tables, bool nullable) |
Propagate nullability into inner tables of outer join operation. More... | |
bool | find_order_in_list (THD *thd, Ref_item_array ref_item_array, Table_ref *tables, ORDER *order, mem_root_deque< Item * > *fields, bool is_group_field, bool is_window_order) |
Resolve an ORDER BY or GROUP BY column reference. More... | |
bool | setup_order (THD *thd, Ref_item_array ref_item_array, Table_ref *tables, mem_root_deque< Item * > *fields, ORDER *order) |
Resolve and setup list of expressions in ORDER BY clause. More... | |
static ReplaceResult | wrap_grouped_expressions_for_rollup (Query_block *select, Item *item, Item *parent, unsigned argument_idx) |
Checks whether an item matches a grouped expression, creates an Item_rollup_group_item around it and replaces the reference to it with that item. More... | |
static bool | WalkAndReplaceInner (THD *thd, Item *parent, unsigned argument_idx, const function< ReplaceResult(Item *item, Item *parent, unsigned argument_idx)> &get_new_item, Item **child_ref) |
Helper function for WalkAndReplace() which replaces the Item referenced by "child_ref" if "get_new_item" returns a replacement, or visits the children of "child_ref" otherwise. More... | |
bool | WalkAndReplace (THD *thd, Item *item, const function< ReplaceResult(Item *item, Item *parent, unsigned argument_idx)> &get_new_item) |
static bool | refresh_comparators_after_rollup (Item *item) |
Refreshes the comparators after ROLLUP resolving. More... | |
bool | validate_gc_assignment (const mem_root_deque< Item * > &fields, const mem_root_deque< Item * > &values, TABLE *table) |
validate_gc_assignment Check whether the other values except DEFAULT are assigned for generated columns. More... | |
static bool | baptize_item (THD *thd, Item *item, int *field_no) |
Helper function to make names for columns of a derived table replacing a scalar or table subquery. More... | |
static bool | update_context_to_derived (Item *expr, Query_block *new_derived) |
A minion of transform_grouped_to_derived. More... | |
static bool | replace_aggregate_in_list (Item::Aggregate_replacement &info, bool was_hidden, mem_root_deque< Item * > *list, Ref_item_array *ref_item_array) |
A minion of transform_grouped_to_derived. More... | |
static bool | collect_aggregates (Query_block *select, Item_sum::Collect_grouped_aggregate_info *aggregates) |
A minion of transform_grouped_to_derived. More... | |
static bool | query_block_contains_subquery (Query_block *select, Query_expression *slu) |
A minion of transform_scalar_subqueries_to_join_with_derived. More... | |
static bool | walk_join_conditions (mem_root_deque< Table_ref * > &list, std::function< bool(Item **expr_p)> action, Item::Collect_scalar_subquery_info *info) |
static void | remember_transform (THD *thd, Query_block *select) |
Remember if this transform was performed. More... | |
static bool | add_partition_by_expr (THD *thd, PT_order_list *partition, Query_block *qb, Item *expr) |
Given an expression, create an ORDER expression for that expression and add it to a window's ORDER BY list in preparation for synthesizing a window function, cf. More... | |
static bool | replace_inner_function_calls_in_lifted_predicate (THD *thd, Table_ref *derived, Lifted_expressions_map *lifted_exprs, Query_block *qb) |
Function calls in lifted join condition. More... | |
static bool | replace_inner_fields_in_lifted_predicate (THD *thd, Table_ref *derived, Lifted_expressions_map *lifted_exprs, Query_block *qb, uint *field_pos_idx) |
Fields in lifted join condition. More... | |
static bool | build_reject_if (THD *thd, Table_ref *derived, Lifted_expressions_map *lifted_exprs, uint field_pos_idx) |
static std::pair< bool, bool > | item_containing_non_correlated_field (Item *item) |
WL#15540 check that predicate operand item conforms to our requirements. More... | |
bool | is_correlated_predicate_eligible (Item *cor_pred) |
Called to check if the provided correlated predicate is eligible for transformation. More... | |
static bool | extract_correlated_condition (THD *thd, Item **cond, Item **correlated_cond) |
Extracts the top level correlated condition in an OR condition. More... | |
Variables | |
static const enum_walk | walk_options |
Implementation of name resolution stage.