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;
958 bool optimize(
THD *thd,
TABLE *materialize_destination,
bool create_iterators,
959 bool finalize_access_paths);
1361 ulong table_options,
1665 const char *prefix);
1752 void cleanup(
bool full)
override;
1780 assert(
join ==
nullptr);
1860 bool optimize(
THD *thd,
bool finalize_access_paths);
2245 bool top,
bool in_sj,
Item **new_conds,
2246 uint *changelog =
nullptr);
2252 Item **sj_cond,
bool *simple_const);
2258 Item *join_cond,
bool left_outer,
2259 bool use_inner_join);
2263 bool reject_multiple_rows,
2264 Item *join_condition,
2265 Item *lifted_where_cond);
2273 Item *selected_field_or_ref,
2274 const uint first_non_hidden);
2279 bool *selected_expr_added_to_group_by,
2284 size_t *added_window_card_checks);
2287 bool added_card_check,
size_t added_window_card_checks);
2336 Item **lifted_where);
2486 qt = down_cast<Query_term_unary *>(qt)->m_children[0];
2493 qt = down_cast<Query_term_unary *>(qt)->m_children[0];
2627 std::unique_ptr<malloc_unordered_map<std::string, Sroutine_hash_entry *>>
2680 *
this = std::move(*state);
2955 constexpr uint32_t shift =
2967 constexpr uint32_t shift =
3021 switch (accessed_table) {
3023 return "STMT_READS_TRANS_TABLE";
3026 return "STMT_READS_NON_TRANS_TABLE";
3029 return "STMT_READS_TEMP_TRANS_TABLE";
3032 return "STMT_READS_TEMP_NON_TRANS_TABLE";
3035 return "STMT_WRITES_TRANS_TABLE";
3038 return "STMT_WRITES_NON_TRANS_TABLE";
3041 return "STMT_WRITES_TEMP_TRANS_TABLE";
3044 return "STMT_WRITES_TEMP_NON_TRANS_TABLE";
3056#define BINLOG_DIRECT_ON \
3061#define BINLOG_DIRECT_OFF \
3066#define TRX_CACHE_EMPTY 0x33
3068#define TRX_CACHE_NOT_EMPTY 0xCC
3070#define IL_LT_REPEATABLE 0xAA
3072#define IL_GTE_REPEATABLE 0x55
3125 bool trx_cache_is_not_empty,
3126 uint tx_isolation) {
3127 bool unsafe =
false;
3129 if (in_multi_stmt_transaction_mode) {
3130 const uint condition =
3140 (
"RESULT %02X %02X %02X\n", condition,
3345 unsigned char yyGet() {
3347 const char c = *
m_ptr++;
3361 unsigned char yyPeek()
const {
3370 unsigned char yyPeekn(
int n)
const {
3514 const char *end_ptr);
3579 const char *alias)
const {
3994 const bool execute_only_in_secondary_engine_param,
3997 execute_only_in_secondary_engine_param;
4014 return "TABLESAMPLE";
4023 bool execute_in_hypergraph_optimizer_param,
4026 execute_in_hypergraph_optimizer_param;
4397 if (
unit ==
nullptr)
return;
4489 tr->restore_properties();
4530 bool copy_db_to(
char const **p_db,
size_t *p_db_length)
const;
4533 return copy_db_to(
const_cast<const char **
>(p_db), p_db_length);
4793 void reset(
const char *found_semicolon,
size_t length) {
4868 static void *
operator new(
size_t size)
noexcept {
4869 return (*THR_MALLOC)->Alloc(
size);
4872 const std::nothrow_t &arg
4873 [[maybe_unused]] = std::nothrow)
noexcept {
4876 static void operator delete(
void *ptr [[maybe_unused]],
4877 size_t size [[maybe_unused]]) {
4880 static void operator delete(
4881 void *,
MEM_ROOT *,
const std::nothrow_t &)
noexcept {
4922 &valid_len, &len_error)) {
4925 hexbuf, string_val.
str + valid_len,
4926 static_cast<uint
>(std::min<size_t>(string_val.
length - valid_len, 3)));
4947 std::string &invalid_sub_str) {
4952 &valid_len, &len_error)) {
4953 char printable_buff[32];
4955 printable_buff,
sizeof(printable_buff), string_val.
str + valid_len,
4956 static_cast<uint
>(std::min<size_t>(string_val.
length - valid_len, 3)),
4958 invalid_sub_str = printable_buff;
4971 Item *item [[maybe_unused]],
4972 bool hidden [[maybe_unused]]) {
4974 if (
std::find(fields.begin(), fields.end(), item) != fields.end()) {
4977 assert(item->hidden == hidden);
4989 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:4845
Common_table_expr_parser_state()
Definition: sql_lex.cc:1215
PT_subquery * result
Definition: sql_lex.h:4849
Utility RAII class to save/modify/restore the condition_context information of a query block.
Definition: sql_lex.h:2500
enum_condition_context saved_value
Definition: sql_lex.h:2522
~Condition_context()
Definition: sql_lex.h:2516
Query_block * select
Definition: sql_lex.h:2521
Condition_context(Query_block *select_ptr, enum_condition_context new_type=enum_condition_context::NEITHER)
Definition: sql_lex.h:2502
Parser state for Derived table's condition parser.
Definition: sql_lex.h:4856
Item * result
Definition: sql_lex.h:4860
Derived_expr_parser_state()
Definition: sql_lex.cc:1218
Definition: event_parse_data.h:44
Parser state for single expression parser (.frm/DD stuff)
Definition: sql_lex.h:4835
Expression_parser_state()
Definition: sql_lex.cc:1212
Item * result
Definition: sql_lex.h:4839
Parser state for generated column expression parser (.frm/DD stuff)
Definition: sql_lex.h:4825
Value_generator * result
Definition: sql_lex.h:4829
Gcol_expr_parser_state()
Definition: sql_lex.cc:1209
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:2760
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:2447
Definition: item_subselect.h:428
Definition: item_func.h:3414
Definition: item_func.h:3465
This class is used to implement operations like SET @variable or @variable:= expression.
Definition: item_func.h:3224
A wrapper Item that normally returns its parameter, but becomes NULL when processing rows for rollup.
Definition: item_func.h:1679
A wrapper Item that contains a number of aggregate items, one for each level of rollup (see Item_roll...
Definition: item_sum.h:2724
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:936
cond_result
Definition: item.h:998
@ COND_UNDEF
Definition: item.h:998
Definition: sql_optimizer.h:133
Definition: key_spec.h:67
Definition: sql_lex.h:3727
LEX_COLUMN(const String &x, const Access_bitmask &y)
Definition: sql_lex.h:3731
String column
Definition: sql_lex.h:3729
Access_bitmask rights
Definition: sql_lex.h:3730
Definition: sql_lex.h:3739
List< LEX_USER > * role_list
Definition: sql_lex.h:3748
void cleanup()
Definition: sql_lex.cc:5252
bool grant_as_used
Definition: sql_lex.h:3745
role_enum role_type
Definition: sql_lex.h:3746
LEX_USER * user
Definition: sql_lex.h:3747
LEX_GRANT_AS()
Definition: sql_lex.cc:5259
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:292
Global level hints.
Definition: opt_hints.h:350
Query block level hints.
Definition: opt_hints.h:372
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:4777
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:4806
Parser state for partition expression parser (.frm/DD stuff)
Definition: sql_lex.h:4815
Partition_expr_parser_state()
Definition: sql_lex.cc:1206
partition_info * result
Definition: sql_lex.h:4819
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:4639
~Prepare_error_tracker()
Definition: sql_lex.cc:139
THD *const thd
Definition: sql_lex.h:4645
Prepare_error_tracker(THD *thd_arg)
Definition: sql_lex.h:4641
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:1163
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:3342
void print_delete(const THD *thd, String *str, enum_query_type query_type)
Print detail of the DELETE statement.
Definition: sql_lex.cc:3122
void add_base_options(ulonglong options)
Add base options to a query block, also update active options.
Definition: sql_lex.h:1214
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:2117
void label_children() override
Set the correct value of Query_term::m_sibling_idx recursively for set operations.
Definition: sql_lex.h:1182
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:2383
void cleanup_all_joins()
Definition: sql_union.cc:2105
uint select_number
Query block number (used for EXPLAIN)
Definition: sql_lex.h:2050
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:2212
Query_term_type term_type() const override
Get the node tree type.
Definition: sql_lex.h:1177
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:3429
Item * where_cond() const
Definition: sql_lex.h:1189
bool is_grouped() const
Definition: sql_lex.h:1296
void print_insert_options(String *str)
Print INSERT options.
Definition: sql_lex.cc:3270
bool m_json_agg_func_used
Definition: sql_lex.h:2471
mem_root_deque< mem_root_deque< Item * > * > * row_value_list
The VALUES items of a table value constructor.
Definition: sql_lex.h:1923
bool is_dependent() const
Definition: sql_lex.h:1807
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:3481
mem_root_deque< Item * > * get_fields_list()
Definition: sql_lex.h:1386
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:1357
bool with_sum_func
True if contains or aggregates set functions.
Definition: sql_lex.h:2206
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:2456
bool is_explicitly_grouped() const
Definition: sql_lex.h:1272
Item * m_where_cond
Condition to be evaluated after all tables in a query block are joined.
Definition: sql_lex.h:2442
olap_type olap
Indicates whether this query block contains non-primitive grouping (such as ROLLUP).
Definition: sql_lex.h:2148
Item::cond_result having_value
Definition: sql_lex.h:2061
Item::cond_result cond_value
Saved values of the WHERE and HAVING clauses.
Definition: sql_lex.h:2060
bool setup_base_ref_items(THD *thd)
Setup the array containing references to base items.
Definition: sql_lex.cc:2584
uint get_in_sum_expr() const
Definition: sql_lex.h:1356
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:3383
bool group_fix_field
true when GROUP BY fix field called in processing of this query block
Definition: sql_lex.h:2199
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:3318
Resolve_place resolve_place
Indicates part of query being resolved.
Definition: sql_lex.h:2082
bool m_right_joins
True if query block has right joins.
Definition: sql_lex.h:2465
Query_block(MEM_ROOT *mem_root, Item *where, Item *having)
Construct and initialize Query_block object.
Definition: sql_lex.cc:2256
bool is_implicitly_grouped() const
Definition: sql_lex.h:1279
void add_subquery_transform_candidate(Item_exists_subselect *predicate)
Definition: sql_lex.h:1464
Item * m_having_cond
Condition to be evaluated on grouped rows after grouping.
Definition: sql_lex.h:2445
uint cond_count
Number of predicates after preparation.
Definition: sql_lex.h:2100
Query_result * m_query_result
Result of this query block.
Definition: sql_lex.h:2395
void cleanup(bool full) override
Cleanup this subtree (this Query_block and all nested Query_blockes and Query_expressions).
Definition: sql_union.cc:2076
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:2027
void print_hints(const THD *thd, String *str, enum_query_type query_type)
Print detail of Hints.
Definition: sql_lex.cc:3202
bool accept(Select_lex_visitor *visitor)
Accept function for SELECT and DELETE.
Definition: sql_lex.cc:3570
uint max_equal_elems
Maximal number of elements in multiple equalities.
Definition: sql_lex.h:2104
uint table_func_count
Number of table functions in this query block.
Definition: sql_lex.h:2136
Item ** qualify_cond_ref()
Definition: sql_lex.h:1196
Mem_root_array< Item_exists_subselect * > * sj_candidates
Pointer to collection of subqueries candidate for semi/antijoin conversion.
Definition: sql_lex.h:2374
bool having_fix_field
true when having fix field called in processing of this query block
Definition: sql_lex.h:2197
bool has_aj_nests
Definition: sql_lex.h:2464
uint hidden_items_from_optimization
Hidden items added during optimization.
Definition: sql_lex.h:2231
Query_block * link_next
Intrusive double-linked global list of query blocks.
Definition: sql_lex.h:2391
void invalidate()
Invalidate by nulling out pointers to other Query_expressions and Query_blockes.
Definition: sql_lex.cc:2576
Opt_hints_qb * opt_hints_qb
Query-block-level hints, for this query block.
Definition: sql_lex.h:1974
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:1179
Query_block ** link_prev
Definition: sql_lex.h:2392
uint with_wild
Number of wildcards used in the SELECT list.
Definition: sql_lex.h:2129
Name_resolution_context context
Context for name resolution for all column references except columns from joined tables.
Definition: sql_lex.h:1999
Item ** where_cond_ref()
Definition: sql_lex.h:1190
void make_active_options(ulonglong added_options, ulonglong removed_options)
Make active options from base options, supplied options and environment:
Definition: sql_lex.cc:2439
void set_empty_query()
Set query block as returning no data.
Definition: sql_lex.h:1779
Query_expression * slave
The first query expression contained within this query block.
Definition: sql_lex.h:2388
bool is_item_list_lookup
Definition: sql_lex.h:2194
void mark_as_dependent(Query_block *last, bool aggregate)
Mark all query blocks from this to 'last' as dependent.
Definition: sql_lex.cc:2475
Table_ref * leaf_tables
Points to first leaf table of query block.
Definition: sql_lex.h:2025
bool save_order_properties(THD *thd, SQL_I_List< ORDER > *list, Group_list_ptrs **list_ptrs)
Helper for save_properties()
Definition: sql_lex.cc:4367
Item_sum * inner_sum_func_list
Circular linked list of aggregate functions in nested query blocks.
Definition: sql_lex.h:2041
Item ** having_cond_ref()
Definition: sql_lex.h:1193
bool first_execution
This variable is required to ensure proper work of subqueries and stored procedures.
Definition: sql_lex.h:2183
Item * having_cond() const
Definition: sql_lex.h:1192
void print_delete_options(String *str)
Print DELETE options.
Definition: sql_lex.cc:3262
bool add_ftfunc_to_list(Item_func_match *func)
Definition: sql_lex.cc:2568
void print_having(const THD *thd, String *str, enum_query_type query_type)
Print list of items in HAVING clause.
Definition: sql_lex.cc:3465
bool walk(Item_processor processor, enum_walk walk, uchar *arg)
Definition: sql_lex.cc:4815
bool m_agg_func_used
Definition: sql_lex.h:2470
Query_expression * first_inner_query_expression() const
Definition: sql_lex.h:1258
uint materialized_derived_table_count
Number of materialized derived tables and views in this query block.
Definition: sql_lex.h:2120
List< Item_func_match > * ftfunc_list
A pointer to ftfunc_list_alloc, list of full text search functions.
Definition: sql_lex.h:1919
uint in_sum_expr
Parse context: is inside a set function if this is positive.
Definition: sql_lex.h:2066
enum_condition_context condition_context
Definition: sql_lex.h:2151
void set_right_joins()
Definition: sql_lex.h:1796
auto visible_fields()
Wrappers over fields / get_fields_list() that hide items where item->hidden, meant for range-based fo...
Definition: sql_lex.h:1390
uint n_sum_items
Number of Item_sum-derived objects in this SELECT.
Definition: sql_lex.h:2111
Query_block * outer_query_block() const
Definition: sql_lex.h:1259
void renumber(LEX *lex)
Renumber query blocks of contained query expressions.
Definition: sql_lex.cc:4541
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:2016
List< Window > m_windows
All windows defined on the select, both named and inlined.
Definition: sql_lex.h:1914
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:4886
uint leaf_table_count
Number of leaf tables in this query block.
Definition: sql_lex.h:2132
void set_having_cond(Item *cond)
Definition: sql_lex.h:1194
bool m_use_select_limit
If true, use select_limit to limit number of rows selected.
Definition: sql_lex.h:2219
bool has_limit() const
Definition: sql_lex.h:1330
void set_qualify_cond(Item *cond)
Definition: sql_lex.h:1197
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:4720
void destroy()
Destroy contained objects, in particular temporary tables which may have their own mem_roots.
Definition: sql_union.cc:2116
uint derived_table_count
Number of derived tables and views in this query block.
Definition: sql_lex.h:2134
bool is_ordered() const
Definition: sql_lex.h:1307
void destroy_tree() override
Destroy the query term tree structure.
Definition: sql_lex.h:1183
uint partitioned_table_count
Number of partitioned tables.
Definition: sql_lex.h:2122
Prealloced_array< Item_rollup_group_item *, 4 > rollup_group_items
Definition: sql_lex.h:1968
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:3363
bool json_agg_func_used() const
Definition: sql_lex.h:1789
bool get_optimizable_conditions(THD *thd, Item **new_where, Item **new_having)
Returns disposable copies of WHERE/HAVING/ON conditions.
Definition: sql_lex.cc:4618
uint between_count
Number of between predicates in where/having/on.
Definition: sql_lex.h:2102
Query_result * query_result() const
Definition: sql_lex.h:1199
void include_in_global(Query_block **plink)
Include query block into global list.
Definition: sql_lex.cc:4557
bool agg_func_used() const
Definition: sql_lex.h:1788
Resolve_place
Three fields used by semi-join transformations to know when semi-join is possible,...
Definition: sql_lex.h:2074
@ RESOLVE_HAVING
Definition: sql_lex.h:2078
@ RESOLVE_NONE
Definition: sql_lex.h:2075
@ RESOLVE_SELECT_LIST
Definition: sql_lex.h:2080
@ RESOLVE_QUALIFY
Definition: sql_lex.h:2079
@ RESOLVE_JOIN_NEST
Definition: sql_lex.h:2076
@ RESOLVE_CONDITION
Definition: sql_lex.h:2077
void include_chain_in_global(Query_block **start)
Include chain of query blocks into global list.
Definition: sql_lex.cc:4568
SQL_I_List< ORDER > order_list
ORDER BY clause.
Definition: sql_lex.h:1938
char * db
Definition: sql_lex.h:1976
List< Item_func_match > ftfunc_list_alloc
Definition: sql_lex.h:1920
static const char * get_type_str(enum_explain_type type)
Definition: sql_lex.h:1803
void remove_base_options(ulonglong options)
Remove base options from a query block.
Definition: sql_lex.h:1225
enum_explain_type type() const
Lookup for Query_block type.
Definition: sql_lex.cc:4438
Item * offset_limit
LIMIT ... OFFSET clause, NULL if no offset is given.
Definition: sql_lex.h:2032
void set_sj_candidates(Mem_root_array< Item_exists_subselect * > *sj_cand)
Definition: sql_lex.h:1461
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:3511
static const char * type_str[static_cast< int >(enum_explain_type::EXPLAIN_total)]
Definition: sql_lex.h:2480
Query_expression * master
The query expression containing this query block.
Definition: sql_lex.h:2386
bool has_subquery_transforms() const
Definition: sql_lex.h:1471
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:2048
int hidden_order_field_count
How many expressions are part of the order by but not select list.
Definition: sql_lex.h:2377
enum_parsing_context parsing_place
Parse context: indicates where the current expression is being parsed.
Definition: sql_lex.h:2064
void init_order()
Definition: sql_lex.h:1480
uint8 uncacheable
result of this query can't be cached, bit field, can be : UNCACHEABLE_DEPENDENT UNCACHEABLE_RAND UNCA...
Definition: sql_lex.h:2165
ulonglong m_base_options
Options assigned from parsing and throughout resolving, should not be modified after resolving is don...
Definition: sql_lex.h:2401
bool source_table_is_one_row() const
Definition: sql_lex.h:1811
uint in_window_expr
Parse context: is inside a window function if this is positive.
Definition: sql_lex.h:2068
void include_down(LEX *lex, Query_expression *outer)
Include query block inside a query expression.
Definition: sql_lex.cc:4492
void include_standalone(Query_expression *sel)
Include query block inside a query expression, but do not link.
Definition: sql_lex.cc:4529
Group_list_ptrs * group_list_ptrs
Definition: sql_lex.h:1951
uint saved_cond_count
Number of arguments of and/or/xor in where/having/on.
Definition: sql_lex.h:2098
Subquery_strategy subquery_strategy(const THD *thd) const
Returns which subquery execution strategies can be used for this query block.
Definition: sql_lex.cc:4641
Query_block * next_query_block() const
Definition: sql_lex.h:1260
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:2006
void include_neighbour(LEX *lex, Query_block *before)
Include a query block next to another query block.
Definition: sql_lex.cc:4510
bool is_table_value_constructor
If set, the query block is of the form VALUES row_list.
Definition: sql_lex.h:2154
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:1302
bool semijoin_enabled(const THD *thd) const
Returns whether semi-join is enabled for this query block.
Definition: sql_lex.cc:4667
Query_expression * master_query_expression() const
Definition: sql_lex.h:1257
void update_semijoin_strategies(THD *thd)
Update available semijoin strategies for semijoin nests.
Definition: sql_lex.cc:4672
uint select_n_having_items
Number of items in the select list, HAVING clause, QUALIFY clause and ORDER BY clause.
Definition: sql_lex.h:2096
Table_ref * get_table_list() const
Definition: sql_lex.h:1381
void print_update(const THD *thd, String *str, enum_query_type query_type)
Print detail of the UPDATE statement.
Definition: sql_lex.cc:3085
bool is_simple_query_block() const
Definition: sql_lex.h:1766
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:3284
bool has_tables() const
Definition: sql_lex.h:1269
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:2222
int hidden_group_field_count
Number of GROUP BY expressions added to all_fields.
Definition: sql_lex.h:2451
bool is_recursive() const
Definition: sql_lex.h:1336
int get_number_of_grouping_sets() const
Definition: sql_lex.h:2431
void print_windows(const THD *thd, String *str, enum_query_type query_type)
Print details of Windowing functions.
Definition: sql_lex.cc:3489
bool no_table_names_allowed
used for global order by
Definition: sql_lex.h:2227
bool validate_base_options(LEX *lex, ulonglong options) const
Validate base options for a query block.
Definition: sql_lex.cc:4757
void set_where_cond(Item *cond)
Definition: sql_lex.h:1191
Item * select_limit
LIMIT clause, NULL if no limit is given.
Definition: sql_lex.h:2030
ulonglong active_options() const
Definition: sql_lex.h:1238
bool save_properties(THD *thd)
Save properties of a prepared statement needed for repeated optimization.
Definition: sql_lex.cc:4390
Table_ref * embedding
table embedding the above list
Definition: sql_lex.h:2018
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:1992
bool m_was_implicitly_grouped
Used by nested scalar_to_derived transformations.
Definition: sql_lex.h:2189
bool has_sj_nests
True if query block has semi-join nests merged into it.
Definition: sql_lex.h:2463
Prealloced_array< Item_rollup_sum_switcher *, 4 > rollup_sums
Definition: sql_lex.h:1970
SQL_I_List< ORDER > group_list
GROUP BY clause.
Definition: sql_lex.h:1950
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:1929
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:2089
bool skip_local_transforms
True: skip local transformations during prepare() call (used by INSERT)
Definition: sql_lex.h:2192
void print_limit(const THD *thd, String *str, enum_query_type query_type) const
Definition: sql_lex.cc:2729
const char * get_type_str()
Lookup for a type string.
Definition: sql_lex.h:1802
Table_ref * resolve_nest
Used when resolving outer join condition.
Definition: sql_lex.h:2417
bool is_empty_query() const
Definition: sql_lex.h:1775
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:3061
mem_root_deque< Table_ref * > m_table_nest
Set of table references contained in outer-most join nest.
Definition: sql_lex.h:2014
bool set_context(Name_resolution_context *outer_context)
Assign a default name resolution object for this query block.
Definition: sql_lex.cc:2273
void set_json_agg_func_used(bool val)
Definition: sql_lex.h:1793
bool allow_merge_derived
Allow merge of immediate unnamed derived tables.
Definition: sql_lex.h:2468
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:2299
void print_select_options(String *str)
Print select options.
Definition: sql_lex.cc:3248
void set_query_result(Query_result *result)
Definition: sql_lex.h:1198
mem_root_deque< Table_ref * > sj_nests
List of semi-join nests generated for this query block.
Definition: sql_lex.h:1926
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:1983
bool add_item_to_list(Item *item)
Definition: sql_lex.cc:2559
void print(const THD *thd, String *str, enum_query_type query_type)
Definition: sql_lex.cc:3022
bool is_non_primitive_grouped() const
Definition: sql_lex.h:1286
bool exclude_from_table_unique_test
exclude this query block from unique_table() check
Definition: sql_lex.h:2225
bool sj_pullout_done
True when semi-join pull-out processing is complete.
Definition: sql_lex.h:2186
int nest_level
Nesting level of query block, outer-most query block has level 0, its subqueries have level 1,...
Definition: sql_lex.h:2142
const char * operator_string() const override
Get the node type description.
Definition: sql_lex.h:1178
Group_list_ptrs * order_list_ptrs
Definition: sql_lex.h:1939
uint n_child_sum_items
Number of Item_sum-derived objects in children and descendant SELECTs.
Definition: sql_lex.h:2113
bool save_cmd_properties(THD *thd)
Save prepared statement properties for a query block and underlying query expressions.
Definition: sql_lex.cc:4907
void set_agg_func_used(bool val)
Definition: sql_lex.h:1791
bool print_error(const THD *thd, String *str)
Print error.
Definition: sql_lex.cc:3227
Item * qualify_cond() const
Definition: sql_lex.h:1195
bool is_cacheable() const
Definition: sql_lex.h:1808
ha_rows get_offset(const THD *thd) const
Get offset for LIMIT.
Definition: sql_lex.cc:2538
void add_active_options(ulonglong options)
Adjust the active option set.
Definition: sql_lex.h:1235
ha_rows get_limit(const THD *thd) const
Get limit.
Definition: sql_lex.cc:2545
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:825
void set_base_options(ulonglong options_arg)
Set base options for a query block (and active options too)
Definition: sql_lex.h:1204
void print_update_options(String *str)
Print UPDATE options.
Definition: sql_lex.cc:3255
void print_insert(const THD *thd, String *str, enum_query_type query_type)
Print detail of the INSERT statement.
Definition: sql_lex.cc:3154
table_map all_tables_map() const
Definition: sql_lex.h:1253
bool right_joins() const
Definition: sql_lex.h:1795
JOIN * join
After optimization it is pointer to corresponding JOIN.
Definition: sql_lex.h:2012
ulonglong m_active_options
Active options.
Definition: sql_lex.h:2407
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:1964
void restore_cmd_properties()
Restore prepared statement properties for this query block and all underlying query expressions so th...
Definition: sql_lex.cc:4928
Item * m_qualify_cond
Condition to be evaluated after window functions.
Definition: sql_lex.h:2448
void cut_subtree()
Definition: sql_lex.h:1492
bool has_sj_candidates() const
Definition: sql_lex.h:1467
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:3411
bool m_empty_query
True if query block does not generate any rows before aggregation, determined during preparation (not...
Definition: sql_lex.h:2477
table_map outer_join
Bitmap of all inner tables from outer joins.
Definition: sql_lex.h:1993
size_t m_added_non_hidden_fields
Definition: sql_lex.h:1887
int m_num_grouping_sets
If the query block includes non-primitive grouping, then these modifiers are represented as grouping ...
Definition: sql_lex.h:2414
Query_block * next_select_in_list() const
Definition: sql_lex.h:1264
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:3444
auto visible_fields() const
Definition: sql_lex.h:1391
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:1324
bool is_distinct() const
Definition: sql_lex.h:1299
void set_tables_readonly()
Set associated tables as read_only, ie.
Definition: sql_lex.h:1246
mem_root_deque< Item * > fields
All expressions needed after join and filtering, ie., select list, group by list, having clause,...
Definition: sql_lex.h:1909
LEX * parent_lex
Reference to LEX that this query block belongs to.
Definition: sql_lex.h:1986
bool test_limit()
Definition: sql_lex.cc:2511
bool has_windows() const
Definition: sql_lex.h:1352
bool has_ft_funcs() const
Definition: sql_lex.h:1333
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:1042
bool merge_heuristic(const LEX *lex) const
True if heuristics suggest to merge this query expression.
Definition: sql_lex.cc:3952
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:1021
void change_to_access_path_without_in2exists(THD *thd)
Definition: sql_union.cc:2003
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
Query_expression(enum_parsing_context parsing_context)
Construct and initialize Query_expression object.
Definition: sql_lex.cc:2204
void set_explain_marker_from(THD *thd, const Query_expression *u)
Definition: sql_lex.cc:2531
void set_prepared()
Definition: sql_lex.h:1007
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:1995
void clear_root_access_path()
Definition: sql_lex.h:878
void set_explain_marker(THD *thd, enum_parsing_context m)
Definition: sql_lex.cc:2525
bool has_top_level_distinct() const
Definition: sql_lex.h:714
unique_ptr_destroy_only< RowIterator > release_root_iterator()
Definition: sql_lex.h:868
void exclude_tree()
Exclude subtree of current unit from tree of SELECTs.
Definition: sql_lex.cc:2384
Query_term_set_op * set_operation() const
Convenience method to avoid down casting, i.e.
Definition: sql_lex.h:654
bool optimize(THD *thd, TABLE *materialize_destination, bool create_iterators, 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:992
void set_executed()
Definition: sql_lex.h:1015
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:2519
Query_expression * next_query_expression() const
Definition: sql_lex.h:862
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
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:1508
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:1935
size_t num_visible_fields() const
Definition: sql_union.cc:1969
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:856
void exclude_level()
Exclude this unit and immediately contained query_block objects.
Definition: sql_lex.cc:2322
Query_block * first_query_block() const
Definition: sql_lex.h:859
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:701
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:954
Query_expression ** prev
Definition: sql_lex.h:632
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:902
bool has_any_limit() const
Checks if this query expression has limit defined.
Definition: sql_lex.cc:3886
bool ExecuteIteratorQuery(THD *thd)
Definition: sql_union.cc:1676
void set_optimized()
Definition: sql_lex.h:1011
void cleanup(bool full)
Cleanup this query expression object after preparation or one round of execution.
Definition: sql_union.cc:1844
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:1965
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:739
bool replace_items(Item_transformer t, uchar *arg)
Replace all targeted items using transformer provided and info in arg.
Definition: item_subselect.cc:3081
RowIterator * root_iterator() const
Definition: sql_lex.h:867
bool is_leaf_block(Query_block *qb)
Definition: sql_lex.cc:761
bool force_create_iterators(THD *thd)
Ensures that there are iterators created for the access paths created by optimize(),...
Definition: sql_union.cc:1186
Query_block * first_recursive
First query block (in this UNION) which references the CTE.
Definition: sql_lex.h:831
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:1900
void renumber_selects(LEX *lex)
Renumber query blocks of a query expression according to supplied LEX.
Definition: sql_lex.cc:3968
bool accept(Select_lex_visitor *visitor)
Definition: sql_lex.cc:3540
Query_result * query_result() const
Definition: sql_lex.h:865
ha_rows send_records
Definition: sql_lex.h:1077
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:4809
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:4801
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:1424
void print(const THD *thd, String *str, enum_query_type query_type)
Definition: sql_lex.cc:2717
Table_ref * derived_table
If this query expression is underlying of a derived table, the derived table.
Definition: sql_lex.h:826
void restore_cmd_properties()
Loop over all query blocks and restore information needed for optimization, including binding data fo...
Definition: sql_lex.cc:3991
bool finalize(THD *thd)
For any non-finalized query block, finalize it so that we are allowed to create iterators.
Definition: sql_union.cc:1174
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:3867
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:847
bool ClearForExecution()
Do everything that would be needed before running Init() on the root iterator.
Definition: sql_union.cc:1642
Item_subselect * item
Points to subquery if this query expression is used in one, otherwise NULL.
Definition: sql_lex.h:816
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:2424
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:676
PT_with_clause * m_with_clause
The WITH clause which is the first part of this query expression.
Definition: sql_lex.h:821
bool explain(THD *explain_thd, const THD *query_thd)
Explain query starting from this unit.
Definition: sql_union.cc:1574
bool is_mergeable() const
Return true if query expression can be merged into an outer query, based on technical constraints.
Definition: sql_lex.cc:3923
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:1034
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:841
bool is_optimized() const
Check state of optimization of the contained query expression.
Definition: sql_lex.h:1036
void set_query_result(Query_result *res)
Set new query result object for this query expression.
Definition: sql_lex.h:907
void include_down(LEX *lex, Query_block *outer)
Include a query expression below a query block.
Definition: sql_lex.cc:3899
void destroy()
Destroy contained objects, in particular temporary tables which may have their own mem_roots.
Definition: sql_union.cc:1875
mem_root_deque< Item * > * get_field_list()
Get field list for this query expression.
Definition: sql_union.cc:1984
bool execute(THD *thd)
Execute a query expression that may be a UNION and/or have an ordered result.
Definition: sql_union.cc:1819
bool clear_correlated_query_blocks()
Empties all correlated query blocks defined within the query expression; that is, correlated CTEs def...
Definition: sql_union.cc:1628
bool save_cmd_properties(THD *thd)
Save prepared statement properties for a query expression and underlying query blocks.
Definition: sql_lex.cc:3980
AccessPath * root_access_path() const
Definition: sql_lex.h:871
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:898
void clear_execution()
Clear execution state, needed before new execution of prepared statement.
Definition: sql_lex.h:1026
bool is_recursive() const
Definition: sql_lex.h:1094
Definition: query_result.h:181
Definition: sql_union.h:40
Definition: query_result.h:58
Definition: sql_lex.h:2597
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:3119
bool uses_stored_routines() const
true if the parsed tree contains references to stored procedures or functions, false otherwise
Definition: sql_lex.h:3166
void set_stmt_row_injection()
Flag the statement as a row injection.
Definition: sql_lex.h:2966
std::unique_ptr< malloc_unordered_map< std::string, Sroutine_hash_entry * > > sroutines
Definition: sql_lex.h:2628
void set_stmt_unsafe(enum_binlog_stmt_unsafe unsafe_type)
Flag the current (top-level) statement as unsafe.
Definition: sql_lex.h:2915
static const char * stmt_accessed_table_string(enum_stmt_accessed_table accessed_table)
Definition: sql_lex.h:3019
enum_binlog_stmt_type
Enumeration listing special types of statements.
Definition: sql_lex.h:3182
@ 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:3187
@ BINLOG_STMT_TYPE_COUNT
The last element of this enumeration type.
Definition: sql_lex.h:3190
Table_ref ** query_tables_last
Definition: sql_lex.h:2611
bool is_stmt_unsafe_with_mixed_mode() const
Definition: sql_lex.h:3172
void reset_query_tables_list(bool init)
Definition: sql_lex.cc:3635
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:2888
~Query_tables_list()=default
enum_sql_command sql_command
SQL command for this statement.
Definition: sql_lex.h:2607
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:2930
uint32 get_stmt_unsafe_flags() const
Return a binary combination of all unsafe warnings for the statement.
Definition: sql_lex.h:2943
void set_stmt_unsafe_with_mixed_mode()
Definition: sql_lex.h:3171
Query_tables_list()=default
bool is_stmt_unsafe() const
Determine if this statement is marked as unsafe.
Definition: sql_lex.h:2902
bool is_stmt_unsafe(enum_binlog_stmt_unsafe unsafe)
Definition: sql_lex.h:2904
uint table_count
Number of tables which were open by open_tables() and to be locked by lock_tables().
Definition: sql_lex.h:2667
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:3214
enum_stmt_accessed_table
Definition: sql_lex.h:2974
@ STMT_READS_TEMP_TRANS_TABLE
Definition: sql_lex.h:2989
@ STMT_WRITES_TEMP_TRANS_TABLE
Definition: sql_lex.h:3006
@ STMT_WRITES_TRANS_TABLE
Definition: sql_lex.h:2998
@ STMT_WRITES_TEMP_NON_TRANS_TABLE
Definition: sql_lex.h:3010
@ STMT_READS_TRANS_TABLE
Definition: sql_lex.h:2979
@ STMT_READS_TEMP_NON_TRANS_TABLE
Definition: sql_lex.h:2994
@ STMT_ACCESS_TABLE_COUNT
Definition: sql_lex.h:3015
@ STMT_READS_NON_TRANS_TABLE
Definition: sql_lex.h:2984
@ STMT_WRITES_NON_TRANS_TABLE
Definition: sql_lex.h:3002
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:3227
uint sroutines_list_own_elements
Definition: sql_lex.h:2640
@ START_SROUTINES_HASH_SIZE
Definition: sql_lex.h:2626
void mark_as_requiring_prelocking(Table_ref **tables_own_last)
Definition: sql_lex.h:2693
bool is_stmt_row_injection() const
Determine if this statement is a row injection.
Definition: sql_lex.h:2954
enum_lock_tables_state lock_tables_state
Definition: sql_lex.h:2655
void set_query_tables_list(Query_tables_list *state)
Definition: sql_lex.h:2679
void set_using_match()
Definition: sql_lex.h:3168
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:3096
SQL_I_List< Sroutine_hash_entry > sroutines_list
Definition: sql_lex.h:2638
void destroy_query_tables_list()
Definition: sql_lex.cc:3679
Sroutine_hash_entry ** sroutines_list_own_last
Definition: sql_lex.h:2639
bool using_match
It will be set true if 'MATCH () AGAINST' is used in the statement.
Definition: sql_lex.h:3219
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:3077
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:2894
enum_binlog_stmt_unsafe
All types of unsafe statements.
Definition: sql_lex.h:2723
@ BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION
Using some functions is unsafe (e.g., UUID).
Definition: sql_lex.h:2755
@ 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:2768
@ BINLOG_STMT_UNSAFE_COUNT
Definition: sql_lex.h:2882
@ BINLOG_STMT_UNSAFE_XA
XA transactions and statements.
Definition: sql_lex.h:2855
@ 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:2824
@ 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:2862
@ BINLOG_STMT_UNSAFE_NOWAIT
Definition: sql_lex.h:2850
@ BINLOG_STMT_UNSAFE_FULLTEXT_PLUGIN
Using a plugin is unsafe.
Definition: sql_lex.h:2848
@ 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:2837
@ 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:2843
@ BINLOG_STMT_UNSAFE_CREATE_SELECT_WITH_GIPK
Generating invisible primary key for a table created using CREATE TABLE... SELECT....
Definition: sql_lex.h:2879
@ BINLOG_STMT_UNSAFE_NONTRANS_AFTER_TRANS
Mixing transactional and non-transactional statements are unsafe if non-transactional reads or writes...
Definition: sql_lex.h:2762
@ BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE
Using most system variables is unsafe, because slave may run with different options than master.
Definition: sql_lex.h:2751
@ 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:2781
@ 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:2774
@ BINLOG_STMT_UNSAFE_AUTOINC_COLUMNS
Inserting into an autoincrement column in a stored routine is unsafe.
Definition: sql_lex.h:2742
@ BINLOG_STMT_UNSAFE_SKIP_LOCKED
Definition: sql_lex.h:2849
@ 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:2809
@ 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:2870
@ 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:2788
@ BINLOG_STMT_UNSAFE_LIMIT
SELECT..LIMIT is unsafe because the set of rows returned cannot be predicted.
Definition: sql_lex.h:2728
@ 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:2802
@ 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:2816
@ BINLOG_STMT_UNSAFE_UDF
Using a UDF (user-defined function) is unsafe.
Definition: sql_lex.h:2746
@ 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:2831
@ 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:2795
@ BINLOG_STMT_UNSAFE_SYSTEM_TABLE
Access to log tables is unsafe because slave and master probably log different things.
Definition: sql_lex.h:2733
Query_tables_list & operator=(Query_tables_list &&)=default
Table_ref * query_tables
Definition: sql_lex.h:2609
bool requires_prelocking()
Definition: sql_lex.h:2692
void chop_off_not_own_tables()
Definition: sql_lex.h:2700
Table_ref * first_not_own_table()
Definition: sql_lex.h:2697
Table_ref ** query_tables_own_last
Definition: sql_lex.h:2618
bool get_using_match()
Definition: sql_lex.h:3169
uint32 binlog_stmt_flags
Bit field indicating the type of statement.
Definition: sql_lex.h:3208
bool is_query_tables_locked() const
Definition: sql_lex.h:2656
enum_lock_tables_state
Locking state of tables in this particular statement.
Definition: sql_lex.h:2654
@ LTS_LOCKED
Definition: sql_lex.h:2654
@ LTS_NOT_LOCKED
Definition: sql_lex.h:2654
void add_to_query_tables(Table_ref *table)
Definition: sql_lex.h:2688
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:2535
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:2374
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:3292
Table_ref * next_leaf
Definition: table.h:3758
Used for storing information associated with generated column, default values generated from expressi...
Definition: field.h:483
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:2189
bool db_is_default_db(const char *db, size_t db_len, const THD *thd)
Definition: sql_lex.cc:2921
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:3756
enum_alter_user_attribute
Definition: sql_lex.h:282
void binlog_unsafe_map_init()
Definition: sql_lex.cc:5138
Bounds_checked_array< Item * > Ref_item_array
Definition: sql_lex.h:1132
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:2669
execute_only_in_hypergraph_reasons
Definition: sql_lex.h:3766
bool is_union() const
Definition: sql_lex.h:2483
uint binlog_unsafe_map[256]
Definition: sql_lex.cc:5043
void lex_end(LEX *lex)
Call this function after preparation and execution of a query.
Definition: sql_lex.cc:532
enum_sp_type to_sp_type(longlong val)
Definition: sql_lex.h:236
enum_explain_type
Query_block type enum.
Definition: sql_lex.h:1138
#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:2490
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:2158
bool is_lex_native_function(const LEX_STRING *name)
Check if name is a sql function.
Definition: sql_lex.cc:962
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:1363
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:947
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:508
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:3759
@ SUPPORTED_IN_PRIMARY
Definition: sql_lex.h:3757
@ CUBE
Definition: sql_lex.h:3758
@ ALTER_USER_COMMENT_NOT_USED
@ QUALIFY_CLAUSE
Definition: sql_lex.h:3768
@ SUPPORTED_IN_BOTH_OPTIMIZERS
Definition: sql_lex.h:3767
@ EXPLAIN_INTERSECT_RESULT
@ EXPLAIN_total
fake type, total number of all valid types
@ NO_COMMENT
Not parsing comments.
Definition: sql_lex.h:3250
@ DISCARD_COMMENT
Parsing comments that need to be discarded.
Definition: sql_lex.h:3266
@ PRESERVE_COMMENT
Parsing comments that need to be preserved.
Definition: sql_lex.h:3257
@ 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:4207
bool optimize(THD *thd, bool finalize_access_paths)
Optimize a query block and all inner query expressions.
Definition: sql_select.cc:2032
bool check_column_privileges(THD *thd)
Check privileges for all columns referenced from query block.
Definition: sql_select.cc:2075
bool check_privileges_for_subqueries(THD *thd)
Check privileges for column references in subqueries of a query block.
Definition: sql_select.cc:2180
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:7990
Item * single_visible_field() const
Definition: sql_resolver.cc:4771
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:3991
void delete_unused_merged_columns(mem_root_deque< Table_ref * > *tables)
Delete unused columns from merged tables.
Definition: sql_resolver.cc:5134
bool check_only_full_group_by(THD *thd)
Runs checks mandated by ONLY_FULL_GROUP_BY.
Definition: sql_resolver.cc:4474
void clear_sj_expressions(NESTED_JOIN *nested_join)
Remove semijoin condition for this query block.
Definition: sql_resolver.cc:2231
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:806
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:7458
bool record_join_nest_info(mem_root_deque< Table_ref * > *tables)
Record join nest info in the select block.
Definition: sql_resolver.cc:2008
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block)
Definition: sql_resolver.cc:2190
bool transform_grouped_to_derived(THD *thd, bool *break_off)
Minion of transform_scalar_subqueries_to_join_with_derived.
Definition: sql_resolver.cc:5981
bool decorrelate_derived_scalar_subquery_pre(THD *thd, Table_ref *derived, 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:7098
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:2555
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 *join_condition, 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:7490
bool setup_conds(THD *thd)
Resolve WHERE condition and join conditions.
Definition: sql_resolver.cc:1475
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:3928
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:1536
void remove_hidden_items()
Remove hidden items from select list.
Definition: sql_resolver.cc:5178
void remap_tables(THD *thd)
Re-map table numbers for all tables in a query block.
Definition: sql_resolver.cc:1311
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:3943
void propagate_unique_test_exclusion()
Propagate exclusion from table uniqueness test into subqueries.
Definition: sql_resolver.cc:3910
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:4757
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:2849
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:2176
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:8263
bool setup_wild(THD *thd)
Expand all '*' in list of expressions with the matching column references.
Definition: sql_resolver.cc:1418
bool add_inner_func_calls_to_select_list(THD *thd, Lifted_expressions_map *lifted_exprs)
Definition: sql_resolver.cc:6953
bool remove_aggregates(THD *thd, Query_block *select)
A minion of transform_grouped_to_derived.
Definition: sql_resolver.cc:5786
bool prepare_values(THD *thd)
Prepare a table value constructor query block for optimization.
Definition: sql_resolver.cc:726
bool resolve_placeholder_tables(THD *thd, bool apply_semijoin)
Resolve derived table, view, table function information for a query block.
Definition: sql_resolver.cc:1344
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:1725
void update_used_tables()
Update used tables information for all local expressions.
Definition: sql_resolver.cc:911
bool resolve_limits(THD *thd)
Resolve OFFSET and LIMIT clauses.
Definition: sql_resolver.cc:949
int group_list_size() const
Definition: sql_resolver.cc:4623
bool empty_order_list(Query_block *sl)
Empty the ORDER list.
Definition: sql_resolver.cc:4072
bool prepare(THD *thd, mem_root_deque< Item * > *insert_field_list)
Prepare query block for optimization.
Definition: sql_resolver.cc:179
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:1592
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:1188
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:6892
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:5017
bool field_list_is_empty() const
Definition: sql_resolver.cc:4787
Item ** add_hidden_item(Item *item)
Add item to the hidden part of select list.
Definition: sql_resolver.cc:5169
void merge_contexts(Query_block *inner)
Merge name resolution context objects of a subquery into its parent.
Definition: sql_resolver.cc:3960
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:6836
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:5318
bool flatten_subqueries(THD *thd)
Convert semi-join subquery predicates into semi-join join nests.
Definition: sql_resolver.cc:3675
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:6475
size_t num_visible_fields() const
Definition: sql_resolver.cc:4783
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:4587
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:5194
bool merge_derived(THD *thd, Table_ref *derived_table)
Merge derived table into query block.
Definition: sql_resolver.cc:3312
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:1225
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:7743
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:5903
bool setup_order_final(THD *thd)
Do final setup of ORDER BY clause, after the query block is fully resolved.
Definition: sql_resolver.cc:4508
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:6740
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:6626
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:7383
bool allocate_grouping_sets(THD *thd)
Initializes the grouping set if the query block includes GROUP BY modifiers.
Definition: sql_resolver.cc:2600
bool setup_group(THD *thd)
Resolve and set up the GROUP BY list.
Definition: sql_resolver.cc:4554
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:5690
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:677
bool resolve_rollup(THD *thd)
Resolve items in SELECT list and ORDER BY list for rollup processing.
Definition: sql_resolver.cc:4922
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:2258
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:4833
bool populate_grouping_sets(THD *thd)
Populates the grouping sets if the query block includes non-primitive grouping.
Definition: sql_resolver.cc:2648
bool is_row_count_valid_for_semi_join()
Check if the offset and limit are valid for a semijoin.
Definition: sql_resolver.cc:1396
bool add_joined_table(Table_ref *table)
Add a table to the current join list.
Definition: sql_parse.cc:6337
void set_lock_for_tables(thr_lock_type lock_type)
Set lock for all tables in current query block.
Definition: sql_parse.cc:6368
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:5751
Table_ref * end_nested_join()
End a nested join table list.
Definition: sql_parse.cc:6252
bool init_nested_join(THD *thd)
Initialize a new table list for a nested join.
Definition: sql_parse.cc:6225
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:6279
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:5962
void set_lock_for_table(const Lock_descriptor &descriptor, Table_ref *table)
Definition: sql_parse.cc:6345
Table_ref * nest_last_join(THD *thd, size_t table_cnt=2)
Nest last join operations.
Definition: sql_parse.cc:6319
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:727
Subquery_strategy
Classes that represent predicates over table subqueries: [NOT] EXISTS, [NOT] IN, ANY/SOME and ALL.
Definition: item_subselect.h:406
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:2870
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2892
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2878
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:91
enum_tx_isolation
Definition: handler.h:3186
@ ISO_REPEATABLE_READ
Definition: handler.h:3189
index_hint_type
Definition: table.h:1397
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:3526
#define IL_GTE_REPEATABLE
Definition: sql_lex.h:3068
void get_select_options_str(ulonglong options, std::string *str)
Definition: sql_lex.cc:5261
#define TRX_CACHE_EMPTY
Definition: sql_lex.h:3062
#define IL_LT_REPEATABLE
Definition: sql_lex.h:3066
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:4965
#define BINLOG_DIRECT_OFF
Definition: sql_lex.h:3059
#define BINLOG_DIRECT_ON
Definition: sql_lex.h:3056
bool is_invalid_string(const LEX_CSTRING &string_val, const CHARSET_INFO *charset_info)
(End of group GROUP_PARSER)
Definition: sql_lex.h:4912
bool accept_for_order(SQL_I_List< ORDER > orders, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3532
#define TRX_CACHE_NOT_EMPTY
Definition: sql_lex.h:3064
bool accept_for_join(mem_root_deque< Table_ref * > *tables, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3554
bool accept_table(Table_ref *t, Select_lex_visitor *visitor)
Definition: sql_lex.cc:3562
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:423
const char * csname
Definition: m_ctype.h:428
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.
Definition: item.h:2915
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:5001
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:5038
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:3823
execute_only_in_secondary_reasons get_not_supported_in_primary_reason() const
Definition: sql_lex.h:3999
void set_uncacheable(Query_block *curr_query_block, uint8 cause)
Set the current query as uncacheable.
Definition: sql_lex.h:4462
LEX_USER * grant_user
Definition: sql_lex.h:3901
bool binlog_need_explicit_defaults_ts
Definition: sql_lex.h:4379
uint grant_tot_col
Definition: sql_lex.h:4139
LEX_STRING prepared_stmt_code
Definition: sql_lex.h:4203
const char * x509_issuer
Definition: sql_lex.h:3894
bool all_privileges
Definition: sql_lex.h:4211
bool is_exec_started() const
Definition: sql_lex.h:4291
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:4364
bool ignore_unknown_user
refers to optional IGNORE UNKNOWN USER clause in REVOKE sql.
Definition: sql_lex.h:4169
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:4128
void restore_backup_query_tables_list(Query_tables_list *backup)
Definition: sql_lex.cc:4315
execute_only_in_secondary_reasons m_execute_only_in_secondary_engine_reason
Definition: sql_lex.h:3840
uint8 create_view_check
Definition: sql_lex.h:4150
Prealloced_array< plugin_ref, INITIAL_LEX_PLUGIN_LIST_SIZE > Plugins_array
Definition: sql_lex.h:3913
bool new_top_level_query()
Create top-level query expression and query block.
Definition: sql_lex.cc:776
bool need_correct_ident()
Definition: sql_lex.cc:3809
execute_only_in_hypergraph_reasons m_execute_only_in_hypergraph_reason
Definition: sql_lex.h:3848
bool can_execute_only_in_hypergraph_optimizer() const
Definition: sql_lex.h:4015
LEX_ALTER alter_password
Definition: sql_lex.h:3902
bool m_broken
see mark_broken()
Definition: sql_lex.h:4217
const char * ssl_cipher
Definition: sql_lex.h:3894
bool table_or_sp_used()
Definition: sql_lex.cc:4331
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:700
void first_lists_tables_same()
Definition: sql_lex.cc:4205
bool validate_use_in_old_optimizer()
Validates if a query can run with the old optimizer.
Definition: sql_lex.cc:5239
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:4582
bool was_replication_command_executed() const
Definition: sql_lex.h:4616
LEX_CSTRING prepared_stmt_name
Definition: sql_lex.h:4198
List< Name_resolution_context > context_stack
Definition: sql_lex.h:4061
bool autocommit
Definition: sql_lex.h:4171
Table_ref * insert_table
Table being inserted into (may be a view)
Definition: sql_lex.h:3917
void destroy()
Destroy contained objects, but not the LEX object itself.
Definition: sql_lex.h:4392
Query_result * result
Definition: sql_lex.h:3897
void destroy_values_map()
Definition: sql_lex.h:3967
void set_was_replication_command_executed()
Definition: sql_lex.h:4620
void set_current_query_block(Query_block *select)
Definition: sql_lex.h:3861
uint start_transaction_opt
Definition: sql_lex.h:4147
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:808
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:4325
HA_CHECK_OPT check_opt
Definition: sql_lex.h:4065
bool drop_if_exists
Definition: sql_lex.h:4156
Table_ref * unlink_first_table(bool *link_to_local)
Definition: sql_lex.cc:4155
bool is_metadata_used() const
Check if the current statement uses meta-data (uses a table or a stored routine).
Definition: sql_lex.h:4313
bool is_lex_started
Definition: sql_lex.h:4366
bool is_explain() const
Definition: sql_lex.h:3868
char * to_log
Definition: sql_lex.h:3893
bool no_write_to_binlog
Definition: sql_lex.h:4172
bool drop_temporary
Definition: sql_lex.h:4170
void insert_values_map(Item_field *f1, Field *f2)
Definition: sql_lex.h:3962
Plugins_array plugins
Definition: sql_lex.h:3914
List< LEX_USER > * default_roles
Definition: sql_lex.h:3936
bool m_has_udf
True if statement references UDF functions.
Definition: sql_lex.h:4187
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:4267
bool is_ignore() const
Definition: sql_lex.h:4191
Alter_info * alter_info
Definition: sql_lex.h:4196
const char * stmt_definition_end
Definition: sql_lex.h:4356
void set_exec_completed()
Definition: sql_lex.h:4304
List< LEX_CSTRING > dynamic_privileges
Definition: sql_lex.h:3935
ulonglong m_statement_options
Statement context for Query_block::make_active_options.
Definition: sql_lex.h:4237
List< LEX_COLUMN > columns
Definition: sql_lex.h:3934
void cleanup_after_one_table_open()
Definition: sql_lex.cc:4274
Query_expression * unit
Outer-most query expression.
Definition: sql_lex.h:3826
bool verbose
Definition: sql_lex.h:4172
enum_view_create_mode create_view_mode
Definition: sql_lex.h:4134
bool has_values_map() const
Definition: sql_lex.h:3979
Opt_hints_global * opt_hints_global
Definition: sql_lex.h:3909
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:5085
List< LEX_USER > users_list
Definition: sql_lex.h:3933
bool can_execute_only_in_secondary_engine() const
Definition: sql_lex.h:3986
List< Item_param > param_list
List of placeholders ('?') for parameters of a prepared statement.
Definition: sql_lex.h:3958
bool grant_if_exists
refers to optional IF EXISTS clause in REVOKE sql.
Definition: sql_lex.h:4162
dd::info_schema::Table_statistics m_IS_table_stats
IS schema queries read some dynamic table statistics from SE.
Definition: sql_lex.h:4567
LEX_RESET_REPLICA reset_replica_info
Definition: sql_lex.h:4072
enum enum_duplicates duplicates
Definition: sql_lex.h:4131
bool is_single_level_stmt()
check if the statement is a single-level join
Definition: sql_lex.h:4546
bool m_extended_show
Definition: sql_lex.h:4174
USER_RESOURCES mqh
Definition: sql_lex.h:4071
bool using_hypergraph_optimizer() const
Whether the currently-running statement should be prepared and executed with the hypergraph optimizer...
Definition: sql_lex.h:3879
bool only_view
Definition: sql_lex.h:4337
bool save_cmd_properties(THD *thd)
Definition: sql_lex.h:4488
sp_pcontext * sp_current_parsing_ctx
Current SP parsing context.
Definition: sql_lex.h:4232
bool will_contextualize
Used to inform the parser whether it should contextualize the parse tree.
Definition: sql_lex.h:4385
st_sp_chistics sp_chistics
Definition: sql_lex.h:4333
KEY_CREATE_INFO key_create_info
Definition: sql_lex.h:4067
enum enum_tx_isolation tx_isolation
Definition: sql_lex.h:4132
void set_sp_current_parsing_ctx(sp_pcontext *ctx)
Definition: sql_lex.h:4307
uint32 next_binlog_file_nr
Definition: sql_lex.h:4214
bool check_preparation_invalid(THD *thd)
Check whether preparation state for prepared statement is invalid.
Definition: sql_lex.cc:842
void set_execute_only_in_hypergraph_optimizer(bool execute_in_hypergraph_optimizer_param, execute_only_in_hypergraph_reasons reason)
Definition: sql_lex.h:4018
dd::info_schema::Tablespace_statistics m_IS_tablespace_stats
Definition: sql_lex.h:4568
const char * get_only_supported_in_hypergraph_reason_str() const
Definition: sql_lex.h:4026
sp_pcontext * get_sp_current_parsing_ctx()
Definition: sql_lex.h:4305
LEX_STRING binlog_stmt_arg
Argument of the BINLOG event statement.
Definition: sql_lex.h:3898
Query_block * new_query(Query_block *curr_query_block)
Create query expression object that contains one query block.
Definition: sql_lex.cc:641
THD * thd
Definition: sql_lex.h:3906
bool rewrite_required
Definition: sql_lex.h:4627
bool contains_plaintext_password
Definition: sql_lex.h:4212
LEX_STRING name
Definition: sql_lex.h:3891
uint8 create_view_algorithm
Definition: sql_lex.h:4149
LEX_SOURCE_INFO mi
Definition: sql_lex.h:4068
ulong max_execution_time
Definition: sql_lex.h:4373
void restore_cmd_properties()
Definition: sql_lex.h:4480
bool grant_privilege
Set to true when GRANT ... GRANT OPTION ... TO ... is used (vs.
Definition: sql_lex.h:4146
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:4227
LEX_STRING ident
Definition: sql_lex.h:3900
bool m_can_execute_only_in_secondary_engine
Definition: sql_lex.h:3838
ulonglong bulk_insert_row_cnt
Definition: sql_lex.h:3938
void set_has_udf()
Definition: sql_lex.h:4193
bool has_udf() const
Definition: sql_lex.h:4194
List< Item_func_set_user_var > set_var_list
Definition: sql_lex.h:3948
uint8 create_view_suid
Definition: sql_lex.h:4341
bool push_context(Name_resolution_context *context)
Definition: sql_lex.h:4520
void pop_context()
Definition: sql_lex.h:4524
bool m_was_replication_command_executed
Definition: sql_lex.h:4613
enum enum_yes_no_unknown tx_chain tx_release
Definition: sql_lex.h:4176
void clear_privileges()
Definition: sql_lex.cc:3604
LEX()
Definition: sql_lex.cc:3695
partition_info * part_info
Definition: sql_lex.h:3925
bool m_using_hypergraph_optimizer
Definition: sql_lex.h:3888
char * help_arg
Definition: sql_lex.h:3892
Server_options server_options
Definition: sql_lex.h:4070
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:3840
enum_alter_user_attribute alter_user_attribute
Definition: sql_lex.h:3903
bool m_can_execute_only_in_hypergraph_optimizer
Definition: sql_lex.h:3847
std::map< Item_field *, Field * >::iterator end_values_map()
Definition: sql_lex.h:3983
List< Item > purge_value_list
Definition: sql_lex.h:3941
Query_block * current_query_block() const
Definition: sql_lex.h:3852
std::map< Item_field *, Field * > * insert_update_values_map
Definition: sql_lex.h:4045
bool ignore
Definition: sql_lex.h:4188
Name_resolution_context * current_context()
Definition: sql_lex.h:4532
enum SSL_type ssl_type
Definition: sql_lex.h:4130
bool is_explain_analyze
Definition: sql_lex.h:3869
HA_CREATE_INFO * create_info
Definition: sql_lex.h:4066
void set_using_hypergraph_optimizer(bool use_hypergraph)
Definition: sql_lex.h:3883
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:584
bool in_update_value_clause
Set to true while resolving values in ON DUPLICATE KEY UPDATE clause.
Definition: sql_lex.h:4368
Query_block * all_query_blocks_list
List of all query blocks.
Definition: sql_lex.h:3829
void release_plugins()
Definition: sql_lex.cc:543
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:4117
Event_parse_data * event_parse_data
Definition: sql_lex.h:4335
bool safe_to_cache_query
Whether this query will return the same answer every time, given unchanged data.
Definition: sql_lex.h:4183
sp_name * spname
Definition: sql_lex.h:4209
bool prepared_stmt_code_is_varref
Definition: sql_lex.h:4205
void set_ignore(bool ignore_param)
Definition: sql_lex.h:4192
my_thread_id show_profile_query_id
QUERY ID for SHOW PROFILE.
Definition: sql_lex.h:4137
List< set_var_base > var_list
Definition: sql_lex.h:3947
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:4122
LEX_STRING alter_user_comment_text
Definition: sql_lex.h:3904
bool is_ps_or_view_context_analysis()
Definition: sql_lex.h:4440
Query_block * query_block
First query block.
Definition: sql_lex.h:3828
ulonglong statement_options()
Gets the options that have been set for this statement.
Definition: sql_lex.h:4247
bool which_check_option_applicable()
Definition: sql_lex.h:4503
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:3989
bool set_wild(LEX_STRING)
Definition: sql_lex.cc:4992
uint grant
Definition: sql_lex.h:4139
enum_keep_diagnostics keep_diagnostics
Definition: sql_lex.h:4213
bool is_rewrite_required()
Definition: sql_lex.h:4632
Table_ref * insert_table_leaf
Leaf table being inserted into (always a base table)
Definition: sql_lex.h:3919
LEX_USER * definer
Definition: sql_lex.h:3931
void set_rewrite_required()
Definition: sql_lex.h:4630
List< Item > kill_value_list
Definition: sql_lex.h:3944
const char * get_not_supported_in_primary_reason_str()
Definition: sql_lex.h:4004
uint replica_thd_opt
Definition: sql_lex.h:4147
void restore_properties_for_insert()
Definition: sql_lex.h:4482
void clear_values_map()
Definition: sql_lex.h:3974
void set_secondary_engine_execution_context(Secondary_engine_execution_context *context)
Sets the secondary engine execution context for this statement.
Definition: sql_lex.cc:5231
bool is_broken() const
Definition: sql_lex.h:4258
bool sp_lex_in_use
Definition: sql_lex.h:4210
List< LEX_STRING > prepared_stmt_params
Definition: sql_lex.h:4207
LEX_REPLICA_CONNECTION replica_connection
Definition: sql_lex.h:4069
Secondary_engine_execution_context * secondary_engine_execution_context() const
Gets the secondary engine execution context for this statement.
Definition: sql_lex.h:4588
st_parsing_options parsing_options
Definition: sql_lex.h:4195
int select_number
Number of query block (by EXPLAIN)
Definition: sql_lex.h:4148
void add_statement_options(ulonglong options)
Add options to values of m_statement_options.
Definition: sql_lex.h:4255
uint profile_options
Definition: sql_lex.h:4138
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:594
nesting_map m_deny_window_func
Windowing functions are not allowed in HAVING - in contrast to grouped aggregate functions,...
Definition: sql_lex.h:4096
LEX_GRANT_AS grant_as
Definition: sql_lex.h:3905
String * wild
Definition: sql_lex.h:3896
bool expr_allows_subquery
Definition: sql_lex.h:4111
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:4222
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:555
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:4348
Sql_cmd * m_sql_cmd
Definition: sql_lex.h:4103
execute_only_in_hypergraph_reasons get_only_supported_in_hypergraph_reason() const
Definition: sql_lex.h:4033
void reset_rewrite_required()
Definition: sql_lex.h:4631
LEX_STRING create_view_query_block
SELECT of CREATE VIEW statement.
Definition: sql_lex.h:3922
bool set_channel_name(LEX_CSTRING name={})
Set replication channel name.
Definition: sql_lex.cc:5104
bool accept(Select_lex_visitor *visitor)
Definition: sql_lex.cc:4988
void reset_exec_started()
Definition: sql_lex.h:4293
sp_head * sphead
Definition: sql_lex.h:4208
void reset_n_backup_query_tables_list(Query_tables_list *backup)
Definition: sql_lex.cc:4298
udf_func udf
Definition: sql_lex.h:4064
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:4020
void link_first_table_back(Table_ref *first, bool link_to_local)
Definition: sql_lex.cc:4241
const char * stmt_definition_begin
Intended to point to the next word after DEFINER-clause in the following statements:
Definition: sql_lex.h:4355
bool is_exec_completed() const
Check whether the statement has been executed (regardless of completion - successful or in error).
Definition: sql_lex.h:4303
enum enum_var_type option_type
Definition: sql_lex.h:4133
uint8 context_analysis_only
Definition: sql_lex.h:4155
bool can_use_merged()
check if command can use VIEW with MERGE algorithm (for top VIEWs)
Definition: sql_lex.cc:3733
bool can_not_use_merged()
Check if command can't use merged views in any part of command.
Definition: sql_lex.cc:3786
std::map< Item_field *, Field * >::iterator begin_values_map()
Definition: sql_lex.h:3980
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:4101
void set_exec_started()
Definition: sql_lex.h:4292
Query_block * m_current_query_block
Definition: sql_lex.h:3832
Item_sum * in_sum_func
Definition: sql_lex.h:4063
virtual ~LEX()
Definition: sql_lex.cc:393
class Explain_format * explain_format
Definition: sql_lex.h:4370
void cleanup(bool full)
Definition: sql_lex.h:4283
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:4085
const char * x509_subject
Definition: sql_lex.h:3894
friend bool lex_start(THD *thd)
Call lex_start() before every query that is to be prepared and executed.
Definition: sql_lex.cc:508
bool is_view_context_analysis()
Definition: sql_lex.h:4445
ulong type
Definition: sql_lex.h:4073
Helper singleton class used to track information needed to perform the transform of a correlated scal...
Definition: sql_resolver.cc:6687
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
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:4863
Definition: sql_lex.h:3235
void reset()
Definition: sql_lex.cc:169
bool allows_select_into
Definition: sql_lex.h:3237
bool allows_variable
Definition: sql_lex.h:3236
st_parsing_options()
Definition: sql_lex.h:3239
Definition: sql_lex.h:2555
LEX_CSTRING comment
Definition: sql_lex.h:2556
enum enum_sp_data_access daccess
Definition: sql_lex.h:2559
bool detistic
Definition: sql_lex.h:2558
enum enum_sp_suid_behaviour suid
Definition: sql_lex.h:2557
LEX_CSTRING language
CREATE|ALTER ... LANGUAGE <language>
Definition: sql_lex.h:2560
Definition: sql_lex.h:2565
enum enum_trigger_event_type event
Definition: sql_lex.h:2567
LEX_CSTRING anchor_trigger_name
Trigger name referenced in the FOLLOWS/PRECEDES clause of the CREATE TRIGGER statement.
Definition: sql_lex.h:2578
enum enum_trigger_order_type ordering_clause
FOLLOWS or PRECEDES as specified in the CREATE TRIGGER statement.
Definition: sql_lex.h:2572
enum enum_trigger_action_time_type action_time
Definition: sql_lex.h:2566
Definition: sql_lex.h:2546
void reset()
Cleans slave connection info.
Definition: sql_lex.cc:177
char * user
Definition: sql_lex.h:2547
char * plugin_dir
Definition: sql_lex.h:2550
char * plugin_auth
Definition: sql_lex.h:2549
char * password
Definition: sql_lex.h:2548
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