29#ifndef SQL_LEX_INCLUDED
30#define SQL_LEX_INCLUDED
62#include "mysqld_error.h"
258#define TYPE_ENUM_FUNCTION 1
259#define TYPE_ENUM_PROCEDURE 2
260#define TYPE_ENUM_TRIGGER 3
261#define TYPE_ENUM_PROXY 4
289#define TL_OPTION_UPDATING 0x01
290#define TL_OPTION_IGNORE_LEAVES 0x02
291#define TL_OPTION_ALIAS 0x04
481#define INDEX_HINT_MASK_JOIN (1)
482#define INDEX_HINT_MASK_GROUP (1 << 1)
483#define INDEX_HINT_MASK_ORDER (1 << 2)
485#define INDEX_HINT_MASK_ALL \
486 (INDEX_HINT_MASK_JOIN | INDEX_HINT_MASK_GROUP | INDEX_HINT_MASK_ORDER)
666 for (
auto qt : query_terms<>()) {
667 if (qt->query_block() == qb)
return qt;
707 auto const setop = down_cast<Query_term_set_op *>(
m_query_term);
708 if (setop->m_last_distinct > 0)
709 return setop->m_children[setop->m_last_distinct]->query_block();
716 return down_cast<Query_term_set_op *>(
m_query_term)->m_last_distinct > 0;
967 bool finalize_access_paths);
1373 ulong table_options,
1677 const char *prefix);
1764 void cleanup(
bool full)
override;
1792 assert(
join ==
nullptr);
1872 bool optimize(
THD *thd,
bool finalize_access_paths);
2258 bool top,
bool in_sj,
Item **new_conds,
2259 uint *changelog =
nullptr);
2265 Item **sj_cond,
bool *simple_const);
2271 Item *join_cond,
bool left_outer,
2272 bool use_inner_join);
2276 bool reject_multiple_rows,
2278 Item *lifted_where_cond);
2286 Item *selected_field_or_ref,
2287 const uint first_non_hidden);
2292 bool *selected_expr_added_to_group_by,
2297 bool *added_card_check,
size_t *added_window_card_checks);
2300 bool added_card_check,
size_t added_window_card_checks);
2352 Item **lifted_where);
2502 qt = down_cast<Query_term_unary *>(qt)->m_children[0];
2509 qt = down_cast<Query_term_unary *>(qt)->m_children[0];
2643 std::unique_ptr<malloc_unordered_map<std::string, Sroutine_hash_entry *>>
2696 *
this = std::move(*state);
2971 constexpr uint32_t shift =
2983 constexpr uint32_t shift =
3037 switch (accessed_table) {
3039 return "STMT_READS_TRANS_TABLE";
3042 return "STMT_READS_NON_TRANS_TABLE";
3045 return "STMT_READS_TEMP_TRANS_TABLE";
3048 return "STMT_READS_TEMP_NON_TRANS_TABLE";
3051 return "STMT_WRITES_TRANS_TABLE";
3054 return "STMT_WRITES_NON_TRANS_TABLE";
3057 return "STMT_WRITES_TEMP_TRANS_TABLE";
3060 return "STMT_WRITES_TEMP_NON_TRANS_TABLE";
3072#define BINLOG_DIRECT_ON \
3077#define BINLOG_DIRECT_OFF \
3082#define TRX_CACHE_EMPTY 0x33
3084#define TRX_CACHE_NOT_EMPTY 0xCC
3086#define IL_LT_REPEATABLE 0xAA
3088#define IL_GTE_REPEATABLE 0x55
3141 bool trx_cache_is_not_empty,
3142 uint tx_isolation) {
3143 bool unsafe =
false;
3145 if (in_multi_stmt_transaction_mode) {
3146 const uint condition =
3156 (
"RESULT %02X %02X %02X\n", condition,
3361 unsigned char yyGet() {
3363 const char c = *
m_ptr++;
3377 unsigned char yyPeek()
const {
3386 unsigned char yyPeekn(
int n)
const {
3530 const char *end_ptr);
3595 const char *alias)
const {
4010 const bool execute_only_in_secondary_engine_param,
4013 execute_only_in_secondary_engine_param;
4030 return "TABLESAMPLE";
4039 bool execute_in_hypergraph_optimizer_param,
4042 execute_in_hypergraph_optimizer_param;
4411 if (
unit ==
nullptr)
return;
4503 tr->restore_properties();
4544 bool copy_db_to(
char const **p_db,
size_t *p_db_length)
const;
4547 return copy_db_to(
const_cast<const char **
>(p_db), p_db_length);
4807 void reset(
const char *found_semicolon,
size_t length) {
4882 static void *
operator new(
size_t size)
noexcept {
4883 return (*THR_MALLOC)->Alloc(
size);
4886 const std::nothrow_t &arg
4887 [[maybe_unused]] = std::nothrow)
noexcept {
4890 static void operator delete(
void *ptr [[maybe_unused]],
4891 size_t size [[maybe_unused]]) {
4894 static void operator delete(
4895 void *,
MEM_ROOT *,
const std::nothrow_t &)
noexcept {
4936 &valid_len, &len_error)) {
4939 hexbuf, string_val.
str + valid_len,
4940 static_cast<uint
>(std::min<size_t>(string_val.
length - valid_len, 3)));
4961 std::string &invalid_sub_str) {
4966 &valid_len, &len_error)) {
4967 char printable_buff[32];
4969 printable_buff,
sizeof(printable_buff), string_val.
str + valid_len,
4970 static_cast<uint
>(std::min<size_t>(string_val.
length - valid_len, 3)),
4972 invalid_sub_str = printable_buff;
4985 Item *item [[maybe_unused]],
4986 bool hidden [[maybe_unused]]) {
4988 if (
std::find(fields.begin(), fields.end(), item) != fields.end()) {
4991 assert(item->hidden == hidden);
5003 const char *legend);
static mysql_service_status_t init()
Component initialization.
Definition: audit_api_message_emit.cc:571
uint32_t Access_bitmask
Definition: auth_acls.h:34
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
Data describing the table being created by CREATE TABLE or altered by ALTER TABLE.
Definition: sql_alter.h:205
Parser state for CTE subquery parser.
Definition: sql_lex.h:4859
Common_table_expr_parser_state()
Definition: sql_lex.cc:1214
PT_subquery * result
Definition: sql_lex.h:4863
Utility RAII class to save/modify/restore the condition_context information of a query block.
Definition: sql_lex.h:2516
enum_condition_context saved_value
Definition: sql_lex.h:2538
~Condition_context()
Definition: sql_lex.h:2532
Query_block * select
Definition: sql_lex.h:2537
Condition_context(Query_block *select_ptr, enum_condition_context new_type=enum_condition_context::NEITHER)
Definition: sql_lex.h:2518
Parser state for Derived table's condition parser.
Definition: sql_lex.h:4870
Item * result
Definition: sql_lex.h:4874
Derived_expr_parser_state()
Definition: sql_lex.cc:1217
Definition: event_parse_data.h:43
Parser state for single expression parser (.frm/DD stuff)
Definition: sql_lex.h:4849
Expression_parser_state()
Definition: sql_lex.cc:1211
Item * result
Definition: sql_lex.h:4853
Parser state for generated column expression parser (.frm/DD stuff)
Definition: sql_lex.h:4839
Value_generator * result
Definition: sql_lex.h:4843
Gcol_expr_parser_state()
Definition: sql_lex.cc:1208
Definition: sql_lex.h:489
LEX_CSTRING key_name
Definition: sql_lex.h:499
void print(const THD *thd, String *str)
Print an index hint.
Definition: sql_lex.cc:2758
index_clause_map clause
Definition: sql_lex.h:494
enum index_hint_type type
Definition: sql_lex.h:492
Index_hint(const char *str, uint length)
Definition: sql_lex.h:501
Definition: item_cmpfunc.h:2439
Definition: item_subselect.h:441
Definition: item_func.h:3475
Definition: item_func.h:3526
This class is used to implement operations like SET @variable or @variable:= expression.
Definition: item_func.h:3285
A wrapper Item that normally returns its parameter, but becomes NULL when processing rows for rollup.
Definition: item_func.h:1717
A wrapper Item that contains a number of aggregate items, one for each level of rollup (see Item_roll...
Definition: item_sum.h:2711
Base class that is common to all subqueries and subquery predicates.
Definition: item_subselect.h:80
Class Item_sum is the base class used for special expressions that SQL calls 'set functions'.
Definition: item_sum.h:399
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:930
cond_result
Definition: item.h:993
@ COND_UNDEF
Definition: item.h:993
Definition: sql_optimizer.h:133
Definition: key_spec.h:67
Definition: sql_lex.h:3743
LEX_COLUMN(const String &x, const Access_bitmask &y)
Definition: sql_lex.h:3747
String column
Definition: sql_lex.h:3745
Access_bitmask rights
Definition: sql_lex.h:3746
Definition: sql_lex.h:3755
List< LEX_USER > * role_list
Definition: sql_lex.h:3764
void cleanup()
Definition: sql_lex.cc:5250
bool grant_as_used
Definition: sql_lex.h:3761
role_enum role_type
Definition: sql_lex.h:3762
LEX_USER * user
Definition: sql_lex.h:3763
LEX_GRANT_AS()
Definition: sql_lex.cc:5257
Definition: sql_list.h:606
Definition: sql_list.h:467
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:426
Storage for name strings.
Definition: item.h:298
Global level hints.
Definition: opt_hints.h:351
Query block level hints.
Definition: opt_hints.h:373
Definition: parse_tree_nodes.h:1773
Represents the WITH clause: WITH [...], [...] SELECT ..., ^^^^^^^^^^^^^^^^^.
Definition: parse_tree_nodes.h:365
Base class for all top-level nodes of SQL statements.
Definition: parse_tree_nodes.h:161
Internal state of the parser.
Definition: sql_lexer_parser_state.h:44
Lex_input_stream m_lip
Definition: sql_lexer_parser_state.h:79
void add_comment()
Signal that the current query has a comment.
Definition: sql_lexer_parser_state.h:73
void reset(const char *found_semicolon, size_t length)
Definition: sql_lexer_parser_state.h:67
Yacc_state m_yacc
Definition: sql_lexer_parser_state.h:80
Parser_state()
Definition: sql_lex.h:4791
Parser_input m_input
Definition: sql_lexer_parser_state.h:78
bool has_comment() const
Check whether the current query has a comment.
Definition: sql_lexer_parser_state.h:75
bool m_comment
True if current query contains comments.
Definition: sql_lexer_parser_state.h:88
bool init(THD *thd, const char *buff, size_t length)
Object initializer.
Definition: sql_lexer_parser_state.h:63
PSI_digest_locker * m_digest_psi
Current performance digest instrumentation.
Definition: sql_lex.h:4820
Parser state for partition expression parser (.frm/DD stuff)
Definition: sql_lex.h:4829
Partition_expr_parser_state()
Definition: sql_lex.cc:1205
partition_info * result
Definition: sql_lex.h:4833
A typesafe replacement for DYNAMIC_ARRAY.
Definition: prealloced_array.h:71
RAII class to ease the call of LEX::mark_broken() if error.
Definition: sql_lex.h:4653
~Prepare_error_tracker()
Definition: sql_lex.cc:139
THD *const thd
Definition: sql_lex.h:4659
Prepare_error_tracker(THD *thd_arg)
Definition: sql_lex.h:4655
Definition: protocol.h:33
This class represents a query block, aka a query specification, which is a query consisting of a SELE...
Definition: sql_lex.h:1175
void print_update_list(const THD *thd, String *str, enum_query_type query_type, const mem_root_deque< Item * > &fields, const mem_root_deque< Item * > &values)
Print assignments list.
Definition: sql_lex.cc:3340
void print_delete(const THD *thd, String *str, enum_query_type query_type)
Print detail of the DELETE statement.
Definition: sql_lex.cc:3120
void add_base_options(ulonglong options)
Add base options to a query block, also update active options.
Definition: sql_lex.h:1226
uint n_scalar_subqueries
Keep track for allocation of base_ref_items: scalar subqueries may be replaced by a field during scal...
Definition: sql_lex.h:2130
void label_children() override
Set the correct value of Query_term::m_sibling_idx recursively for set operations.
Definition: sql_lex.h:1194
void qbPrint(int level, std::ostringstream &buf) const
Minion of debugPrint.
Definition: query_term.cc:389
Query_block * next
Intrusive linked list of all query blocks within the same query expression.
Definition: sql_lex.h:2399
void cleanup_all_joins()
Definition: sql_union.cc:2101
uint select_number
Query block number (used for EXPLAIN)
Definition: sql_lex.h:2063
bool subquery_in_having
HAVING clause contains subquery => we can't close tables before query processing end even if we use t...
Definition: sql_lex.h:2225
Query_term_type term_type() const override
Get the node tree type.
Definition: sql_lex.h:1189
void print_where_cond(const THD *thd, String *str, enum_query_type query_type)
Print list of conditions in WHERE clause.
Definition: sql_lex.cc:3427
Item * where_cond() const
Definition: sql_lex.h:1201
bool is_grouped() const
Definition: sql_lex.h:1308
void print_insert_options(String *str)
Print INSERT options.
Definition: sql_lex.cc:3268
bool m_json_agg_func_used
Definition: sql_lex.h:2487
mem_root_deque< mem_root_deque< Item * > * > * row_value_list
The VALUES items of a table value constructor.
Definition: sql_lex.h:1935
bool is_dependent() const
Definition: sql_lex.h:1819
void print_qualify(const THD *thd, String *str, enum_query_type query_type) const
Print list of items in QUALIFY clause.
Definition: sql_lex.cc:3479
mem_root_deque< Item * > * get_fields_list()
Definition: sql_lex.h:1398
MaterializePathParameters::Operand setup_materialize_query_block(AccessPath *child_path, TABLE *dst_table) const
Make materialization parameters for a query block given its input path and destination table,...
Definition: sql_union.cc:1347
bool with_sum_func
True if contains or aggregates set functions.
Definition: sql_lex.h:2219
Ref_item_array m_saved_base_items
A backup of the items in base_ref_items at the end of preparation, so that base_ref_items can be rest...
Definition: sql_lex.h:2472
bool is_explicitly_grouped() const
Definition: sql_lex.h:1284
Item * m_where_cond
Condition to be evaluated after all tables in a query block are joined.
Definition: sql_lex.h:2458
olap_type olap
Indicates whether this query block contains non-primitive grouping (such as ROLLUP).
Definition: sql_lex.h:2161
Item::cond_result having_value
Definition: sql_lex.h:2074
Item::cond_result cond_value
Saved values of the WHERE and HAVING clauses.
Definition: sql_lex.h:2073
bool setup_base_ref_items(THD *thd)
Setup the array containing references to base items.
Definition: sql_lex.cc:2582
uint get_in_sum_expr() const
Definition: sql_lex.h:1368
void print_values(const THD *thd, String *str, enum_query_type query_type, const mem_root_deque< mem_root_deque< Item * > * > &values, const char *prefix)
Print list of values, used in INSERT and for general VALUES clause.
Definition: sql_lex.cc:3381
bool group_fix_field
true when GROUP BY fix field called in processing of this query block
Definition: sql_lex.h:2212
void print_item_list(const THD *thd, String *str, enum_query_type query_type)
Print list of items in Query_block object.
Definition: sql_lex.cc:3316
Resolve_place resolve_place
Indicates part of query being resolved.
Definition: sql_lex.h:2095
bool m_right_joins
True if query block has right joins.
Definition: sql_lex.h:2481
Query_block(MEM_ROOT *mem_root, Item *where, Item *having)
Construct and initialize Query_block object.
Definition: sql_lex.cc:2255
bool is_implicitly_grouped() const
Definition: sql_lex.h:1291
void add_subquery_transform_candidate(Item_exists_subselect *predicate)
Definition: sql_lex.h:1476
Item * m_having_cond
Condition to be evaluated on grouped rows after grouping.
Definition: sql_lex.h:2461
uint cond_count
Number of predicates after preparation.
Definition: sql_lex.h:2113
Query_result * m_query_result
Result of this query block.
Definition: sql_lex.h:2411
void cleanup(bool full) override
Cleanup this subtree (this Query_block and all nested Query_blockes and Query_expressions).
Definition: sql_union.cc:2072
bool absorb_limit_of(Query_block *block)
end of overridden methods from Query_term
Definition: query_term.cc:461
Table_ref * end_lateral_table
Last table for LATERAL join, used by table functions.
Definition: sql_lex.h:2039
void print_hints(const THD *thd, String *str, enum_query_type query_type)
Print detail of Hints.
Definition: sql_lex.cc:3200
bool accept(Select_lex_visitor *visitor)
Accept function for SELECT and DELETE.
Definition: sql_lex.cc:3568
uint max_equal_elems
Maximal number of elements in multiple equalities.
Definition: sql_lex.h:2117
uint table_func_count
Number of table functions in this query block.
Definition: sql_lex.h:2149
Item ** qualify_cond_ref()
Definition: sql_lex.h:1208
Mem_root_array< Item_exists_subselect * > * sj_candidates
Pointer to collection of subqueries candidate for semi/antijoin conversion.
Definition: sql_lex.h:2390
bool having_fix_field
true when having fix field called in processing of this query block
Definition: sql_lex.h:2210
bool has_aj_nests
Definition: sql_lex.h:2480
uint hidden_items_from_optimization
Hidden items added during optimization.
Definition: sql_lex.h:2244
Query_block * link_next
Intrusive double-linked global list of query blocks.
Definition: sql_lex.h:2407
void invalidate()
Invalidate by nulling out pointers to other Query_expressions and Query_blockes.
Definition: sql_lex.cc:2574
Opt_hints_qb * opt_hints_qb
Query-block-level hints, for this query block.
Definition: sql_lex.h:1986
Query_block * query_block() const override
The query_block which holds the ORDER BY and LIMIT information for this set operation.
Definition: sql_lex.h:1191
Query_block ** link_prev
Definition: sql_lex.h:2408
uint with_wild
Number of wildcards used in the SELECT list.
Definition: sql_lex.h:2142
Name_resolution_context context
Context for name resolution for all column references except columns from joined tables.
Definition: sql_lex.h:2011
Item ** where_cond_ref()
Definition: sql_lex.h:1202
void make_active_options(ulonglong added_options, ulonglong removed_options)
Make active options from base options, supplied options and environment:
Definition: sql_lex.cc:2437
void set_empty_query()
Set query block as returning no data.
Definition: sql_lex.h:1791
Query_expression * slave
The first query expression contained within this query block.
Definition: sql_lex.h:2404
bool is_item_list_lookup
Definition: sql_lex.h:2207
void mark_as_dependent(Query_block *last, bool aggregate)
Mark all query blocks from this to 'last' as dependent.
Definition: sql_lex.cc:2473
Table_ref * leaf_tables
Points to first leaf table of query block.
Definition: sql_lex.h:2037
bool save_order_properties(THD *thd, SQL_I_List< ORDER > *list, Group_list_ptrs **list_ptrs)
Helper for save_properties()
Definition: sql_lex.cc:4365
Item_sum * inner_sum_func_list
Circular linked list of aggregate functions in nested query blocks.
Definition: sql_lex.h:2054
Item ** having_cond_ref()
Definition: sql_lex.h:1205
bool first_execution
This variable is required to ensure proper work of subqueries and stored procedures.
Definition: sql_lex.h:2196
Item * having_cond() const
Definition: sql_lex.h:1204
void print_delete_options(String *str)
Print DELETE options.
Definition: sql_lex.cc:3260
bool add_ftfunc_to_list(Item_func_match *func)
Definition: sql_lex.cc:2566
void print_having(const THD *thd, String *str, enum_query_type query_type)
Print list of items in HAVING clause.
Definition: sql_lex.cc:3463
bool walk(Item_processor processor, enum_walk walk, uchar *arg)
Definition: sql_lex.cc:4813
bool m_agg_func_used
Definition: sql_lex.h:2486
Query_expression * first_inner_query_expression() const
Definition: sql_lex.h:1270
uint materialized_derived_table_count
Number of materialized derived tables and views in this query block.
Definition: sql_lex.h:2133
List< Item_func_match > * ftfunc_list
A pointer to ftfunc_list_alloc, list of full text search functions.
Definition: sql_lex.h:1931
uint in_sum_expr
Parse context: is inside a set function if this is positive.
Definition: sql_lex.h:2079
enum_condition_context condition_context
Definition: sql_lex.h:2164
void set_right_joins()
Definition: sql_lex.h:1808
auto visible_fields()
Wrappers over fields / get_fields_list() that hide items where item->hidden, meant for range-based fo...
Definition: sql_lex.h:1402
uint n_sum_items
Number of Item_sum-derived objects in this SELECT.
Definition: sql_lex.h:2124
bool m_limit_1
Whether we have LIMIT 1 and no OFFSET.
Definition: sql_lex.h:2046
Query_block * outer_query_block() const
Definition: sql_lex.h:1271
void renumber(LEX *lex)
Renumber query blocks of contained query expressions.
Definition: sql_lex.cc:4539
mem_root_deque< Table_ref * > * m_current_table_nest
Pointer to the set of table references in the currently active join.
Definition: sql_lex.h:2028
List< Window > m_windows
All windows defined on the select, both named and inlined.
Definition: sql_lex.h:1926
Table_ref * find_table_by_name(const Table_ident *ident)
Finds a (possibly unresolved) table reference in the from clause by name.
Definition: sql_lex.cc:4884
uint leaf_table_count
Number of leaf tables in this query block.
Definition: sql_lex.h:2145
void set_having_cond(Item *cond)
Definition: sql_lex.h:1206
bool m_use_select_limit
If true, use select_limit to limit number of rows selected.
Definition: sql_lex.h:2232
bool has_limit() const
Definition: sql_lex.h:1342
void set_qualify_cond(Item *cond)
Definition: sql_lex.h:1209
bool validate_outermost_option(LEX *lex, const char *wrong_option) const
Check if an option that can be used only for an outer-most query block is applicable to this query bl...
Definition: sql_lex.cc:4718
void destroy()
Destroy contained objects, in particular temporary tables which may have their own mem_roots.
Definition: sql_union.cc:2112
uint derived_table_count
Number of derived tables and views in this query block.
Definition: sql_lex.h:2147
bool is_ordered() const
Definition: sql_lex.h:1319
void destroy_tree() override
Destroy the query term tree structure.
Definition: sql_lex.h:1195
uint partitioned_table_count
Number of partitioned tables.
Definition: sql_lex.h:2135
Prealloced_array< Item_rollup_group_item *, 4 > rollup_group_items
Definition: sql_lex.h:1980
void print_insert_fields(const THD *thd, String *str, enum_query_type query_type)
Print column list to be inserted into.
Definition: sql_lex.cc:3361
bool json_agg_func_used() const
Definition: sql_lex.h:1801
bool get_optimizable_conditions(THD *thd, Item **new_where, Item **new_having)
Returns disposable copies of WHERE/HAVING/ON conditions.
Definition: sql_lex.cc:4616
uint between_count
Number of between predicates in where/having/on.
Definition: sql_lex.h:2115
Query_result * query_result() const
Definition: sql_lex.h:1211
void include_in_global(Query_block **plink)
Include query block into global list.
Definition: sql_lex.cc:4555
bool agg_func_used() const
Definition: sql_lex.h:1800
Resolve_place
Three fields used by semi-join transformations to know when semi-join is possible,...
Definition: sql_lex.h:2087
@ RESOLVE_HAVING
Definition: sql_lex.h:2091
@ RESOLVE_NONE
Definition: sql_lex.h:2088
@ RESOLVE_SELECT_LIST
Definition: sql_lex.h:2093
@ RESOLVE_QUALIFY
Definition: sql_lex.h:2092
@ RESOLVE_JOIN_NEST
Definition: sql_lex.h:2089
@ RESOLVE_CONDITION
Definition: sql_lex.h:2090
void include_chain_in_global(Query_block **start)
Include chain of query blocks into global list.
Definition: sql_lex.cc:4566
SQL_I_List< ORDER > order_list
ORDER BY clause.
Definition: sql_lex.h:1950
char * db
Definition: sql_lex.h:1988
List< Item_func_match > ftfunc_list_alloc
Definition: sql_lex.h:1932
static const char * get_type_str(enum_explain_type type)
Definition: sql_lex.h:1815
void remove_base_options(ulonglong options)
Remove base options from a query block.
Definition: sql_lex.h:1237
enum_explain_type type() const
Lookup for Query_block type.
Definition: sql_lex.cc:4436
Item * offset_limit
LIMIT ... OFFSET clause, NULL if no offset is given.
Definition: sql_lex.h:2044
void set_sj_candidates(Mem_root_array< Item_exists_subselect * > *sj_cand)
Definition: sql_lex.h:1473
void print_order_by(const THD *thd, String *str, enum_query_type query_type) const
Print list of items in ORDER BY clause.
Definition: sql_lex.cc:3509
static const char * type_str[static_cast< int >(enum_explain_type::EXPLAIN_total)]
Definition: sql_lex.h:2496
Query_expression * master
The query expression containing this query block.
Definition: sql_lex.h:2402
bool has_subquery_transforms() const
Definition: sql_lex.h:1483
Ref_item_array base_ref_items
Array of pointers to "base" items; one each for every selected expression and referenced item in the ...
Definition: sql_lex.h:2061
int hidden_order_field_count
How many expressions are part of the order by but not select list.
Definition: sql_lex.h:2393
enum_parsing_context parsing_place
Parse context: indicates where the current expression is being parsed.
Definition: sql_lex.h:2077
void init_order()
Definition: sql_lex.h:1492
uint8 uncacheable
result of this query can't be cached, bit field, can be : UNCACHEABLE_DEPENDENT UNCACHEABLE_RAND UNCA...
Definition: sql_lex.h:2178
ulonglong m_base_options
Options assigned from parsing and throughout resolving, should not be modified after resolving is don...
Definition: sql_lex.h:2417
bool source_table_is_one_row() const
Definition: sql_lex.h:1823
uint in_window_expr
Parse context: is inside a window function if this is positive.
Definition: sql_lex.h:2081
void include_down(LEX *lex, Query_expression *outer)
Include query block inside a query expression.
Definition: sql_lex.cc:4490
void include_standalone(Query_expression *sel)
Include query block inside a query expression, but do not link.
Definition: sql_lex.cc:4527
Group_list_ptrs * group_list_ptrs
Definition: sql_lex.h:1963
uint saved_cond_count
Number of arguments of and/or/xor in where/having/on.
Definition: sql_lex.h:2111
Subquery_strategy subquery_strategy(const THD *thd) const
Returns which subquery execution strategies can be used for this query block.
Definition: sql_lex.cc:4639
Query_block * next_query_block() const
Definition: sql_lex.h:1272
Name_resolution_context * first_context
Pointer to first object in list of Name res context objects that have this query block as the base qu...
Definition: sql_lex.h:2018
void include_neighbour(LEX *lex, Query_block *before)
Include a query block next to another query block.
Definition: sql_lex.cc:4508
bool is_table_value_constructor
If set, the query block is of the form VALUES row_list.
Definition: sql_lex.h:2167
Item * get_derived_expr(uint expr_index)
Returns an expression from the select list of the query block using the field's index in a derived ta...
Definition: sql_derived.cc:1301
bool semijoin_enabled(const THD *thd) const
Returns whether semi-join is enabled for this query block.
Definition: sql_lex.cc:4665
Query_expression * master_query_expression() const
Definition: sql_lex.h:1269
void update_semijoin_strategies(THD *thd)
Update available semijoin strategies for semijoin nests.
Definition: sql_lex.cc:4670
uint select_n_having_items
Number of items in the select list, HAVING clause, QUALIFY clause and ORDER BY clause.
Definition: sql_lex.h:2109
Table_ref * get_table_list() const
Definition: sql_lex.h:1393
void print_update(const THD *thd, String *str, enum_query_type query_type)
Print detail of the UPDATE statement.
Definition: sql_lex.cc:3083
bool is_simple_query_block() const
Definition: sql_lex.h:1778
void print_table_references(const THD *thd, String *str, Table_ref *table_list, enum_query_type query_type)
Print list of tables.
Definition: sql_lex.cc:3282
bool has_tables() const
Definition: sql_lex.h:1281
void debugPrint(int level, std::ostringstream &buf) const override
Query_term methods overridden.
Definition: query_term.cc:439
bool m_internal_limit
If true, limit object is added internally.
Definition: sql_lex.h:2235
int hidden_group_field_count
Number of GROUP BY expressions added to all_fields.
Definition: sql_lex.h:2467
bool is_recursive() const
Definition: sql_lex.h:1348
int get_number_of_grouping_sets() const
Definition: sql_lex.h:2447
void print_windows(const THD *thd, String *str, enum_query_type query_type)
Print details of Windowing functions.
Definition: sql_lex.cc:3487
bool no_table_names_allowed
used for global order by
Definition: sql_lex.h:2240
bool validate_base_options(LEX *lex, ulonglong options) const
Validate base options for a query block.
Definition: sql_lex.cc:4755
void set_where_cond(Item *cond)
Definition: sql_lex.h:1203
Item * select_limit
LIMIT clause, NULL if no limit is given.
Definition: sql_lex.h:2042
ulonglong active_options() const
Definition: sql_lex.h:1250
bool save_properties(THD *thd)
Save properties of a prepared statement needed for repeated optimization.
Definition: sql_lex.cc:4388
Table_ref * embedding
table embedding the above list
Definition: sql_lex.h:2030
bool open_result_tables(THD *, int) override
Open tmp tables for the tree of set operation query results, by recursing.
Definition: query_term.cc:453
table_map select_list_tables
The set of those tables whose fields are referenced in the select list of this select level.
Definition: sql_lex.h:2004
bool m_was_implicitly_grouped
Used by nested scalar_to_derived transformations.
Definition: sql_lex.h:2202
bool has_sj_nests
True if query block has semi-join nests merged into it.
Definition: sql_lex.h:2479
Prealloced_array< Item_rollup_sum_switcher *, 4 > rollup_sums
Definition: sql_lex.h:1982
SQL_I_List< ORDER > group_list
GROUP BY clause.
Definition: sql_lex.h:1962
SQL_I_List< Table_ref > m_table_list
List of tables in FROM clause - use Table_ref::next_local to traverse.
Definition: sql_lex.h:1941
uint select_n_where_fields
Number of fields used in select list or where clause of current select and all inner subselects.
Definition: sql_lex.h:2102
bool skip_local_transforms
True: skip local transformations during prepare() call (used by INSERT)
Definition: sql_lex.h:2205
void print_limit(const THD *thd, String *str, enum_query_type query_type) const
Definition: sql_lex.cc:2727
const char * get_type_str()
Lookup for a type string.
Definition: sql_lex.h:1814
Table_ref * resolve_nest
Used when resolving outer join condition.
Definition: sql_lex.h:2433
bool is_empty_query() const
Definition: sql_lex.h:1787
void print_query_block(const THD *thd, String *str, enum_query_type query_type)
Print detail of the Query_block object.
Definition: sql_lex.cc:3059
mem_root_deque< Table_ref * > m_table_nest
Set of table references contained in outer-most join nest.
Definition: sql_lex.h:2026
bool set_context(Name_resolution_context *outer_context)
Assign a default name resolution object for this query block.
Definition: sql_lex.cc:2272
void set_json_agg_func_used(bool val)
Definition: sql_lex.h:1805
bool allow_merge_derived
Allow merge of immediate unnamed derived tables.
Definition: sql_lex.h:2484
bool add_tables(THD *thd, const Mem_root_array< Table_ident * > *tables, ulong table_options, thr_lock_type lock_type, enum_mdl_type mdl_type)
Add tables from an array to a list of used tables.
Definition: sql_lex.cc:2297
void print_select_options(String *str)
Print select options.
Definition: sql_lex.cc:3246
void set_query_result(Query_result *result)
Definition: sql_lex.h:1210
mem_root_deque< Table_ref * > sj_nests
List of semi-join nests generated for this query block.
Definition: sql_lex.h:1938
Table_ref * recursive_reference
If this query block is a recursive member of a recursive unit: the Table_ref, in this recursive membe...
Definition: sql_lex.h:1995
bool add_item_to_list(Item *item)
Definition: sql_lex.cc:2557
void print(const THD *thd, String *str, enum_query_type query_type)
Definition: sql_lex.cc:3020
bool is_non_primitive_grouped() const
Definition: sql_lex.h:1298
bool exclude_from_table_unique_test
exclude this query block from unique_table() check
Definition: sql_lex.h:2238
bool sj_pullout_done
True when semi-join pull-out processing is complete.
Definition: sql_lex.h:2199
int nest_level
Nesting level of query block, outer-most query block has level 0, its subqueries have level 1,...
Definition: sql_lex.h:2155
const char * operator_string() const override
Get the node type description.
Definition: sql_lex.h:1190
Group_list_ptrs * order_list_ptrs
Definition: sql_lex.h:1951
uint n_child_sum_items
Number of Item_sum-derived objects in children and descendant SELECTs.
Definition: sql_lex.h:2126
bool save_cmd_properties(THD *thd)
Save prepared statement properties for a query block and underlying query expressions.
Definition: sql_lex.cc:4905
void set_agg_func_used(bool val)
Definition: sql_lex.h:1803
bool print_error(const THD *thd, String *str)
Print error.
Definition: sql_lex.cc:3225
Item * qualify_cond() const
Definition: sql_lex.h:1207
bool is_cacheable() const
Definition: sql_lex.h:1820
ha_rows get_offset(const THD *thd) const
Get offset for LIMIT.
Definition: sql_lex.cc:2536
void add_active_options(ulonglong options)
Adjust the active option set.
Definition: sql_lex.h:1247
ha_rows get_limit(const THD *thd) const
Get limit.
Definition: sql_lex.cc:2543
Item * clone_expression(THD *thd, Item *item, Table_ref *derived_table)
Creates a clone for the given expression by re-parsing the expression.
Definition: sql_derived.cc:824
void set_base_options(ulonglong options_arg)
Set base options for a query block (and active options too)
Definition: sql_lex.h:1216
void print_update_options(String *str)
Print UPDATE options.
Definition: sql_lex.cc:3253
void print_insert(const THD *thd, String *str, enum_query_type query_type)
Print detail of the INSERT statement.
Definition: sql_lex.cc:3152
table_map all_tables_map() const
Definition: sql_lex.h:1265
bool right_joins() const
Definition: sql_lex.h:1807
JOIN * join
After optimization it is pointer to corresponding JOIN.
Definition: sql_lex.h:2024
ulonglong m_active_options
Active options.
Definition: sql_lex.h:2423
decltype(SQL_I_List< ORDER >::elements) m_no_of_added_exprs
For an explicitly grouped, correlated, scalar subquery which is transformed to join with derived tabl...
Definition: sql_lex.h:1976
void restore_cmd_properties()
Restore prepared statement properties for this query block and all underlying query expressions so th...
Definition: sql_lex.cc:4926
Item * m_qualify_cond
Condition to be evaluated after window functions.
Definition: sql_lex.h:2464
void cut_subtree()
Definition: sql_lex.h:1504
bool has_sj_candidates() const
Definition: sql_lex.h:1479
void print_from_clause(const THD *thd, String *str, enum_query_type query_type)
Print list of tables in FROM clause.
Definition: sql_lex.cc:3409
bool m_empty_query
True if query block does not generate any rows before aggregation, determined during preparation (not...
Definition: sql_lex.h:2493
table_map outer_join
Bitmap of all inner tables from outer joins.
Definition: sql_lex.h:2005
size_t m_added_non_hidden_fields
Definition: sql_lex.h:1899
int m_num_grouping_sets
If the query block includes non-primitive grouping, then these modifiers are represented as grouping ...
Definition: sql_lex.h:2430
Query_block * next_select_in_list() const
Definition: sql_lex.h:1276
void print_group_by(const THD *thd, String *str, enum_query_type query_type)
Print list of items in GROUP BY clause.
Definition: sql_lex.cc:3442
auto visible_fields() const
Definition: sql_lex.h:1403
bool can_skip_distinct() const
Based on the structure of the query at resolution time, it is possible to conclude that DISTINCT is u...
Definition: sql_lex.h:1336
bool is_distinct() const
Definition: sql_lex.h:1311
void set_tables_readonly()
Set associated tables as read_only, ie.
Definition: sql_lex.h:1258
mem_root_deque< Item * > fields
All expressions needed after join and filtering, ie., select list, group by list, having clause,...
Definition: sql_lex.h:1921
LEX * parent_lex
Reference to LEX that this query block belongs to.
Definition: sql_lex.h:1998
bool test_limit()
Definition: sql_lex.cc:2509
bool has_windows() const
Definition: sql_lex.h:1364
bool has_ft_funcs() const
Definition: sql_lex.h:1345
This class represents a query expression (one query block or several query blocks combined with UNION...
Definition: sql_lex.h:626
bool is_executed() const
Check state of execution of the contained query expression.
Definition: sql_lex.h:1054
bool merge_heuristic(const LEX *lex) const
True if heuristics suggest to merge this query expression.
Definition: sql_lex.cc:3950
bool optimize(THD *thd, TABLE *materialize_destination, bool finalize_access_paths)
If and only if materialize_destination is non-nullptr, it means that the caller intends to materializ...
Definition: sql_union.cc:996
Query_block * non_simple_result_query_block() const
Return the query block iff !is_simple() holds.
Definition: sql_lex.h:658
void reset_executed()
Reset this query expression for repeated evaluation within same execution.
Definition: sql_lex.h:1033
void change_to_access_path_without_in2exists(THD *thd)
Definition: sql_union.cc:1999
unique_ptr_destroy_only< RowIterator > m_root_iterator
An iterator you can read from to get all records for this query.
Definition: sql_lex.h:744
bool m_contains_except_all
Definition: sql_lex.h:817
Query_expression(enum_parsing_context parsing_context)
Construct and initialize Query_expression object.
Definition: sql_lex.cc:2203
void set_explain_marker_from(THD *thd, const Query_expression *u)
Definition: sql_lex.cc:2529
void set_prepared()
Definition: sql_lex.h:1019
bool executed
Query expression has been executed.
Definition: sql_lex.h:731
bool walk(Item_processor processor, enum_walk walk, uchar *arg)
Definition: sql_union.cc:1991
void clear_root_access_path()
Definition: sql_lex.h:882
void set_explain_marker(THD *thd, enum_parsing_context m)
Definition: sql_lex.cc:2523
bool has_top_level_distinct() const
Definition: sql_lex.h:714
unique_ptr_destroy_only< RowIterator > release_root_iterator()
Definition: sql_lex.h:872
void exclude_tree()
Exclude subtree of current unit from tree of SELECTs.
Definition: sql_lex.cc:2382
Query_term_set_op * set_operation() const
Convenience method to avoid down casting, i.e.
Definition: sql_lex.h:654
void set_executed()
Definition: sql_lex.h:1027
Mem_root_array< MaterializePathParameters::Operand > m_operands
If there is an unfinished materialization (see optimize()), contains one element for each operand (qu...
Definition: sql_lex.h:752
enum_parsing_context explain_marker
Marker for subqueries in WHERE, HAVING, ORDER BY, GROUP BY and SELECT item lists.
Definition: sql_lex.h:727
Query_term * find_blocks_query_term(const Query_block *qb) const
Definition: sql_lex.h:665
enum_parsing_context get_explain_marker(const THD *thd) const
Definition: sql_lex.cc:2517
Query_expression * next_query_expression() const
Definition: sql_lex.h:866
Query_term * query_term() const
Getter for m_query_term, q.v.
Definition: sql_lex.h:647
Query_expression * next
Intrusive double-linked list of all query expressions immediately contained within the same query blo...
Definition: sql_lex.h:631
bool create_iterators(THD *thd)
Creates iterators for the access paths created by optimize().
Definition: sql_union.cc:1152
Query_block * global_parameters() const
Return the query block holding the top level ORDER BY, LIMIT and OFFSET.
Definition: sql_lex.h:809
bool explain_query_term(THD *explain_thd, const THD *query_thd, Query_term *qt)
Definition: sql_union.cc:1498
Query_block * slave
The first query block in this query expression.
Definition: sql_lex.h:640
bool change_query_result(THD *thd, Query_result_interceptor *result, Query_result_interceptor *old_result)
Change the query result object used to return the final result of the unit, replacing occurrences of ...
Definition: sql_union.cc:1931
size_t num_visible_fields() const
Definition: sql_union.cc:1965
bool is_simple() const
Definition: sql_lex.h:774
bool optimized
All query blocks in query expression are optimized.
Definition: sql_lex.h:730
Query_block * outer_query_block() const
Definition: sql_lex.h:860
void exclude_level()
Exclude this unit and immediately contained query_block objects.
Definition: sql_lex.cc:2320
Query_block * first_query_block() const
Definition: sql_lex.h:863
Query_block * master
The query block wherein this query expression is contained, NULL if the query block is the outer-most...
Definition: sql_lex.h:638
Query_block * last_distinct() const
Return the Query_block of the last query term in a n-ary set operation that is the right side of the ...
Definition: sql_lex.h:706
bool prepare_query_term(THD *thd, Query_term *qts, Query_result *common_result, ulonglong added_options, ulonglong create_options, int level, Mem_root_array< bool > &nullable)
Prepare the query term nodes and their associated post processing query blocks (i....
Definition: sql_union.cc:419
enum_clean_state cleaned
cleanliness state
Definition: sql_lex.h:784
bool prepare(THD *thd, Query_result *result, mem_root_deque< Item * > *insert_field_list, ulonglong added_options, ulonglong removed_options)
Prepares all query blocks of a query expression.
Definition: sql_union.cc:705
bool check_materialized_derived_query_blocks(THD *thd)
Sets up query blocks belonging to the query expression of a materialized derived table.
Definition: sql_derived.cc:953
Query_expression ** prev
Definition: sql_lex.h:632
void DebugPrintQueryPlan(THD *thd, const char *keyword) const
Definition: sql_union.cc:1176
void set_query_term(Query_term *qt)
Setter for m_query_term, q.v.
Definition: sql_lex.h:649
ha_rows offset_limit_cnt
Definition: sql_lex.h:814
Query_term * m_query_term
Definition: sql_lex.h:643
AccessPath * m_root_access_path
Definition: sql_lex.h:745
Mem_root_array< MaterializePathParameters::Operand > release_query_blocks_to_materialize()
See optimize().
Definition: sql_lex.h:914
bool has_any_limit() const
Checks if this query expression has limit defined.
Definition: sql_lex.cc:3884
bool ExecuteIteratorQuery(THD *thd)
Definition: sql_union.cc:1666
void set_optimized()
Definition: sql_lex.h:1023
void cleanup(bool full)
Cleanup this query expression object after preparation or one round of execution.
Definition: sql_union.cc:1840
friend bool parse_view_definition(THD *thd, Table_ref *view_ref)
Parse a view definition.
Definition: sql_view.cc:1186
mem_root_deque< Item * > * get_unit_column_types()
Get column type information for this query expression.
Definition: sql_union.cc:1961
Query_block * create_post_processing_block(Query_term_set_op *term)
Create a block to be used for ORDERING and LIMIT/OFFSET processing of a query term,...
Definition: sql_lex.cc:738
bool replace_items(Item_transformer t, uchar *arg)
Replace all targeted items using transformer provided and info in arg.
Definition: item_subselect.cc:3099
RowIterator * root_iterator() const
Definition: sql_lex.h:871
bool is_leaf_block(Query_block *qb)
Definition: sql_lex.cc:760
bool force_create_iterators(THD *thd)
Ensures that there are iterators created for the access paths created by optimize(),...
Definition: sql_union.cc:1144
Query_block * first_recursive
First query block (in this UNION) which references the CTE.
Definition: sql_lex.h:835
bool prepared
All query blocks in query expression are prepared.
Definition: sql_lex.h:729
void assert_not_fully_clean()
Asserts that none of {this unit and its children units} is fully cleaned up.
Definition: sql_union.cc:1896
void renumber_selects(LEX *lex)
Renumber query blocks of a query expression according to supplied LEX.
Definition: sql_lex.cc:3966
bool accept(Select_lex_visitor *visitor)
Definition: sql_lex.cc:3538
Query_result * query_result() const
Definition: sql_lex.h:869
ha_rows send_records
Definition: sql_lex.h:1089
enum_parsing_context place() const
If unit is a subquery, which forms an object of the upper level (an Item_subselect,...
Definition: sql_lex.cc:4807
mem_root_deque< Item * > types
Definition: sql_lex.h:796
void accumulate_used_tables(table_map map)
If unit is a subquery, which forms an object of the upper level (an Item_subselect,...
Definition: sql_lex.cc:4799
ha_rows select_limit_cnt
Definition: sql_lex.h:814
void create_access_paths(THD *thd)
Convert the executor structures to a set of access paths, storing the result in m_root_access_path.
Definition: sql_union.cc:1414
void print(const THD *thd, String *str, enum_query_type query_type)
Definition: sql_lex.cc:2715
Table_ref * derived_table
If this query expression is underlying of a derived table, the derived table.
Definition: sql_lex.h:830
void restore_cmd_properties()
Loop over all query blocks and restore information needed for optimization, including binding data fo...
Definition: sql_lex.cc:3989
bool finalize(THD *thd)
For any non-finalized query block, finalize it so that we are allowed to create iterators.
Definition: sql_union.cc:1132
Query_terms< order, visit_leaves > query_terms() const
Return iterator object over query terms rooted in m_query_term, using either post order visiting (def...
Definition: sql_lex.h:691
bool set_limit(THD *thd, Query_block *provider)
Set limit and offset for query expression object.
Definition: sql_lex.cc:3865
bool m_reject_multiple_rows
This query expression represents a scalar subquery and we need a run-time check that the cardinality ...
Definition: sql_lex.h:851
bool ClearForExecution()
Do everything that would be needed before running Init() on the root iterator.
Definition: sql_union.cc:1632
Item_subselect * item
Points to subquery if this query expression is used in one, otherwise NULL.
Definition: sql_lex.h:820
enum_clean_state
Values for Query_expression::cleaned.
Definition: sql_lex.h:777
@ UC_PART_CLEAN
Unit were cleaned, except JOIN and JOIN_TABs were kept for possible EXPLAIN.
Definition: sql_lex.h:779
@ UC_CLEAN
Unit completely cleaned, all underlying JOINs were freed.
Definition: sql_lex.h:781
@ UC_DIRTY
Unit isn't cleaned.
Definition: sql_lex.h:778
void invalidate()
Invalidate by nulling out pointers to other Query expressions and Query blocks.
Definition: sql_lex.cc:2422
bool can_materialize_directly_into_result() const
Whether there is a chance that optimize() is capable of materializing directly into a result table if...
Definition: sql_union.cc:680
PT_with_clause * m_with_clause
The WITH clause which is the first part of this query expression.
Definition: sql_lex.h:825
bool explain(THD *explain_thd, const THD *query_thd)
Explain query starting from this unit.
Definition: sql_union.cc:1564
bool is_mergeable() const
Return true if query expression can be merged into an outer query, based on technical constraints.
Definition: sql_lex.cc:3921
Query_result * m_query_result
Object to which the result for this query expression is sent.
Definition: sql_lex.h:736
bool is_prepared() const
Check state of preparation of the contained query expression.
Definition: sql_lex.h:1046
table_map m_lateral_deps
If 'this' is body of lateral derived table: map of tables in the same FROM clause as this derived tab...
Definition: sql_lex.h:845
bool is_optimized() const
Check state of optimization of the contained query expression.
Definition: sql_lex.h:1048
void set_query_result(Query_result *res)
Set new query result object for this query expression.
Definition: sql_lex.h:919
void include_down(LEX *lex, Query_block *outer)
Include a query expression below a query block.
Definition: sql_lex.cc:3897
void destroy()
Destroy contained objects, in particular temporary tables which may have their own mem_roots.
Definition: sql_union.cc:1871
mem_root_deque< Item * > * get_field_list()
Get field list for this query expression.
Definition: sql_union.cc:1980
bool execute(THD *thd)
Execute a query expression that may be a UNION and/or have an ordered result.
Definition: sql_union.cc:1809
bool clear_correlated_query_blocks()
Empties all correlated query blocks defined within the query expression; that is, correlated CTEs def...
Definition: sql_union.cc:1618
bool save_cmd_properties(THD *thd)
Save prepared statement properties for a query expression and underlying query blocks.
Definition: sql_lex.cc:3978
AccessPath * root_access_path() const
Definition: sql_lex.h:875
uint8 uncacheable
result of this query can't be cached, bit field, can be : UNCACHEABLE_DEPENDENT UNCACHEABLE_RAND UNCA...
Definition: sql_lex.h:768
bool unfinished_materialization() const
See optimize().
Definition: sql_lex.h:910
void clear_execution()
Clear execution state, needed before new execution of prepared statement.
Definition: sql_lex.h:1038
bool is_recursive() const
Definition: sql_lex.h:1106
Definition: query_result.h:181
Definition: sql_union.h:40
Definition: query_result.h:58
Definition: sql_lex.h:2613
bool is_mixed_stmt_unsafe(bool in_multi_stmt_transaction_mode, bool binlog_direct, bool trx_cache_is_not_empty, uint tx_isolation)
Definition: sql_lex.h:3135
bool uses_stored_routines() const
true if the parsed tree contains references to stored procedures or functions, false otherwise
Definition: sql_lex.h:3182
void set_stmt_row_injection()
Flag the statement as a row injection.
Definition: sql_lex.h:2982
std::unique_ptr< malloc_unordered_map< std::string, Sroutine_hash_entry * > > sroutines
Definition: sql_lex.h:2644
void set_stmt_unsafe(enum_binlog_stmt_unsafe unsafe_type)
Flag the current (top-level) statement as unsafe.
Definition: sql_lex.h:2931
static const char * stmt_accessed_table_string(enum_stmt_accessed_table accessed_table)
Definition: sql_lex.h:3035
enum_binlog_stmt_type
Enumeration listing special types of statements.
Definition: sql_lex.h:3198
@ BINLOG_STMT_TYPE_ROW_INJECTION
The statement is a row injection (i.e., either a BINLOG statement or a row event executed by the slav...
Definition: sql_lex.h:3203
@ BINLOG_STMT_TYPE_COUNT
The last element of this enumeration type.
Definition: sql_lex.h:3206
Table_ref ** query_tables_last
Definition: sql_lex.h:2627
bool is_stmt_unsafe_with_mixed_mode() const
Definition: sql_lex.h:3188
void reset_query_tables_list(bool init)
Definition: sql_lex.cc:3633
static const int BINLOG_STMT_UNSAFE_ALL_FLAGS
This has all flags from 0 (inclusive) to BINLOG_STMT_FLAG_COUNT (exclusive) set.
Definition: sql_lex.h:2904
~Query_tables_list()=default
enum_sql_command sql_command
SQL command for this statement.
Definition: sql_lex.h:2623
void set_stmt_unsafe_flags(uint32 flags)
Set the bits of binlog_stmt_flags determining the type of unsafeness of the current statement.
Definition: sql_lex.h:2946
uint32 get_stmt_unsafe_flags() const
Return a binary combination of all unsafe warnings for the statement.
Definition: sql_lex.h:2959
void set_stmt_unsafe_with_mixed_mode()
Definition: sql_lex.h:3187
Query_tables_list()=default
bool is_stmt_unsafe() const
Determine if this statement is marked as unsafe.
Definition: sql_lex.h:2918
bool is_stmt_unsafe(enum_binlog_stmt_unsafe unsafe)
Definition: sql_lex.h:2920
uint table_count
Number of tables which were open by open_tables() and to be locked by lock_tables().
Definition: sql_lex.h:2683
uint32 stmt_accessed_table_flag
Bit field that determines the type of tables that are about to be be accessed while executing a state...
Definition: sql_lex.h:3230
enum_stmt_accessed_table
Definition: sql_lex.h:2990
@ STMT_READS_TEMP_TRANS_TABLE
Definition: sql_lex.h:3005
@ STMT_WRITES_TEMP_TRANS_TABLE
Definition: sql_lex.h:3022
@ STMT_WRITES_TRANS_TABLE
Definition: sql_lex.h:3014
@ STMT_WRITES_TEMP_NON_TRANS_TABLE
Definition: sql_lex.h:3026
@ STMT_READS_TRANS_TABLE
Definition: sql_lex.h:2995
@ STMT_READS_TEMP_NON_TRANS_TABLE
Definition: sql_lex.h:3010
@ STMT_ACCESS_TABLE_COUNT
Definition: sql_lex.h:3031
@ STMT_READS_NON_TRANS_TABLE
Definition: sql_lex.h:3000
@ STMT_WRITES_NON_TRANS_TABLE
Definition: sql_lex.h:3018
bool stmt_unsafe_with_mixed_mode
This flag is set to true if statement is unsafe to be binlogged in STATEMENT format,...
Definition: sql_lex.h:3243
uint sroutines_list_own_elements
Definition: sql_lex.h:2656
@ START_SROUTINES_HASH_SIZE
Definition: sql_lex.h:2642
void mark_as_requiring_prelocking(Table_ref **tables_own_last)
Definition: sql_lex.h:2709
bool is_stmt_row_injection() const
Determine if this statement is a row injection.
Definition: sql_lex.h:2970
enum_lock_tables_state lock_tables_state
Definition: sql_lex.h:2671
void set_query_tables_list(Query_tables_list *state)
Definition: sql_lex.h:2695
void set_using_match()
Definition: sql_lex.h:3184
bool stmt_accessed_table(enum_stmt_accessed_table accessed_table)
Checks if a type of table is about to be accessed while executing a statement.
Definition: sql_lex.h:3112
SQL_I_List< Sroutine_hash_entry > sroutines_list
Definition: sql_lex.h:2654
void destroy_query_tables_list()
Definition: sql_lex.cc:3677
Sroutine_hash_entry ** sroutines_list_own_last
Definition: sql_lex.h:2655
bool using_match
It will be set true if 'MATCH () AGAINST' is used in the statement.
Definition: sql_lex.h:3235
void set_stmt_accessed_table(enum_stmt_accessed_table accessed_table)
Sets the type of table that is about to be accessed while executing a statement.
Definition: sql_lex.h:3093
static const int binlog_stmt_unsafe_errcode[BINLOG_STMT_UNSAFE_COUNT]
Maps elements of enum_binlog_stmt_unsafe to error codes.
Definition: sql_lex.h:2910
enum_binlog_stmt_unsafe
All types of unsafe statements.
Definition: sql_lex.h:2739
@ BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION
Using some functions is unsafe (e.g., UUID).
Definition: sql_lex.h:2771
@ BINLOG_STMT_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE
Mixing self-logging and non-self-logging engines in a statement is unsafe.
Definition: sql_lex.h:2784
@ BINLOG_STMT_UNSAFE_COUNT
Definition: sql_lex.h:2898
@ BINLOG_STMT_UNSAFE_XA
XA transactions and statements.
Definition: sql_lex.h:2871
@ BINLOG_STMT_UNSAFE_CREATE_SELECT_AUTOINC
CREATE TABLE...SELECT on a table with auto-increment column is unsafe because which rows are replaced...
Definition: sql_lex.h:2840
@ BINLOG_STMT_UNSAFE_DEFAULT_EXPRESSION_IN_SUBSTATEMENT
If a substatement inserts into or updates a table that has a column with an unsafe DEFAULT expression...
Definition: sql_lex.h:2878
@ BINLOG_STMT_UNSAFE_NOWAIT
Definition: sql_lex.h:2866
@ BINLOG_STMT_UNSAFE_FULLTEXT_PLUGIN
Using a plugin is unsafe.
Definition: sql_lex.h:2864
@ BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS
INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEYS is unsafe.
Definition: sql_lex.h:2853
@ BINLOG_STMT_UNSAFE_AUTOINC_NOT_FIRST
INSERT into auto-inc field which is not the first part in composed primary key.
Definition: sql_lex.h:2859
@ BINLOG_STMT_UNSAFE_CREATE_SELECT_WITH_GIPK
Generating invisible primary key for a table created using CREATE TABLE... SELECT....
Definition: sql_lex.h:2895
@ BINLOG_STMT_UNSAFE_NONTRANS_AFTER_TRANS
Mixing transactional and non-transactional statements are unsafe if non-transactional reads or writes...
Definition: sql_lex.h:2778
@ BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE
Using most system variables is unsafe, because slave may run with different options than master.
Definition: sql_lex.h:2767
@ BINLOG_STMT_UNSAFE_INSERT_IGNORE_SELECT
INSERT...IGNORE SELECT is unsafe because which rows are ignored depends on the order that rows are re...
Definition: sql_lex.h:2797
@ BINLOG_STMT_UNSAFE_MIXED_STATEMENT
Statements that read from both transactional and non-transactional tables and write to any of them ar...
Definition: sql_lex.h:2790
@ BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS
Inserting into an autoincrement column in a stored routine is unsafe.
Definition: sql_lex.h:2758
@ BINLOG_STMT_UNSAFE_SKIP_LOCKED
Definition: sql_lex.h:2865
@ BINLOG_STMT_UNSAFE_CREATE_IGNORE_SELECT
CREATE TABLE... IGNORE... SELECT is unsafe because which rows are ignored depends on the order that r...
Definition: sql_lex.h:2825
@ BINLOG_STMT_UNSAFE_ACL_TABLE_READ_IN_DML_DDL
DML or DDL statement that reads a ACL table is unsafe, because the row are read without acquiring SE ...
Definition: sql_lex.h:2886
@ BINLOG_STMT_UNSAFE_INSERT_SELECT_UPDATE
INSERT...SELECT...UPDATE is unsafe because which rows are updated depends on the order that rows are ...
Definition: sql_lex.h:2804
@ BINLOG_STMT_UNSAFE_LIMIT
SELECT..LIMIT is unsafe because the set of rows returned cannot be predicted.
Definition: sql_lex.h:2744
@ BINLOG_STMT_UNSAFE_REPLACE_SELECT
INSERT...REPLACE SELECT is unsafe because which rows are replaced depends on the order that rows are ...
Definition: sql_lex.h:2818
@ BINLOG_STMT_UNSAFE_CREATE_REPLACE_SELECT
CREATE TABLE...REPLACE... SELECT is unsafe because which rows are replaced depends on the order that ...
Definition: sql_lex.h:2832
@ BINLOG_STMT_UNSAFE_UDF
Using a UDF (user-defined function) is unsafe.
Definition: sql_lex.h:2762
@ BINLOG_STMT_UNSAFE_UPDATE_IGNORE
UPDATE...IGNORE is unsafe because which rows are ignored depends on the order that rows are updated.
Definition: sql_lex.h:2847
@ BINLOG_STMT_UNSAFE_WRITE_AUTOINC_SELECT
Query that writes to a table with auto_inc column after selecting from other tables are unsafe as the...
Definition: sql_lex.h:2811
@ BINLOG_STMT_UNSAFE_SYSTEM_TABLE
Access to log tables is unsafe because slave and master probably log different things.
Definition: sql_lex.h:2749
Query_tables_list & operator=(Query_tables_list &&)=default
Table_ref * query_tables
Definition: sql_lex.h:2625
bool requires_prelocking()
Definition: sql_lex.h:2708
void chop_off_not_own_tables()
Definition: sql_lex.h:2716
Table_ref * first_not_own_table()
Definition: sql_lex.h:2713
Table_ref ** query_tables_own_last
Definition: sql_lex.h:2634
bool get_using_match()
Definition: sql_lex.h:3185
uint32 binlog_stmt_flags
Bit field indicating the type of statement.
Definition: sql_lex.h:3224
bool is_query_tables_locked() const
Definition: sql_lex.h:2672
enum_lock_tables_state
Locking state of tables in this particular statement.
Definition: sql_lex.h:2670
@ LTS_LOCKED
Definition: sql_lex.h:2670
@ LTS_NOT_LOCKED
Definition: sql_lex.h:2670
void add_to_query_tables(Table_ref *table)
Definition: sql_lex.h:2704
Common base class for n-ary set operations, including unary.
Definition: query_term.h:402
Query term tree structure.
Definition: query_term.h:209
virtual Query_block * query_block() const =0
The query_block which holds the ORDER BY and LIMIT information for this set operation.
Query_term_set_op * m_parent
Back pointer to the node whose child we are, or nullptr (root term).
Definition: query_term.h:272
virtual Query_term_type term_type() const =0
Get the node tree type.
Containing class for iterator over the query term tree.
Definition: query_term.h:579
A context for reading through a single table using a chosen access method: index read,...
Definition: row_iterator.h:82
Simple intrusive linked list.
Definition: sql_list.h:47
Base class for secondary engine execution context objects.
Definition: sql_lex.h:2551
virtual ~Secondary_engine_execution_context()=default
Destructs the secondary engine execution context object.
Abstract base class for traversing the Query_block tree.
Definition: select_lex_visitor.h:40
Context object used by semijoin equality decorrelation code.
Definition: sql_resolver.cc:2381
This class represent server options as set by the parser.
Definition: sql_servers.h:71
Representation of an SQL command.
Definition: sql_cmd.h:83
Structure that represents element in the set of stored routines used by statement or routine.
Definition: sp.h:225
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:167
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Class representing a table function.
Definition: table_function.h:53
Definition: sql_lex.h:296
Table_ident(Query_expression *s)
This constructor is used only for the case when we create a derived table.
Definition: sql_lex.h:317
void change_db(const char *db_name)
Definition: sql_lex.h:336
Query_expression * sel
Definition: sql_lex.h:300
Table_ident(Protocol *protocol, const LEX_CSTRING &db_arg, const LEX_CSTRING &table_arg, bool force)
Definition: sql_lex.cc:156
Table_ident(const LEX_CSTRING &table_arg)
Definition: sql_lex.h:307
bool is_table_function() const
Definition: sql_lex.h:333
bool is_derived_table() const
Definition: sql_lex.h:335
Table_ident(LEX_CSTRING &table_arg, Table_function *table_func_arg)
Definition: sql_lex.h:327
LEX_CSTRING table
Definition: sql_lex.h:299
Table_function * table_function
Definition: sql_lex.h:301
LEX_CSTRING db
Definition: sql_lex.h:298
Table_ident(const LEX_CSTRING &db_arg, const LEX_CSTRING &table_arg)
Definition: sql_lex.h:305
Table_ref * first_leaf_table()
Return first leaf table of a base table or a view/derived table.
Definition: table.h:3299
Table_ref * next_leaf
Definition: table.h:3765
Used for storing information associated with generated column, default values generated from expressi...
Definition: field.h:485
Represents the (explicit) window of a SQL 2003 section 7.11 <window clause>, or the implicit (inlined...
Definition: window.h:110
The internal state of the syntax parser.
Definition: sql_lexer_yacc_state.h:246
Yacc_state()
Definition: sql_lexer_yacc_state.h:248
void reset()
Definition: sql_lexer_yacc_state.h:252
thr_lock_type m_lock_type
Type of lock to be used for tables being added to the statement's table list in table_factor,...
Definition: sql_lexer_yacc_state.h:321
uchar * yacc_yyvs
Bison internal semantic value stack, yyvs, when dynamically allocated using my_yyoverflow().
Definition: sql_lexer_yacc_state.h:296
enum_mdl_type m_mdl_type
The type of requested metadata lock for tables added to the statement table list.
Definition: sql_lexer_yacc_state.h:327
~Yacc_state()
Definition: sql_lexer_yacc_state.h:269
uchar * yacc_yyss
Bison internal state stack, yyss, when dynamically allocated using my_yyoverflow().
Definition: sql_lexer_yacc_state.h:290
void reset_before_substatement()
Reset part of the state which needs resetting before parsing substatement.
Definition: sql_lexer_yacc_state.h:281
uchar * yacc_yyls
Bison internal location value stack, yyls, when dynamically allocated using my_yyoverflow().
Definition: sql_lexer_yacc_state.h:302
The class hold dynamic table statistics for a table.
Definition: table_stats.h:103
void invalidate_cache(void)
Definition: table_stats.h:216
The class hold dynamic table statistics for a table.
Definition: tablespace_stats.h:64
void invalidate_cache(void)
Definition: tablespace_stats.h:111
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:111
Definition: partition_info.h:209
sp_head represents one instance of a stored program.
Definition: sp_head.h:383
Definition: sp_head.h:123
The class represents parse-time context, which keeps track of declared variables/parameters,...
Definition: sp_pcontext.h:252
static MEM_ROOT mem_root
Definition: client_plugin.cc:114
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:31
Acl_type
Definition: sql_lex.h:263
uint to_uint(enum_sp_type val)
Definition: sql_lex.h:248
const char * index_hint_type_name[]
Definition: sql_lex.cc:136
enum_sp_data_access
Definition: sql_lex.h:207
void print_derived_column_names(const THD *thd, String *str, const Create_col_name_list *column_names)
Prints into 'str' a comma-separated list of column names, enclosed in parenthesis.
Definition: sql_lex.cc:2188
bool db_is_default_db(const char *db, size_t db_len, const THD *thd)
Definition: sql_lex.cc:2919
bool check_select_for_locking_clause(THD *)
sub_select_type
Definition: sql_lex.h:464
#define TYPE_ENUM_PROCEDURE
Definition: sql_lex.h:259
execute_only_in_secondary_reasons
Definition: sql_lex.h:3772
enum_alter_user_attribute
Definition: sql_lex.h:282
void binlog_unsafe_map_init()
Definition: sql_lex.cc:5136
Bounds_checked_array< Item * > Ref_item_array
Definition: sql_lex.h:1144
longlong to_longlong(enum_sp_type val)
Definition: sql_lex.h:244
enum_view_create_mode
Definition: sql_lex.h:276
bool walk_join_list(mem_root_deque< Table_ref * > &list, std::function< bool(Table_ref *)> action)
Definition: sql_resolver.cc:2676
execute_only_in_hypergraph_reasons
Definition: sql_lex.h:3782
bool is_union() const
Definition: sql_lex.h:2499
uint binlog_unsafe_map[256]
Definition: sql_lex.cc:5041
void lex_end(LEX *lex)
Call this function after preparation and execution of a query.
Definition: sql_lex.cc:531
enum_sp_type to_sp_type(longlong val)
Definition: sql_lex.h:236
enum_explain_type
Query_block type enum.
Definition: sql_lex.h:1150
#define TYPE_ENUM_FUNCTION
Definition: sql_lex.h:258
const LEX_STRING null_lex_str
LEX_STRING constant for null-string to be used in parser and other places.
Definition: sql_lex.cc:92
enum_sp_type
enum_sp_type defines type codes of stored programs.
Definition: sql_lex.h:224
void lex_free(void)
Definition: sql_lex.cc:165
bool is_set_operation() const
Definition: sql_lex.h:2506
constexpr const int MAX_SELECT_NESTING
Definition: sql_lex.h:139
void trim_whitespace(const CHARSET_INFO *cs, LEX_STRING *str)
Definition: sql_lex.cc:2157
bool is_lex_native_function(const LEX_STRING *name)
Check if name is a sql function.
Definition: sql_lex.cc:961
uchar index_clause_map
Definition: sql_lex.h:475
int my_sql_parser_lex(MY_SQL_PARSER_STYPE *, POS *, class THD *)
yylex() function implementation for the main parser
Definition: sql_lex.cc:1362
enum_sp_suid_behaviour
Definition: sql_lex.h:201
const size_t INITIAL_LEX_PLUGIN_LIST_SIZE
Definition: sql_lex.h:138
bool is_keyword(const char *name, size_t len)
Definition: sql_lex.cc:946
const LEX_CSTRING sp_data_access_name[]
Definition: sql_lex.h:269
enum_keep_diagnostics
Definition: sql_lex.h:193
bool lex_start(THD *thd)
Call lex_start() before every query that is to be prepared and executed.
Definition: sql_lex.cc:507
struct struct_replica_connection LEX_REPLICA_CONNECTION
@ SP_READS_SQL_DATA
Definition: sql_lex.h:211
@ SP_MODIFIES_SQL_DATA
Definition: sql_lex.h:212
@ SP_NO_SQL
Definition: sql_lex.h:210
@ SP_DEFAULT_ACCESS
Definition: sql_lex.h:208
@ SP_CONTAINS_SQL
Definition: sql_lex.h:209
@ UNSPECIFIED_TYPE
Definition: sql_lex.h:465
@ DERIVED_TABLE_TYPE
Definition: sql_lex.h:467
@ GLOBAL_OPTIONS_TYPE
Definition: sql_lex.h:466
@ TABLESAMPLE
Definition: sql_lex.h:3775
@ SUPPORTED_IN_PRIMARY
Definition: sql_lex.h:3773
@ CUBE
Definition: sql_lex.h:3774
@ ALTER_USER_COMMENT_NOT_USED
@ QUALIFY_CLAUSE
Definition: sql_lex.h:3784
@ SUPPORTED_IN_BOTH_OPTIMIZERS
Definition: sql_lex.h:3783
@ EXPLAIN_INTERSECT_RESULT
@ EXPLAIN_total
fake type, total number of all valid types
@ NO_COMMENT
Not parsing comments.
Definition: sql_lex.h:3266
@ DISCARD_COMMENT
Parsing comments that need to be discarded.
Definition: sql_lex.h:3282
@ PRESERVE_COMMENT
Parsing comments that need to be preserved.
Definition: sql_lex.h:3273
@ SP_IS_SUID
Definition: sql_lex.h:204
@ SP_IS_DEFAULT_SUID
Definition: sql_lex.h:202
@ SP_IS_NOT_SUID
Definition: sql_lex.h:203
@ DA_KEEP_UNSPECIFIED
keep semantics is unspecified
Definition: sql_lex.h:198
@ DA_KEEP_DIAGNOSTICS
keep the diagnostics area
Definition: sql_lex.h:195
@ DA_KEEP_PARSE_ERROR
keep diagnostics area after parse error
Definition: sql_lex.h:197
@ DA_KEEP_COUNTS
keep @warning_count / @error_count
Definition: sql_lex.h:196
@ DA_KEEP_NOTHING
keep nothing
Definition: sql_lex.h:194
void my_error(int nr, myf MyFlags,...)
Fill in and print a previously registered error message.
Definition: my_error.cc:216
bool change_query_result(THD *thd, Query_result_interceptor *new_result, Query_result_interceptor *old_result)
Change the Query_result object of the query block.
Definition: sql_select.cc:4195
bool optimize(THD *thd, bool finalize_access_paths)
Optimize a query block and all inner query expressions.
Definition: sql_select.cc:2037
bool check_column_privileges(THD *thd)
Check privileges for all columns referenced from query block.
Definition: sql_select.cc:2079
bool check_privileges_for_subqueries(THD *thd)
Check privileges for column references in subqueries of a query block.
Definition: sql_select.cc:2184
bool transform_scalar_subqueries_to_join_with_derived(THD *thd)
Transform eligible scalar subqueries in the SELECT list, WHERE condition, HAVING condition or JOIN co...
Definition: sql_resolver.cc:8102
Item * single_visible_field() const
Definition: sql_resolver.cc:4790
bool remove_redundant_subquery_clauses(THD *thd)
For a table subquery predicate (IN/ANY/ALL/EXISTS/etc): since it does not support LIMIT the following...
Definition: sql_resolver.cc:3998
void delete_unused_merged_columns(mem_root_deque< Table_ref * > *tables)
Delete unused columns from merged tables.
Definition: sql_resolver.cc:5153
bool check_only_full_group_by(THD *thd)
Runs checks mandated by ONLY_FULL_GROUP_BY.
Definition: sql_resolver.cc:4493
void clear_sj_expressions(NESTED_JOIN *nested_join)
Remove semijoin condition for this query block.
Definition: sql_resolver.cc:2238
bool apply_local_transforms(THD *thd, bool prune)
Does permanent transformations which are local to a query block (which do not merge it to another blo...
Definition: sql_resolver.cc:813
void replace_referenced_item(Item *const old_item, Item *const new_item)
Replace item in select list and preserve its reference count.
Definition: sql_resolver.cc:7549
bool record_join_nest_info(mem_root_deque< Table_ref * > *tables)
Record join nest info in the select block.
Definition: sql_resolver.cc:2015
bool replace_first_item_with_min_max(THD *thd, int item_no, bool use_min)
Replace the first visible item in the select list with a wrapping MIN or MAX aggregate function.
Definition: sql_resolver.cc:7057
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block)
Definition: sql_resolver.cc:2197
bool transform_grouped_to_derived(THD *thd, bool *break_off)
Minion of transform_scalar_subqueries_to_join_with_derived.
Definition: sql_resolver.cc:5990
bool decorrelate_condition(Semijoin_decorrelation &sj_decor, Table_ref *join_nest)
Decorrelate the WHERE clause or a join condition of a subquery used in an IN or EXISTS predicate.
Definition: sql_resolver.cc:2562
bool setup_conds(THD *thd)
Resolve WHERE condition and join conditions.
Definition: sql_resolver.cc:1482
bool add_ftfunc_list(List< Item_func_match > *ftfuncs)
Add full-text function elements from a list into this query block.
Definition: sql_resolver.cc:3935
bool setup_join_cond(THD *thd, mem_root_deque< Table_ref * > *tables, bool in_update)
Resolve join conditions for a join nest.
Definition: sql_resolver.cc:1543
void remove_hidden_items()
Remove hidden items from select list.
Definition: sql_resolver.cc:5197
void remap_tables(THD *thd)
Re-map table numbers for all tables in a query block.
Definition: sql_resolver.cc:1318
void repoint_contexts_of_join_nests(mem_root_deque< Table_ref * > join_list)
Go through a list of tables and join nests, recursively, and repoint its query_block pointer.
Definition: sql_resolver.cc:3950
void propagate_unique_test_exclusion()
Propagate exclusion from table uniqueness test into subqueries.
Definition: sql_resolver.cc:3917
void mark_item_as_maybe_null_if_non_primitive_grouped(Item *item) const
Marks occurrences of group by fields in a function's arguments as nullable, so that we do not optimiz...
Definition: sql_resolver.cc:4776
bool convert_subquery_to_semijoin(THD *thd, Item_exists_subselect *subq_pred)
Convert a subquery predicate of this query block into a Table_ref semi-join nest.
Definition: sql_resolver.cc:2856
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block)
Fix used tables information for a subquery after query transformations.
Definition: sql_resolver.cc:2183
bool lift_fulltext_from_having_to_select_list(THD *thd)
Copies all non-aggregated calls to the full-text search MATCH function from the HAVING clause to the ...
Definition: sql_resolver.cc:8376
bool setup_wild(THD *thd)
Expand all '*' in list of expressions with the matching column references.
Definition: sql_resolver.cc:1425
bool add_inner_func_calls_to_select_list(THD *thd, Lifted_expressions_map *lifted_exprs)
Definition: sql_resolver.cc:6966
bool remove_aggregates(THD *thd, Query_block *select)
A minion of transform_grouped_to_derived.
Definition: sql_resolver.cc:5795
bool prepare_values(THD *thd)
Prepare a table value constructor query block for optimization.
Definition: sql_resolver.cc:733
bool resolve_placeholder_tables(THD *thd, bool apply_semijoin)
Resolve derived table, view, table function information for a query block.
Definition: sql_resolver.cc:1351
bool simplify_joins(THD *thd, mem_root_deque< Table_ref * > *join_list, bool top, bool in_sj, Item **new_conds, uint *changelog=nullptr)
Simplify joins replacing outer joins by inner joins whenever it's possible.
Definition: sql_resolver.cc:1732
void update_used_tables()
Update used tables information for all local expressions.
Definition: sql_resolver.cc:918
bool resolve_limits(THD *thd)
Resolve OFFSET and LIMIT clauses.
Definition: sql_resolver.cc:956
int group_list_size() const
Definition: sql_resolver.cc:4642
bool empty_order_list(Query_block *sl)
Empty the ORDER list.
Definition: sql_resolver.cc:4095
bool prepare(THD *thd, mem_root_deque< Item * > *insert_field_list)
Prepare query block for optimization.
Definition: sql_resolver.cc:180
void reset_nj_counters(mem_root_deque< Table_ref * > *join_list=nullptr)
Set NESTED_JOIN::counter=0 in all nested joins in passed list.
Definition: sql_resolver.cc:1599
bool check_view_privileges(THD *thd, Access_bitmask want_privilege_first, Access_bitmask want_privilege_next)
Check privileges for views that are merged into query block.
Definition: sql_resolver.cc:1195
bool add_inner_fields_to_select_list(THD *thd, Lifted_expressions_map *lifted_exprs, Item *selected_field_or_ref, const uint first_non_hidden)
Minion of decorrelate_derived_scalar_subquery_pre.
Definition: sql_resolver.cc:6905
bool resolve_rollup_wfs(THD *thd)
Replace group by field references inside window functions with references in the presence of ROLLUP.
Definition: sql_resolver.cc:5036
bool field_list_is_empty() const
Definition: sql_resolver.cc:4806
Item ** add_hidden_item(Item *item)
Add item to the hidden part of select list.
Definition: sql_resolver.cc:5188
void merge_contexts(Query_block *inner)
Merge name resolution context objects of a subquery into its parent.
Definition: sql_resolver.cc:3967
bool add_inner_exprs_to_group_by(THD *thd, List_iterator< Item > &inner_exprs, Item *selected_item, bool *selected_expr_added_to_group_by, mem_root_deque< Item * > *exprs_added_to_group_by)
Run through the inner expressions and add them to the block's GROUP BY if not already present.
Definition: sql_resolver.cc:6850
bool transform_table_subquery_to_join_with_derived(THD *thd, Item_exists_subselect *subq_pred)
Replace a table subquery ([NOT] {IN, EXISTS}) with a join to a derived table.
Definition: sql_resolver.cc:5337
bool flatten_subqueries(THD *thd)
Convert semi-join subquery predicates into semi-join join nests.
Definition: sql_resolver.cc:3682
bool replace_subquery_in_expr(THD *thd, Item::Css_info *subquery, Table_ref *tr, Item **expr)
A minion of transform_scalar_subqueries_to_join_with_derived.
Definition: sql_resolver.cc:6488
size_t num_visible_fields() const
Definition: sql_resolver.cc:4802
ORDER * find_in_group_list(Item *item, int *rollup_level) const
Finds a group expression matching the given item, or nullptr if none.
Definition: sql_resolver.cc:4606
bool resolve_table_value_constructor_values(THD *thd)
Resolve the rows of a table value constructor and aggregate the type of each column across rows.
Definition: sql_resolver.cc:5213
bool merge_derived(THD *thd, Table_ref *derived_table)
Merge derived table into query block.
Definition: sql_resolver.cc:3319
bool setup_tables(THD *thd, Table_ref *tables, bool select_insert)
Resolve and prepare information about tables for one query block.
Definition: sql_resolver.cc:1232
bool supported_correlated_scalar_subquery(THD *thd, Item::Css_info *subquery, Item **lifted_where)
Called when the scalar subquery is correlated.
Definition: sql_resolver.cc:7836
bool replace_item_in_expression(Item **expr, bool was_hidden, Item::Item_replacement *info, Item_transformer transformer)
Minion of transform_grouped_to_derived.
Definition: sql_resolver.cc:5912
bool setup_order_final(THD *thd)
Do final setup of ORDER BY clause, after the query block is fully resolved.
Definition: sql_resolver.cc:4527
bool setup_counts_over_partitions(THD *thd, Table_ref *derived, Lifted_expressions_map *lifted_expressions, mem_root_deque< Item * > &exprs_added_to_group_by, uint hidden_fields)
Add all COUNT(0) to SELECT list of the derived table to be used for cardinality checking of the trans...
Definition: sql_resolver.cc:6754
bool nest_derived(THD *thd, Item *join_cond, mem_root_deque< Table_ref * > *join_list, Table_ref *new_derived_table)
Push the generated derived table to the correct location inside a join nest.
Definition: sql_resolver.cc:6640
bool decorrelate_derived_scalar_subquery_post(THD *thd, Table_ref *derived, Lifted_expressions_map *lifted_exprs, bool added_card_check, size_t added_window_card_checks)
See explanation in companion method decorrelate_derived_scalar_subquery_pre.
Definition: sql_resolver.cc:7474
bool allocate_grouping_sets(THD *thd)
Initializes the grouping set if the query block includes GROUP BY modifiers.
Definition: sql_resolver.cc:2607
bool setup_group(THD *thd)
Resolve and set up the GROUP BY list.
Definition: sql_resolver.cc:4573
Table_ref * synthesize_derived(THD *thd, Query_expression *unit, Item *join_cond, bool left_outer, bool use_inner_join)
Create a new Table_ref object for this query block, for either: 1) a derived table which will replace...
Definition: sql_resolver.cc:5699
bool decorrelate_derived_scalar_subquery_pre(THD *thd, Table_ref *derived, Item::Css_info *subquery, Item *lifted_where, Lifted_expressions_map *lifted_where_expressions, bool *added_card_check, size_t *added_window_card_checks)
We have a correlated scalar subquery, so we must do several things:
Definition: sql_resolver.cc:7147
bool push_conditions_to_derived_tables(THD *thd)
Pushes parts of the WHERE condition of this query block to materialized derived tables.
Definition: sql_resolver.cc:684
bool resolve_rollup(THD *thd)
Resolve items in SELECT list and ORDER BY list for rollup processing.
Definition: sql_resolver.cc:4941
bool transform_subquery_to_derived(THD *thd, Table_ref **out_tl, Query_expression *subs_query_expression, Item_subselect *subq, bool use_inner_join, bool reject_multiple_rows, Item::Css_info *subquery, Item *lifted_where_cond)
Converts a subquery to a derived table and inserts it into the FROM clause of the owning query block.
Definition: sql_resolver.cc:7581
bool build_sj_cond(THD *thd, NESTED_JOIN *nested_join, Query_block *subq_query_block, table_map outer_tables_map, Item **sj_cond, bool *simple_const)
Build semijoin condition for th query block.
Definition: sql_resolver.cc:2265
Item * resolve_rollup_item(THD *thd, Item *item)
Resolve an item (and its tree) for rollup processing by replacing items matching grouped expressions ...
Definition: sql_resolver.cc:4852
bool populate_grouping_sets(THD *thd)
Populates the grouping sets if the query block includes non-primitive grouping.
Definition: sql_resolver.cc:2655
bool is_row_count_valid_for_semi_join()
Check if the offset and limit are valid for a semijoin.
Definition: sql_resolver.cc:1403
bool add_joined_table(Table_ref *table)
Add a table to the current join list.
Definition: sql_parse.cc:6283
void set_lock_for_tables(thr_lock_type lock_type)
Set lock for all tables in current query block.
Definition: sql_parse.cc:6314
bool find_common_table_expr(THD *thd, Table_ident *table_id, Table_ref *tl, Parse_context *pc, bool *found)
Tries to match an identifier to the CTEs in scope; if matched, it modifies *table_name,...
Definition: sql_parse.cc:5697
Table_ref * end_nested_join()
End a nested join table list.
Definition: sql_parse.cc:6198
bool init_nested_join(THD *thd)
Initialize a new table list for a nested join.
Definition: sql_parse.cc:6171
Table_ref * nest_join(THD *thd, Query_block *select, Table_ref *embedding, mem_root_deque< Table_ref * > *jlist, size_t table_cnt, const char *legend)
Plumbing for nest_last_join, q.v.
Definition: sql_parse.cc:6225
Table_ref * add_table_to_list(THD *thd, Table_ident *table, const char *alias, ulong table_options, thr_lock_type flags=TL_UNLOCK, enum_mdl_type mdl_type=MDL_SHARED_READ, List< Index_hint > *hints=nullptr, List< String > *partition_names=nullptr, LEX_STRING *option=nullptr, Parse_context *pc=nullptr)
Add a table to list of used tables.
Definition: sql_parse.cc:5908
void set_lock_for_table(const Lock_descriptor &descriptor, Table_ref *table)
Definition: sql_parse.cc:6291
Table_ref * nest_last_join(THD *thd, size_t table_cnt=2)
Nest last join operations.
Definition: sql_parse.cc:6265
struct PSI_digest_locker PSI_digest_locker
Definition: psi_statement_bits.h:112
static int flags[50]
Definition: hp_test1.cc:40
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
Item *(Item::* Item_transformer)(uchar *arg)
Type for transformers used by Item::transform and Item::compile.
Definition: item.h:721
Subquery_strategy
Classes that represent predicates over table subqueries: [NOT] EXISTS, [NOT] IN, ANY/SOME and ALL.
Definition: item_subselect.h:419
constexpr const LEX_CSTRING EMPTY_CSTR
Definition: lex_string.h:48
constexpr const LEX_CSTRING NULL_CSTR
Definition: lex_string.h:47
A better implementation of the UNIX ctype(3) library.
Various macros useful for communicating with memory debuggers, such as Valgrind.
void TRASH(void *ptr, size_t length)
Put bad content in memory to be sure it will segfault if dereferenced.
Definition: memory_debugging.h:71
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
std::unique_ptr< T, Destroy_only< T > > unique_ptr_destroy_only
std::unique_ptr, but only destroying.
Definition: my_alloc.h:477
This file includes constants used by all storage engines.
my_off_t ha_rows
Definition: my_base.h:1141
Header for compiler-dependent features.
#define MY_ASSERT_UNREACHABLE()
Definition: my_compiler.h:78
#define DBUG_EXECUTE_IF(keyword, a1)
Definition: my_dbug.h:171
#define DBUG_PRINT(keyword, arglist)
Definition: my_dbug.h:181
#define DBUG_TRACE
Definition: my_dbug.h:146
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
uint8_t uint8
Definition: my_inttypes.h:63
unsigned char uchar
Definition: my_inttypes.h:52
long long int longlong
Definition: my_inttypes.h:55
#define MYF(v)
Definition: my_inttypes.h:97
uint32_t uint32
Definition: my_inttypes.h:67
void my_free(void *ptr)
Frees the memory pointed by the ptr.
Definition: my_memory.cc:81
enum_sql_command
Definition: my_sqlcommand.h:46
@ SQLCOM_UPDATE
Definition: my_sqlcommand.h:51
@ SQLCOM_LOAD
Definition: my_sqlcommand.h:77
@ SQLCOM_INSERT
Definition: my_sqlcommand.h:52
@ SQLCOM_INSERT_SELECT
Definition: my_sqlcommand.h:53
@ SQLCOM_REPLACE
Definition: my_sqlcommand.h:87
@ SQLCOM_UPDATE_MULTI
Definition: my_sqlcommand.h:122
@ SQLCOM_REPLACE_SELECT
Definition: my_sqlcommand.h:88
Common header for many mysys elements.
uint64_t nesting_map
Definition: my_table_map.h:31
uint64_t table_map
Definition: my_table_map.h:30
uint32 my_thread_id
Definition: my_thread_local.h:34
static bool backup
Definition: myisampack.cc:198
static bool column_names
Definition: mysql.cc:173
static const CHARSET_INFO * charset_info
Definition: mysql.cc:247
Common definition between mysql server & client.
char * octet2hex(char *to, const char *str, unsigned int len)
static char * where
Definition: mysqldump.cc:152
static bool create_options
Definition: mysqldump.cc:126
const char * collation
Definition: audit_api_message_emit.cc:184
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1081
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
Definition: buf0block_hint.cc:30
Definition: commit_order_queue.h:34
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
Container::const_iterator find(const Container &c, Value &&value)
Definition: generic.h:39
size_t size(const char *const c)
Definition: base64.h:46
Definition: options.cc:57
const char * db_name
Definition: rules_table_service.cc:55
std::basic_ostringstream< char, std::char_traits< char >, ut::allocator< char > > ostringstream
Specialization of basic_ostringstream which uses ut::allocator.
Definition: ut0new.h:2871
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2893
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2879
olap_type
Definition: olap.h:31
@ UNSPECIFIED_OLAP_TYPE
Definition: olap.h:31
enum_parsing_context
Names for different query parse tree parts.
Definition: parse_tree_node_base.h:61
@ CTX_NONE
Empty value.
Definition: parse_tree_node_base.h:62
#define UNCACHEABLE_DEPENDENT
Definition: parse_tree_node_base.h:50
enum_yes_no_unknown
Definition: parser_yystype.h:166
struct result result
Definition: result.h:34
Performance schema instrumentation interface.
#define SELECT_DISTINCT
Definition: query_options.h:52
#define OPTION_NO_CONST_TABLES
Definition: query_options.h:78
Query_term_type
This class hierarchy is used to represent SQL structures between <query expression> and <query specif...
Definition: query_term.h:89
@ QT_UNARY
Represents a query primary with parentesized query expression body with order by clause and/or limit/...
Definition: query_term.h:96
@ QT_EXCEPT
Definition: query_term.h:100
@ QT_UNION
Definition: query_term.h:101
@ QT_INTERSECT
Represents the three set operations.
Definition: query_term.h:99
@ QT_QUERY_BLOCK
Represents Query specification, table value constructor and explicit table.
Definition: query_term.h:92
Visit_leaves
Query term iterator template argument type: whether to visit leaf nodes.
Definition: query_term.h:107
@ VL_VISIT_LEAVES
Definition: query_term.h:107
Visit_order
Query term iterator template argument type: how to visit nodes in tree.
Definition: query_term.h:105
@ QTC_POST_ORDER
Definition: query_term.h:105
required string type
Definition: replication_group_member_actions.proto:34
repeated Action action
Definition: replication_group_member_actions.proto:43
"public" interface to sys_var - server configuration variables.
enum_var_type
Definition: set_var.h:92
enum_tx_isolation
Definition: handler.h:3186
@ ISO_REPEATABLE_READ
Definition: handler.h:3189
index_hint_type
Definition: table.h:1398
role_enum
Definition: sql_admin.h:255
my_lex_states
Definition: sql_chars.h:37
File containing constants that can be used throughout the server.
constexpr const uint8_t CONTEXT_ANALYSIS_ONLY_PREPARE
Don't evaluate this subquery during statement prepare even if it's a constant one.
Definition: sql_const.h:173
enum_walk
Enumeration for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:288
bool(Item::*)(unsigned char *) Item_processor
Processor type for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:306
constexpr const uint8_t CONTEXT_ANALYSIS_ONLY_VIEW
Special Query_block::prepare mode: changing of query is prohibited.
Definition: sql_const.h:181
enum_condition_context
Enumeration for Query_block::condition_context.
Definition: sql_const.h:312
Contains classes representing SQL-data change statements.
enum_duplicates
Definition: sql_data_change.h:48
bool walk_item(Item *item, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3524
#define IL_GTE_REPEATABLE
Definition: sql_lex.h:3084
void get_select_options_str(ulonglong options, std::string *str)
Definition: sql_lex.cc:5259
#define TRX_CACHE_EMPTY
Definition: sql_lex.h:3078
#define IL_LT_REPEATABLE
Definition: sql_lex.h:3082
void assert_consistent_hidden_flags(const mem_root_deque< Item * > &fields, Item *item, bool hidden)
In debug mode, verify that we're not adding an item twice to the fields list with inconsistent hidden...
Definition: sql_lex.h:4979
#define BINLOG_DIRECT_OFF
Definition: sql_lex.h:3075
#define BINLOG_DIRECT_ON
Definition: sql_lex.h:3072
bool is_invalid_string(const LEX_CSTRING &string_val, const CHARSET_INFO *charset_info)
(End of group GROUP_PARSER)
Definition: sql_lex.h:4926
bool accept_for_order(SQL_I_List< ORDER > orders, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3530
#define TRX_CACHE_NOT_EMPTY
Definition: sql_lex.h:3080
bool accept_for_join(mem_root_deque< Table_ref * > *tables, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3552
bool accept_table(Table_ref *t, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3560
enum_mdl_type
Type of metadata lock request.
Definition: sql_lexer_yacc_state.h:106
@ MDL_SHARED_READ
Definition: sql_lexer_yacc_state.h:169
static const Query_options options
Definition: sql_show_processlist.cc:69
Our own string classes, used pervasively throughout the executor.
size_t convert_to_printable(char *to, size_t to_len, const char *from, size_t from_len, const CHARSET_INFO *from_cs, size_t nbytes=0)
Convert string to printable ASCII string.
Definition: sql_string.cc:1025
bool validate_string(const CHARSET_INFO *cs, const char *str, size_t length, size_t *valid_length, bool *length_error)
Check if an input byte sequence is a valid character string of a given charset.
Definition: sql_string.cc:1132
case opt name
Definition: sslopt-case.h:29
#define STRING_WITH_LEN(X)
Definition: string_with_len.h:29
Access paths are a query planning structure that correspond 1:1 to iterators, in that an access path ...
Definition: access_path.h:213
Definition: m_ctype.h:421
const char * csname
Definition: m_ctype.h:426
Definition: handler.h:3791
Struct to hold information about the table that should be created.
Definition: handler.h:3202
Minion class under Collect_scalar_subquery_info ("Css").
Definition: item.h:2938
Definition: sql_lex.h:460
bool all
Definition: sql_lex.h:461
Structure to hold parameters for CHANGE REPLICATION SOURCE, START REPLICA, and STOP REPLICA.
Definition: sql_lex.h:353
void initialize()
Initializes everything to zero/NULL/empty.
Definition: sql_lex.cc:4999
enum LEX_SOURCE_INFO::@179 auto_position
uint port
Definition: sql_lex.h:362
enum LEX_SOURCE_INFO::@181 assign_gtids_to_anonymous_transactions_type
const char * channel
Definition: sql_lex.h:369
bool replica_until
Definition: sql_lex.h:375
enum LEX_SOURCE_INFO::@179 m_gtid_only
char * bind_addr
Definition: sql_lex.h:361
enum LEX_SOURCE_INFO::@179 retry_count_opt
char * network_namespace
Definition: sql_lex.h:361
char * ssl_crl
Definition: sql_lex.h:391
char * public_key_path
Definition: sql_lex.h:402
char * view_id
Definition: sql_lex.h:368
ulong relay_log_pos
Definition: sql_lex.h:404
char * tls_version
Definition: sql_lex.h:391
char * relay_log_name
Definition: sql_lex.h:403
@ LEX_MI_UNCHANGED
Definition: sql_lex.h:383
@ LEX_MI_DISABLE
Definition: sql_lex.h:384
@ LEX_MI_ENABLE
Definition: sql_lex.h:385
@ LEX_MI_ANONYMOUS_TO_GTID_UUID
Definition: sql_lex.h:444
@ LEX_MI_ANONYMOUS_TO_GTID_LOCAL
Definition: sql_lex.h:443
@ LEX_MI_ANONYMOUS_TO_GTID_UNCHANGED
Definition: sql_lex.h:441
@ LEX_MI_ANONYMOUS_TO_GTID_OFF
Definition: sql_lex.h:442
int sql_delay
Definition: sql_lex.h:364
float heartbeat_period
Definition: sql_lex.h:363
char * tls_ciphersuites_string
Definition: sql_lex.h:401
enum LEX_SOURCE_INFO::@179 m_source_connection_auto_failover
enum LEX_SOURCE_INFO::@178 gtid_until_condition
ulong server_id
Definition: sql_lex.h:366
ulong retry_count
Definition: sql_lex.h:366
enum LEX_SOURCE_INFO::@180 require_table_primary_key_check
Identifies what is the slave policy on primary keys in tables.
char * ssl_ca
Definition: sql_lex.h:390
ulonglong pos
Definition: sql_lex.h:365
uint connect_retry
Definition: sql_lex.h:362
LEX_SOURCE_INFO & operator=(const LEX_SOURCE_INFO &)
char * ssl_cert
Definition: sql_lex.h:390
Prealloced_array< ulong, 2 > repl_ignore_server_ids
Definition: sql_lex.h:407
char * ssl_key
Definition: sql_lex.h:390
void set_unspecified()
Sets all fields to their "unspecified" value.
Definition: sql_lex.cc:5036
char * user
Definition: sql_lex.h:361
int require_row_format
Flag indicating if row format should be enforced for this channel event stream.
Definition: sql_lex.h:422
@ UNTIL_SQL_AFTER_GTIDS
Definition: sql_lex.h:372
@ UNTIL_SQL_BEFORE_GTIDS
Definition: sql_lex.h:371
uint zstd_compression_level
Definition: sql_lex.h:406
char * log_file_name
Definition: sql_lex.h:361
enum_tls_ciphersuites
Definition: sql_lex.h:395
@ SPECIFIED_NULL
Definition: sql_lex.h:397
@ SPECIFIED_STRING
Definition: sql_lex.h:398
@ UNSPECIFIED
Definition: sql_lex.h:396
enum LEX_SOURCE_INFO::@179 ssl_verify_server_cert
char * password
Definition: sql_lex.h:361
const char * privilege_checks_hostname
Definition: sql_lex.h:417
char * host
Definition: sql_lex.h:361
enum LEX_SOURCE_INFO::@179 port_opt
char * compression_algorithm
Definition: sql_lex.h:405
enum LEX_SOURCE_INFO::@179 get_public_key
bool privilege_checks_none
Flag that is set to true whenever PRIVILEGE_CHECKS_USER is set to NULL as a part of a CHANGE REPLICAT...
Definition: sql_lex.h:412
char * ssl_cipher
Definition: sql_lex.h:390
enum enum_tls_ciphersuites tls_ciphersuites
Definition: sql_lex.h:400
enum LEX_SOURCE_INFO::@179 ssl
char * gtid
Definition: sql_lex.h:367
LEX_SOURCE_INFO()
Definition: sql_lex.h:358
bool until_after_gaps
Definition: sql_lex.h:374
enum LEX_SOURCE_INFO::@179 heartbeat_opt
LEX_SOURCE_INFO(const LEX_SOURCE_INFO &)
const char * assign_gtids_to_anonymous_transactions_manual_uuid
Definition: sql_lex.h:447
char * ssl_crlpath
Definition: sql_lex.h:391
bool for_channel
Definition: sql_lex.h:376
@ LEX_MI_PK_CHECK_OFF
Definition: sql_lex.h:436
@ LEX_MI_PK_CHECK_STREAM
Definition: sql_lex.h:434
@ LEX_MI_PK_CHECK_UNCHANGED
Definition: sql_lex.h:433
@ LEX_MI_PK_CHECK_ON
Definition: sql_lex.h:435
@ LEX_MI_PK_CHECK_GENERATE
Definition: sql_lex.h:437
enum LEX_SOURCE_INFO::@179 repl_ignore_server_ids_opt
char * ssl_capath
Definition: sql_lex.h:390
const char * privilege_checks_username
Username and hostname parts of the PRIVILEGE_CHECKS_USER, when it's set to a user.
Definition: sql_lex.h:417
The LEX object currently serves three different purposes:
Definition: sql_lex.h:3839
execute_only_in_secondary_reasons get_not_supported_in_primary_reason() const
Definition: sql_lex.h:4015
void set_uncacheable(Query_block *curr_query_block, uint8 cause)
Set the current query as uncacheable.
Definition: sql_lex.h:4476
LEX_USER * grant_user
Definition: sql_lex.h:3917
bool binlog_need_explicit_defaults_ts
Definition: sql_lex.h:4393
uint grant_tot_col
Definition: sql_lex.h:4155
LEX_STRING prepared_stmt_code
Definition: sql_lex.h:4219
const char * x509_issuer
Definition: sql_lex.h:3910
bool all_privileges
Definition: sql_lex.h:4227
bool is_exec_started() const
Definition: sql_lex.h:4307
bool use_only_table_context
During name resolution search only in the table list given by Name_resolution_context::first_name_res...
Definition: sql_lex.h:4378
bool ignore_unknown_user
refers to optional IGNORE UNKNOWN USER clause in REVOKE sql.
Definition: sql_lex.h:4185
std::vector< uint > reparse_derived_table_params_at
If currently re-parsing a condition that is being pushed down to a derived table, this has the positi...
Definition: sql_lex.h:4144
void restore_backup_query_tables_list(Query_tables_list *backup)
Definition: sql_lex.cc:4313
execute_only_in_secondary_reasons m_execute_only_in_secondary_engine_reason
Definition: sql_lex.h:3856
uint8 create_view_check
Definition: sql_lex.h:4166
Prealloced_array< plugin_ref, INITIAL_LEX_PLUGIN_LIST_SIZE > Plugins_array
Definition: sql_lex.h:3929
bool new_top_level_query()
Create top-level query expression and query block.
Definition: sql_lex.cc:775
bool need_correct_ident()
Definition: sql_lex.cc:3807
execute_only_in_hypergraph_reasons m_execute_only_in_hypergraph_reason
Definition: sql_lex.h:3864
bool can_execute_only_in_hypergraph_optimizer() const
Definition: sql_lex.h:4031
LEX_ALTER alter_password
Definition: sql_lex.h:3918
bool m_broken
see mark_broken()
Definition: sql_lex.h:4233
const char * ssl_cipher
Definition: sql_lex.h:3910
bool table_or_sp_used()
Definition: sql_lex.cc:4329
Query_block * new_set_operation_query(Query_block *curr_query_block)
Create query block and attach it to the current query expression.
Definition: sql_lex.cc:699
void first_lists_tables_same()
Definition: sql_lex.cc:4203
bool validate_use_in_old_optimizer()
Validates if a query can run with the old optimizer.
Definition: sql_lex.cc:5237
Secondary_engine_execution_context * m_secondary_engine_context
Context object used by secondary storage engines to store query state during optimization and executi...
Definition: sql_lex.h:4596
bool was_replication_command_executed() const
Definition: sql_lex.h:4630
LEX_CSTRING prepared_stmt_name
Definition: sql_lex.h:4214
List< Name_resolution_context > context_stack
Definition: sql_lex.h:4077
bool autocommit
Definition: sql_lex.h:4187
Table_ref * insert_table
Table being inserted into (may be a view)
Definition: sql_lex.h:3933
void destroy()
Destroy contained objects, but not the LEX object itself.
Definition: sql_lex.h:4406
Query_result * result
Definition: sql_lex.h:3913
void destroy_values_map()
Definition: sql_lex.h:3983
void set_was_replication_command_executed()
Definition: sql_lex.h:4634
void set_current_query_block(Query_block *select)
Definition: sql_lex.h:3877
uint start_transaction_opt
Definition: sql_lex.h:4163
void new_static_query(Query_expression *sel_query_expression, Query_block *select)
Create query expression and query block in existing memory objects.
Definition: sql_lex.cc:807
bool deny_window_function(Query_block *qb) const
We have detected the presence of an alias of a window function with a window on query block qb.
Definition: sql_lex.h:4341
HA_CHECK_OPT check_opt
Definition: sql_lex.h:4081
bool drop_if_exists
Definition: sql_lex.h:4172
Table_ref * unlink_first_table(bool *link_to_local)
Definition: sql_lex.cc:4153
bool is_metadata_used() const
Check if the current statement uses meta-data (uses a table or a stored routine).
Definition: sql_lex.h:4329
bool is_lex_started
Definition: sql_lex.h:4380
bool is_explain() const
Definition: sql_lex.h:3884
char * to_log
Definition: sql_lex.h:3909
bool no_write_to_binlog
Definition: sql_lex.h:4188
bool drop_temporary
Definition: sql_lex.h:4186
void insert_values_map(Item_field *f1, Field *f2)
Definition: sql_lex.h:3978
Plugins_array plugins
Definition: sql_lex.h:3930
List< LEX_USER > * default_roles
Definition: sql_lex.h:3952
bool m_has_udf
True if statement references UDF functions.
Definition: sql_lex.h:4203
void mark_broken(bool broken=true)
Certain permanent transformations (like in2exists), if they fail, may leave the LEX in an inconsisten...
Definition: sql_lex.h:4283
bool is_ignore() const
Definition: sql_lex.h:4207
Alter_info * alter_info
Definition: sql_lex.h:4212
const char * stmt_definition_end
Definition: sql_lex.h:4370
void set_exec_completed()
Definition: sql_lex.h:4320
List< LEX_CSTRING > dynamic_privileges
Definition: sql_lex.h:3951
ulonglong m_statement_options
Statement context for Query_block::make_active_options.
Definition: sql_lex.h:4253
List< LEX_COLUMN > columns
Definition: sql_lex.h:3950
void cleanup_after_one_table_open()
Definition: sql_lex.cc:4272
Query_expression * unit
Outer-most query expression.
Definition: sql_lex.h:3842
bool verbose
Definition: sql_lex.h:4188
enum_view_create_mode create_view_mode
Definition: sql_lex.h:4150
bool has_values_map() const
Definition: sql_lex.h:3995
Opt_hints_global * opt_hints_global
Definition: sql_lex.h:3925
bool make_sql_cmd(Parse_tree_root *parse_tree)
Uses parse_tree to instantiate an Sql_cmd object and assigns it to the Lex.
Definition: sql_lex.cc:5083
List< LEX_USER > users_list
Definition: sql_lex.h:3949
bool can_execute_only_in_secondary_engine() const
Definition: sql_lex.h:4002
List< Item_param > param_list
List of placeholders ('?') for parameters of a prepared statement.
Definition: sql_lex.h:3974
bool grant_if_exists
refers to optional IF EXISTS clause in REVOKE sql.
Definition: sql_lex.h:4178
dd::info_schema::Table_statistics m_IS_table_stats
IS schema queries read some dynamic table statistics from SE.
Definition: sql_lex.h:4581
LEX_RESET_REPLICA reset_replica_info
Definition: sql_lex.h:4088
enum enum_duplicates duplicates
Definition: sql_lex.h:4147
bool is_single_level_stmt()
check if the statement is a single-level join
Definition: sql_lex.h:4560
bool m_extended_show
Definition: sql_lex.h:4190
USER_RESOURCES mqh
Definition: sql_lex.h:4087
bool using_hypergraph_optimizer() const
Whether the currently-running statement should be prepared and executed with the hypergraph optimizer...
Definition: sql_lex.h:3895
bool only_view
Definition: sql_lex.h:4351
bool save_cmd_properties(THD *thd)
Definition: sql_lex.h:4502
sp_pcontext * sp_current_parsing_ctx
Current SP parsing context.
Definition: sql_lex.h:4248
bool will_contextualize
Used to inform the parser whether it should contextualize the parse tree.
Definition: sql_lex.h:4399
st_sp_chistics sp_chistics
Definition: sql_lex.h:4349
KEY_CREATE_INFO key_create_info
Definition: sql_lex.h:4083
enum enum_tx_isolation tx_isolation
Definition: sql_lex.h:4148
void set_sp_current_parsing_ctx(sp_pcontext *ctx)
Definition: sql_lex.h:4323
uint32 next_binlog_file_nr
Definition: sql_lex.h:4230
bool check_preparation_invalid(THD *thd)
Check whether preparation state for prepared statement is invalid.
Definition: sql_lex.cc:841
void set_execute_only_in_hypergraph_optimizer(bool execute_in_hypergraph_optimizer_param, execute_only_in_hypergraph_reasons reason)
Definition: sql_lex.h:4034
dd::info_schema::Tablespace_statistics m_IS_tablespace_stats
Definition: sql_lex.h:4582
const char * get_only_supported_in_hypergraph_reason_str() const
Definition: sql_lex.h:4042
sp_pcontext * get_sp_current_parsing_ctx()
Definition: sql_lex.h:4321
LEX_STRING binlog_stmt_arg
Argument of the BINLOG event statement.
Definition: sql_lex.h:3914
Query_block * new_query(Query_block *curr_query_block)
Create query expression object that contains one query block.
Definition: sql_lex.cc:640
THD * thd
Definition: sql_lex.h:3922
bool rewrite_required
Definition: sql_lex.h:4641
bool contains_plaintext_password
Definition: sql_lex.h:4228
LEX_STRING name
Definition: sql_lex.h:3907
uint8 create_view_algorithm
Definition: sql_lex.h:4165
LEX_SOURCE_INFO mi
Definition: sql_lex.h:4084
ulong max_execution_time
Definition: sql_lex.h:4387
void restore_cmd_properties()
Definition: sql_lex.h:4494
bool grant_privilege
Set to true when GRANT ... GRANT OPTION ... TO ... is used (vs.
Definition: sql_lex.h:4162
bool m_exec_completed
Set to true when execution is completed, ie optimization has been done and execution is successful or...
Definition: sql_lex.h:4243
LEX_STRING ident
Definition: sql_lex.h:3916
bool m_can_execute_only_in_secondary_engine
Definition: sql_lex.h:3854
ulonglong bulk_insert_row_cnt
Definition: sql_lex.h:3954
void set_has_udf()
Definition: sql_lex.h:4209
bool has_udf() const
Definition: sql_lex.h:4210
List< Item_func_set_user_var > set_var_list
Definition: sql_lex.h:3964
uint8 create_view_suid
Definition: sql_lex.h:4355
bool push_context(Name_resolution_context *context)
Definition: sql_lex.h:4534
void pop_context()
Definition: sql_lex.h:4538
bool m_was_replication_command_executed
Definition: sql_lex.h:4627
enum enum_yes_no_unknown tx_chain tx_release
Definition: sql_lex.h:4192
void clear_privileges()
Definition: sql_lex.cc:3602
LEX()
Definition: sql_lex.cc:3693
partition_info * part_info
Definition: sql_lex.h:3941
bool m_using_hypergraph_optimizer
Definition: sql_lex.h:3904
char * help_arg
Definition: sql_lex.h:3908
Server_options server_options
Definition: sql_lex.h:4086
bool copy_db_to(char const **p_db, size_t *p_db_length) const
This method should be called only during parsing.
Definition: sql_lex.cc:3838
enum_alter_user_attribute alter_user_attribute
Definition: sql_lex.h:3919
bool m_can_execute_only_in_hypergraph_optimizer
Definition: sql_lex.h:3863
std::map< Item_field *, Field * >::iterator end_values_map()
Definition: sql_lex.h:3999
List< Item > purge_value_list
Definition: sql_lex.h:3957
Query_block * current_query_block() const
Definition: sql_lex.h:3868
std::map< Item_field *, Field * > * insert_update_values_map
Definition: sql_lex.h:4061
bool ignore
Definition: sql_lex.h:4204
Name_resolution_context * current_context()
Definition: sql_lex.h:4546
enum SSL_type ssl_type
Definition: sql_lex.h:4146
bool is_explain_analyze
Definition: sql_lex.h:3885
HA_CREATE_INFO * create_info
Definition: sql_lex.h:4082
void set_using_hypergraph_optimizer(bool use_hypergraph)
Definition: sql_lex.h:3899
void assert_ok_set_current_query_block()
Definition: sql_lex.cc:386
Query_block * new_empty_query_block()
Create an empty query block within this LEX object.
Definition: sql_lex.cc:583
bool in_update_value_clause
Set to true while resolving values in ON DUPLICATE KEY UPDATE clause.
Definition: sql_lex.h:4382
Query_block * all_query_blocks_list
List of all query blocks.
Definition: sql_lex.h:3845
void release_plugins()
Definition: sql_lex.cc:542
uint reparse_common_table_expr_at
If currently re-parsing a CTE's definition, this is the offset in bytes of that definition in the ori...
Definition: sql_lex.h:4133
bool safe_to_cache_query
Whether this query will return the same answer every time, given unchanged data.
Definition: sql_lex.h:4199
sp_name * spname
Definition: sql_lex.h:4225
bool prepared_stmt_code_is_varref
Definition: sql_lex.h:4221
void set_ignore(bool ignore_param)
Definition: sql_lex.h:4208
my_thread_id show_profile_query_id
QUERY ID for SHOW PROFILE.
Definition: sql_lex.h:4153
List< set_var_base > var_list
Definition: sql_lex.h:3963
bool reparse_derived_table_condition
If currently re-parsing a condition which is pushed down to a derived table, this will be set to true...
Definition: sql_lex.h:4138
LEX_STRING alter_user_comment_text
Definition: sql_lex.h:3920
bool is_ps_or_view_context_analysis()
Definition: sql_lex.h:4454
Query_block * query_block
First query block.
Definition: sql_lex.h:3844
ulonglong statement_options()
Gets the options that have been set for this statement.
Definition: sql_lex.h:4263
bool which_check_option_applicable()
Definition: sql_lex.h:4517
void set_execute_only_in_secondary_engine(const bool execute_only_in_secondary_engine_param, execute_only_in_secondary_reasons reason)
Definition: sql_lex.h:4005
bool set_wild(LEX_STRING)
Definition: sql_lex.cc:4990
uint grant
Definition: sql_lex.h:4155
enum_keep_diagnostics keep_diagnostics
Definition: sql_lex.h:4229
bool is_rewrite_required()
Definition: sql_lex.h:4646
Table_ref * insert_table_leaf
Leaf table being inserted into (always a base table)
Definition: sql_lex.h:3935
LEX_USER * definer
Definition: sql_lex.h:3947
void set_rewrite_required()
Definition: sql_lex.h:4644
List< Item > kill_value_list
Definition: sql_lex.h:3960
const char * get_not_supported_in_primary_reason_str()
Definition: sql_lex.h:4020
uint replica_thd_opt
Definition: sql_lex.h:4163
void restore_properties_for_insert()
Definition: sql_lex.h:4496
void clear_values_map()
Definition: sql_lex.h:3990
void set_secondary_engine_execution_context(Secondary_engine_execution_context *context)
Sets the secondary engine execution context for this statement.
Definition: sql_lex.cc:5229
bool is_broken() const
Definition: sql_lex.h:4274
bool sp_lex_in_use
Definition: sql_lex.h:4226
List< LEX_STRING > prepared_stmt_params
Definition: sql_lex.h:4223
LEX_REPLICA_CONNECTION replica_connection
Definition: sql_lex.h:4085
Secondary_engine_execution_context * secondary_engine_execution_context() const
Gets the secondary engine execution context for this statement.
Definition: sql_lex.h:4602
st_parsing_options parsing_options
Definition: sql_lex.h:4211
int select_number
Number of query block (by EXPLAIN)
Definition: sql_lex.h:4164
void add_statement_options(ulonglong options)
Add options to values of m_statement_options.
Definition: sql_lex.h:4271
uint profile_options
Definition: sql_lex.h:4154
Query_expression * create_query_expr_and_block(THD *thd, Query_block *current_query_block, Item *where_clause, Item *having_clause, enum_parsing_context ctx)
Create query expression under current_query_block and a query block under the new query expression.
Definition: sql_lex.cc:593
nesting_map m_deny_window_func
Windowing functions are not allowed in HAVING - in contrast to grouped aggregate functions,...
Definition: sql_lex.h:4112
LEX_GRANT_AS grant_as
Definition: sql_lex.h:3921
String * wild
Definition: sql_lex.h:3912
bool expr_allows_subquery
Definition: sql_lex.h:4127
void reset()
Reset query context to initial state.
Definition: sql_lex.cc:409
bool m_exec_started
Set to true when execution has started (after parsing, tables opened and query preparation is complet...
Definition: sql_lex.h:4238
void clear_execution()
Clear execution state for a statement after it has been prepared or executed, and before it is (re-)e...
Definition: sql_lex.cc:554
bool locate_var_assignment(const Name_string &name)
Locate an assignment to a user variable with a given name, within statement.
Definition: sql_lex.cc:4346
Sql_cmd * m_sql_cmd
Definition: sql_lex.h:4119
execute_only_in_hypergraph_reasons get_only_supported_in_hypergraph_reason() const
Definition: sql_lex.h:4049
void reset_rewrite_required()
Definition: sql_lex.h:4645
LEX_STRING create_view_query_block
SELECT of CREATE VIEW statement.
Definition: sql_lex.h:3938
bool set_channel_name(LEX_CSTRING name={})
Set replication channel name.
Definition: sql_lex.cc:5102
bool accept(Select_lex_visitor *visitor)
Definition: sql_lex.cc:4986
void reset_exec_started()
Definition: sql_lex.h:4309
sp_head * sphead
Definition: sql_lex.h:4224
void reset_n_backup_query_tables_list(Query_tables_list *backup)
Definition: sql_lex.cc:4296
udf_func udf
Definition: sql_lex.h:4080
void set_trg_event_type_for_tables()
Set the initial purpose of this Table_ref object in the list of used tables.
Definition: sql_lex.cc:4018
void link_first_table_back(Table_ref *first, bool link_to_local)
Definition: sql_lex.cc:4239
const char * stmt_definition_begin
Intended to point to the next word after DEFINER-clause in the following statements:
Definition: sql_lex.h:4369
bool is_exec_completed() const
Check whether the statement has been executed (regardless of completion - successful or in error).
Definition: sql_lex.h:4319
enum enum_var_type option_type
Definition: sql_lex.h:4149
uint8 context_analysis_only
Definition: sql_lex.h:4171
bool can_use_merged()
check if command can use VIEW with MERGE algorithm (for top VIEWs)
Definition: sql_lex.cc:3731
bool can_not_use_merged()
Check if command can't use merged views in any part of command.
Definition: sql_lex.cc:3784
std::map< Item_field *, Field * >::iterator begin_values_map()
Definition: sql_lex.h:3996
bool m_subquery_to_derived_is_impossible
If true: during prepare, we did a subquery transformation (IN-to-EXISTS, SOME/ANY) that doesn't curre...
Definition: sql_lex.h:4117
void set_exec_started()
Definition: sql_lex.h:4308
Query_block * m_current_query_block
Definition: sql_lex.h:3848
Item_sum * in_sum_func
Definition: sql_lex.h:4079
virtual ~LEX()
Definition: sql_lex.cc:393
class Explain_format * explain_format
Definition: sql_lex.h:4384
void cleanup(bool full)
Definition: sql_lex.h:4299
nesting_map allow_sum_func
This field is used as a work field during resolving to validate the use of aggregate functions.
Definition: sql_lex.h:4101
const char * x509_subject
Definition: sql_lex.h:3910
friend bool lex_start(THD *thd)
Call lex_start() before every query that is to be prepared and executed.
Definition: sql_lex.cc:507
bool is_view_context_analysis()
Definition: sql_lex.h:4459
ulong type
Definition: sql_lex.h:4089
Helper singleton class used to track information needed to perform the transform of a correlated scal...
Definition: sql_resolver.cc:6701
Definition: thr_lock.h:99
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
void * Alloc(size_t length)
Allocate memory.
Definition: my_alloc.h:145
Definition: mysql_lex_string.h:40
const char * str
Definition: mysql_lex_string.h:41
size_t length
Definition: mysql_lex_string.h:42
Definition: mysql_lex_string.h:35
Bison "location" class.
Definition: parse_location.h:43
Definition: materialize_path_parameters.h:42
Struct NESTED_JOIN is used to represent how tables are connected through outer join operations and se...
Definition: nested_join.h:78
Instances of Name_resolution_context store the information necessary for name resolution of Items and...
Definition: item.h:415
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:420
State data storage for digest_start, digest_add_token.
Definition: sql_digest_stream.h:36
Definition: sql_lex.h:4877
Definition: sql_lex.h:3251
void reset()
Definition: sql_lex.cc:169
bool allows_select_into
Definition: sql_lex.h:3253
bool allows_variable
Definition: sql_lex.h:3252
st_parsing_options()
Definition: sql_lex.h:3255
Definition: sql_lex.h:2571
LEX_CSTRING comment
Definition: sql_lex.h:2572
enum enum_sp_data_access daccess
Definition: sql_lex.h:2575
bool detistic
Definition: sql_lex.h:2574
enum enum_sp_suid_behaviour suid
Definition: sql_lex.h:2573
LEX_CSTRING language
CREATE|ALTER ... LANGUAGE <language>
Definition: sql_lex.h:2576
Definition: sql_lex.h:2581
enum enum_trigger_event_type event
Definition: sql_lex.h:2583
LEX_CSTRING anchor_trigger_name
Trigger name referenced in the FOLLOWS/PRECEDES clause of the CREATE TRIGGER statement.
Definition: sql_lex.h:2594
enum enum_trigger_order_type ordering_clause
FOLLOWS or PRECEDES as specified in the CREATE TRIGGER statement.
Definition: sql_lex.h:2588
enum enum_trigger_action_time_type action_time
Definition: sql_lex.h:2582
Definition: sql_lex.h:2562
void reset()
Cleans slave connection info.
Definition: sql_lex.cc:177
char * user
Definition: sql_lex.h:2563
char * plugin_dir
Definition: sql_lex.h:2566
char * plugin_auth
Definition: sql_lex.h:2565
char * password
Definition: sql_lex.h:2564
Definition: sql_connect.h:41
thr_lock_type
Definition: thr_lock.h:51
@ TL_UNLOCK
Definition: thr_lock.h:53
@ TL_READ_DEFAULT
Definition: thr_lock.h:61
This file defines all base public constants related to triggers in MySQL.
enum_trigger_event_type
Constants to enumerate possible event types on which triggers can be fired.
Definition: trigger_def.h:42
enum_trigger_order_type
Possible trigger ordering clause values:
Definition: trigger_def.h:64
enum_trigger_action_time_type
Constants to enumerate possible timings when triggers can be fired.
Definition: trigger_def.h:52
Definition: lexer_yystype.h:33
Definition: parser_yystype.h:341
#define PSI_NOT_INSTRUMENTED
Definition: validate_password_imp.cc:42
SSL_type
Definition: violite.h:307
An adapter class to support iteration over an iterator of Item * (typically mem_root_deque<Item *>),...
auto VisibleFields(mem_root_deque< Item * > &fields)
Definition: visible_fields.h:112
int n
Definition: xcom_base.cc:509