1#ifndef ITEM_SUBSELECT_INCLUDED
2#define ITEM_SUBSELECT_INCLUDED
238 pointer_cast<Check_function_as_value_generator_parameters *>(args);
246 std::vector<Item_subselect *>
list;
250 for (
auto sq :
list) {
251 if (sq->unit == candidate)
return true;
291 void reset()
override;
321 return reinterpret_cast<Item *
>(
row[i]);
377 bool max,
bool ignore_nulls);
901 in_predicate,
nullptr,
nullptr),
Abstract factory interface for creating comparison predicates.
Definition: item_cmpfunc.h:525
ALL/ANY/SOME subselect.
Definition: item_subselect.h:715
Item_allany_subselect(Item *left_expr, chooser_compare_func_creator fc, Query_block *select, bool all)
Definition: item_subselect.cc:1490
Comp_creator * func
Definition: item_subselect.h:718
bool select_transformer(THD *thd, Query_block *select) override
Definition: item_subselect.cc:2722
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_subselect.cc:2730
chooser_compare_func_creator func_creator
Definition: item_subselect.h:717
bool all
Definition: item_subselect.h:719
subs_type substype() const override
Definition: item_subselect.h:725
Definition: item_subselect.h:417
enum_condition_context outer_condition_context
Used by the transformation to derived table.
Definition: item_subselect.h:430
void apply_is_true() override
Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the s...
Definition: item_subselect.h:486
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_subselect.cc:1504
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_subselect.h:500
String * val_str(String *) override
Return the result of EXISTS as a string value.
Definition: item_subselect.cc:1583
Item_exists_subselect()
Definition: item_subselect.h:451
double val_real() override
Definition: item_subselect.cc:1569
bool get_time(MYSQL_TIME *ltime) override
Definition: item_subselect.h:503
bool implicit_is_op
True if the IS TRUE/FALSE wasn't explicit in the query.
Definition: item_subselect.h:483
Item * truth_transformer(THD *, enum Bool_test test) override
Informs an item that it is wrapped in a truth test, in case it wants to transforms itself to implemen...
Definition: item_subselect.cc:1400
longlong val_int() override
Definition: item_subselect.cc:1571
Subquery_strategy strategy
Execution strategy chosen for this Item.
Definition: item_subselect.h:428
bool val_bool() override
Definition: item_subselect.cc:1607
int sj_convert_priority
Priority of this predicate in the convert-to-semi-join-nest process.
Definition: item_subselect.h:426
void reset() override
Definition: item_subselect.h:463
bool value
value of this item (boolean: exists/not-exists)
Definition: item_subselect.h:422
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_subselect.cc:1342
bool can_do_aj
True if the Item has decided that it can do antijoin.
Definition: item_subselect.h:493
bool with_is_op() const
Definition: item_subselect.h:471
enum Bool_test value_transform
Definition: item_subselect.h:470
void notify_removal() override
Called when an item has been removed, can be used to notify external objects about the removal,...
Definition: item_subselect.h:455
subs_type substype() const override
Definition: item_subselect.h:461
Item_subselect super
Definition: item_subselect.h:418
bool translate(bool &null_v, bool v)
Translates the value of the naked EXISTS to a value taking into account the optional NULL and IS [NOT...
Definition: item_subselect.cc:1363
bool is_bool_func() const override
Definition: item_subselect.h:462
Table_ref * embedding_join_nest
Used by subquery optimizations to keep track about where this subquery predicate is located,...
Definition: item_subselect.h:447
bool choose_semijoin_or_antijoin()
Helper for resolve_subquery().
Definition: item_subselect.cc:1532
Item_exists_subselect(const POS &pos)
Definition: item_subselect.h:453
bool select_transformer(THD *, Query_block *) override
Definition: item_subselect.h:457
my_decimal * val_decimal(my_decimal *) override
Return the result of EXISTS as a decimal value.
Definition: item_subselect.cc:1600
enum Item_result result_type() const override
Definition: item_subselect.h:465
int fix_outer_field(THD *thd, Field **field, Item **reference)
Resolve the name of an outer select column reference.
Definition: item.cc:5251
bool fix_fields(THD *, Item **) override
Resolve the name of a column reference.
Definition: item.cc:5690
Definition: item_cmpfunc.h:912
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block) override
Fix after tables have been moved from one query_block level to the parent level, e....
Definition: item.cc:3153
Definition: item_cmpfunc.h:492
Representation of IN subquery predicates of the form "left_expr IN (SELECT ...)".
Definition: item_subselect.h:526
bool fix_fields(THD *thd, Item **ref) override
An object of class Item_in_subselect is always substituted with another object of class Item_in_optim...
Definition: item_subselect.cc:2512
Item * left_expr
Definition: item_subselect.h:530
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block) override
Definition: item_subselect.cc:2533
my_decimal * val_decimal(my_decimal *) override
Return the result of EXISTS as a decimal value.
Definition: item_subselect.cc:1661
bool row_value_transformer(THD *thd, Query_block *select)
Definition: item_subselect.cc:2125
struct Item_in_subselect::In2exists_info * in2exists_info
Item_in_optimizer * optimizer
Pointer to the created Item_in_optimizer; it is stored for the same reasons as 'm_injected_left_expr'...
Definition: item_subselect.h:568
Item * compile(Item_analyzer analyzer, uchar **arg_p, Item_transformer transformer, uchar *arg_t) override
Perform a generic "compilation" of the Item tree, ie transform the Item tree by adding zero or more I...
Definition: item_subselect.cc:736
bool row_value_in_to_exists_transformer(THD *thd, Query_block *select)
Transform a (possibly non-correlated) IN subquery into a correlated EXISTS.
Definition: item_subselect.cc:2189
double val_real() override
Definition: item_subselect.cc:1618
bool select_transformer(THD *thd, Query_block *select) override
Definition: item_subselect.cc:2383
std::optional< ContainedSubquery > get_contained_subquery(const Query_block *outer_query_block) override
If this item represents a IN/ALL/ANY/comparison_operator subquery, return that (along with data on ho...
Definition: item_subselect.cc:2589
bool need_expr_cache
The need for expr cache may be optimized away,.
Definition: item_subselect.h:541
void set_cond_guard_var(int i, bool v)
Definition: item_subselect.h:627
Item_func_not_all * upper_item
Definition: item_subselect.h:609
bool finalize_materialization_transform(THD *thd, JOIN *join)
Once the decision to use materialization has been taken, performs some last steps of this transformat...
Definition: item_subselect.cc:422
bool itemize(Parse_context *pc, Item **res) override
The same as contextualize() but with additional parameter.
Definition: item_subselect.cc:1479
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_subselect.cc:2470
bool abort_on_null
True if naked IN is allowed to exchange FALSE for UNKNOWN.
Definition: item_subselect.h:577
void reset() override
Definition: item_subselect.h:654
bool mark_as_outer(Item *left_row, size_t col)
Decide whether to mark the injected left expression "outer" relative to the subquery.
Definition: item_subselect.cc:376
Item * transform(Item_transformer transformer, uchar *arg) override
Perform a generic transformation of the Item tree, by adding zero or more additional Item objects to ...
Definition: item_subselect.cc:729
bool dependent_before_in2exists() const
Is reliable only if IN->EXISTS has been done.
Definition: item_subselect.h:620
bool * pushed_cond_guards
Definition: item_subselect.h:607
AccessPath * root_access_path() const override
Definition: item_subselect.cc:512
bool select_in_like_transformer(THD *thd, Query_block *select, Comp_creator *func)
Prepare IN/ALL/ANY/SOME subquery transformation and call appropriate transformation function.
Definition: item_subselect.cc:2403
PT_subquery * pt_subselect
Definition: item_subselect.h:612
longlong val_int() override
Definition: item_subselect.cc:1625
bool finalize_exists_transform(THD *thd, Query_block *select)
Once the decision to use IN->EXISTS has been taken, performs some last steps of this transformation.
Definition: item_subselect.cc:383
bool val_bool() override
Definition: item_subselect.cc:1639
bool single_value_transformer(THD *thd, Query_block *select, Comp_creator *func)
Rewrite a single-column IN/ALL/ANY subselect.
Definition: item_subselect.cc:1697
List< Cached_item > * left_expr_cache
Cache of the left operand of the subquery predicate.
Definition: item_subselect.h:537
bool was_null
Definition: item_subselect.h:569
bool init_left_expr_cache(THD *thd)
Initialize the cache of the left operand of the IN predicate.
Definition: item_subselect.cc:2558
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_subselect.cc:480
String * val_str(String *) override
Return the result of EXISTS as a string value.
Definition: item_subselect.cc:1632
void update_used_tables() override
Updates used tables, not null tables information and accumulates properties up the item tree,...
Definition: item_subselect.cc:2540
bool in2exists_added_to_where() const
Definition: item_subselect.h:615
bool * get_cond_guard(int i)
Definition: item_subselect.h:624
bool walk(Item_processor processor, enum_walk walk, uchar *arg) override
Traverses a tree of Items in prefix and/or postfix order.
Definition: item_subselect.cc:723
subs_type substype() const override
Definition: item_subselect.h:652
Item_exists_subselect super
Definition: item_subselect.h:527
bool single_value_in_to_exists_transformer(THD *thd, Query_block *select, Comp_creator *func)
Transform an IN predicate into EXISTS via predicate injection.
Definition: item_subselect.cc:1906
bool test_limit()
Definition: item_subselect.cc:1430
Item_in_subselect()
Definition: item_subselect.h:635
bool val_bool_naked()
Definition: item_subselect.cc:1646
Item_ref * m_injected_left_expr
In the case of.
Definition: item_subselect.h:562
bool exec(THD *thd) override
Definition: item_subselect.cc:752
bool left_expr_cache_filled
Whether left_expr_cache holds a value.
Definition: item_subselect.h:538
Definition: item_cmpfunc.h:2292
Definition: item_subselect.h:371
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_subselect.cc:1094
bool max
Definition: item_subselect.h:373
Item_maxmin_subselect(Item_subselect *parent, Query_block *query_block, bool max, bool ignore_nulls)
Definition: item_subselect.cc:1068
bool any_value()
Definition: item_subselect.h:381
bool is_maxmin() const override
Definition: item_subselect.h:384
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_subselect.cc:1087
void reset_value_registration() override
Definition: item_subselect.h:383
void register_value()
Definition: item_subselect.h:382
bool was_values
Definition: item_subselect.h:374
bool fix_fields(THD *, Item **) override
Resolve the name of a reference to a column reference.
Definition: item.cc:8082
Item with result field.
Definition: item.h:5626
Definition: item_subselect.h:279
Item * replace_scalar_subquery(uchar *arge) override
When walking the item tree seeing an Item_singlerow_subselect matching a target, replace it with a su...
Definition: item_subselect.cc:2819
enum Item_result result_type() const override
Definition: item_subselect.cc:1168
void store(uint i, Item *item)
Definition: item_subselect.cc:1163
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_subselect.cc:342
bool null_inside() override
Definition: item_subselect.cc:1212
Item ** addr(uint i) override
Definition: item_subselect.h:323
double val_real() override
Definition: item_subselect.cc:1226
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_subselect.cc:1172
void no_rows_in_result() override
Definition: item_subselect.cc:1195
bool val_json(Json_wrapper *result) override
Get a JSON value from an Item.
Definition: item_subselect.cc:1269
void reset() override
Definition: item_subselect.cc:1100
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_subselect.cc:1279
std::optional< ContainedSubquery > get_contained_subquery(const Query_block *outer_query_block) override
If this item represents a IN/ALL/ANY/comparison_operator subquery, return that (along with data on ho...
Definition: item_subselect.cc:2858
longlong val_int() override
Definition: item_subselect.cc:1237
uint cols() const override
Definition: item_subselect.h:312
virtual bool is_maxmin() const
Definition: item_subselect.h:329
Item * element_index(uint i) override
Definition: item_subselect.h:320
Item_cache ** row
Definition: item_subselect.h:281
Item_singlerow_subselect()
Definition: item_subselect.h:285
Query_block * invalidate_and_restore_query_block()
This method is used to implement a special case of semantic tree rewriting, mandated by a SQL:2003 ex...
Definition: item_subselect.cc:884
bool collect_scalar_subqueries(uchar *) override
Definition: item_subselect.cc:2744
bool select_transformer(THD *thd, Query_block *select) override
Definition: item_subselect.cc:1115
bool get_time(MYSQL_TIME *ltime) override
Definition: item_subselect.cc:1290
String * val_str(String *) override
Definition: item_subselect.cc:1248
bool val_bool() override
Definition: item_subselect.cc:1300
bool no_rows
no_rows_in_result
Definition: item_subselect.h:282
subs_type substype() const override
Definition: item_subselect.h:289
void bring_value() override
Definition: item_subselect.cc:1219
bool check_cols(uint c) override
Definition: item_subselect.cc:1204
Item_cache * value
Definition: item_subselect.h:281
my_decimal * val_decimal(my_decimal *) override
Definition: item_subselect.cc:1258
Definition: item_subselect.h:80
subselect_indexsubquery_engine * indexsubquery_engine
Only relevant for Item_in_subselect; optimized structure used for execution in place of running the e...
Definition: item_subselect.h:141
enum_parsing_context parsing_place
where subquery is placed
Definition: item_subselect.h:148
Item * replace_item_view_ref(uchar *arg) override
Transform processor.
Definition: item_subselect.cc:2947
bool clean_up_after_removal(uchar *arg) override
Clean up after removing the subquery from the item tree.
Definition: item_subselect.cc:2682
bool is_evaluated() const
Definition: item_subselect.cc:2728
bool collect_subqueries(uchar *) override
Definition: item_subselect.cc:2715
table_map used_tables() const override
Definition: item_subselect.h:202
subs_type
Definition: item_subselect.h:158
@ UNKNOWN_SUBS
Definition: item_subselect.h:159
@ EXISTS_SUBS
Definition: item_subselect.h:161
@ SINGLEROW_SUBS
Definition: item_subselect.h:160
@ ALL_SUBS
Definition: item_subselect.h:163
@ ANY_SUBS
Definition: item_subselect.h:164
@ IN_SUBS
Definition: item_subselect.h:162
void accumulate_expression(Item *item)
Accumulate properties from a selected expression within a query block.
Definition: item_subselect.cc:277
void accumulate_used_tables(table_map add_tables)
Accumulate used tables.
Definition: item_subselect.h:183
bool check_function_as_value_generator(uchar *args) override
Check if this item is allowed for a virtual column or inside a default expression.
Definition: item_subselect.h:236
bool is_uncacheable() const
Definition: item_subselect.cc:3149
void accumulate_properties()
Accumulate properties from underlying query expression.
Definition: item_subselect.cc:213
virtual bool exec(THD *thd)
Definition: item_subselect.cc:633
enum_engine_type
Definition: item_subselect.h:117
@ INDEXSUBQUERY_ENGINE
Definition: item_subselect.h:117
@ HASH_SJ_ENGINE
Definition: item_subselect.h:117
@ OTHER_ENGINE
Definition: item_subselect.h:117
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_subselect.cc:832
Query_expression * unit
Definition: item_subselect.h:109
virtual void reset_value_registration()
Definition: item_subselect.h:224
bool explain_subquery_checker(uchar **arg) override
Register subquery to the table where it is used within a condition.
Definition: item_subselect.cc:626
bool traced_before
Whether or not execution of this subselect has been traced by optimizer tracing already.
Definition: item_subselect.h:91
virtual bool select_transformer(THD *thd, Query_block *select)=0
Item * substitution
Definition: item_subselect.h:106
Item * get_tmp_table_item(THD *thd) override
If an Item is materialized in a temporary table, a different Item may have to be used in the part of ...
Definition: item_subselect.cc:811
enum_parsing_context place()
Definition: item_subselect.h:225
virtual void reset()
Definition: item_subselect.h:191
Item * replace_item_field(uchar *arg) override
Transform processor.
Definition: item_subselect.cc:2939
uint max_columns
allowed number of columns (1 for scalar subqueries)
Definition: item_subselect.h:146
join_type get_join_type() const
Definition: item_subselect.cc:323
bool assigned() const
Definition: item_subselect.h:193
int in_cond_of_tab
If !=NO_PLAN_IDX: this Item is in the condition attached to the JOIN_TAB having this index in the par...
Definition: item_subselect.h:114
void accumulate_condition(Item *item)
Accumulate properties from a condition or GROUP/ORDER within a query block.
Definition: item_subselect.cc:288
virtual AccessPath * root_access_path() const
Definition: item_subselect.h:126
void create_iterators(THD *thd)
Definition: item_subselect.cc:293
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_subselect.cc:328
Item * replace_item(Item_transformer t, uchar *arg)
Definition: item_subselect.cc:2882
table_map m_subquery_used_tables
cache of used tables, used to identify tables added for IN subquery
Definition: item_subselect.h:154
const TABLE * get_table() const
Definition: item_subselect.cc:313
enum Type type() const override
Definition: item_subselect.cc:804
bool fix_fields(THD *thd, Item **ref) override
Definition: item_subselect.cc:533
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_subselect.cc:806
void set_indexsubquery_engine(subselect_indexsubquery_engine *eng)
Definition: item_subselect.h:209
void assigned(bool a)
Definition: item_subselect.h:194
const char * func_name() const override
Definition: item_subselect.h:231
bool have_to_be_excluded
work with 'substitution'
Definition: item_subselect.h:150
table_map not_null_tables() const override
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item_subselect.h:203
table_map used_tables_cache
cache of used tables
Definition: item_subselect.h:144
void update_used_tables() override
Updates used tables, not null tables information and accumulates properties up the item tree,...
Definition: item_subselect.cc:823
bool walk(Item_processor processor, enum_walk walk, uchar *arg) override
Traverses a tree of Items in prefix and/or postfix order.
Definition: item_subselect.cc:605
bool changed
subquery is transformed
Definition: item_subselect.h:156
Item_subselect()
Definition: item_subselect.cc:102
bool is_null() override
The method allows to determine nullness of a complex expression without fully evaluating it,...
Definition: item_subselect.h:196
void init(Query_block *select, Query_result_subquery *result)
We need this method, because some compilers do not allow 'this' pointer in constructor initialization...
Definition: item_subselect.cc:138
const Index_lookup & index_lookup() const
Definition: item_subselect.cc:318
enum_engine_type engine_type() const
Definition: item_subselect.cc:299
virtual subs_type substype() const
Definition: item_subselect.h:188
unique_ptr_destroy_only< SubqueryWithResult > subquery
The inner part of the subquery.
Definition: item_subselect.h:137
Item_result_field super
Definition: item_subselect.h:81
bool inform_item_in_cond_of_tab(uchar *arg) override
Tells an Item that it is in the condition of a JOIN_TAB of a query block.
Definition: item_subselect.cc:2654
bool value_assigned
Definition: item_subselect.h:84
bool subq_opt_away_processor(uchar *arg) override
Mark the subquery as optimized away, for EXPLAIN.
Definition: item_subselect.cc:2666
uint unit_cols() const
Definition: item_subselect.cc:3144
void fix_after_pullout(Query_block *parent_query_block, Query_block *removed_query_block) override
Definition: item_subselect.cc:703
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:853
bool null_value
True if item is null.
Definition: item.h:3495
Type
Definition: item.h:889
Bool_test
< Modifier for result transformation
Definition: item.h:937
@ BOOL_NOT_FALSE
Definition: item.h:941
@ BOOL_NOT_TRUE
Definition: item.h:940
@ BOOL_IS_TRUE
Definition: item.h:937
@ BOOL_IS_FALSE
Definition: item.h:938
@ BOOL_IDENTITY
Definition: item.h:943
bool get_date_from_int(MYSQL_TIME *ltime, my_time_flags_t flags)
Convert val_int() to date in MYSQL_TIME.
Definition: item.cc:1481
bool update_null_value()
Make sure the null_value member has a correct value.
Definition: item.cc:7419
bool get_time_from_int(MYSQL_TIME *ltime)
Convert val_int() to time in MYSQL_TIME.
Definition: item.cc:1568
Definition: sql_optimizer.h:133
Abstraction for accessing JSON values irrespective of whether they are (started out as) binary JSON v...
Definition: json_dom.h:1161
Definition: sql_list.h:434
Definition: parse_tree_nodes.h:1606
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:139
This class represents a query block, aka a query specification, which is a query consisting of a SELE...
Definition: sql_lex.h:1156
This class represents a query expression (one query block or several query blocks combined with UNION...
Definition: sql_lex.h:623
Definition: item_subselect.cc:1311
Definition: query_result.h:174
Definition: item_subselect.cc:851
Base class for result from a subquery.
Definition: query_result.h:296
Definition: sql_union.h:40
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:168
Definition: item_subselect.h:731
enum Item_result type() const
Definition: item_subselect.h:761
Item_subselect * item
Definition: item_subselect.h:775
bool maybe_null
True if at least one of the columns returned by the subquery may be null, or if a single-row subquery...
Definition: item_subselect.h:782
bool may_be_null() const
Definition: item_subselect.h:763
void print(const THD *thd, String *str, enum_query_type query_type)
Definition: item_subselect.cc:3151
Query_block * single_query_block() const
Definition: item_subselect.cc:3215
enum Item_result res_type
Definition: item_subselect.h:776
enum_field_types res_field_type
Definition: item_subselect.h:777
bool exec(THD *thd)
Execute the subquery.
Definition: item_subselect.cc:3070
SubqueryWithResult(Query_expression *u, Query_result_interceptor *res, Item_subselect *si)
Definition: item_subselect.cc:2956
Query_result_interceptor * result
Definition: item_subselect.h:774
enum_field_types field_type() const
Definition: item_subselect.h:762
Query_expression * unit
Definition: item_subselect.h:784
void fix_length_and_dec(Item_cache **row)
Definition: item_subselect.cc:3050
bool prepare(THD *thd)
Prepare the query expression underlying the subquery.
Definition: item_subselect.cc:2980
const Item_subselect * get_item() const
Definition: item_subselect.h:770
void set_row(const mem_root_deque< Item * > &item_list, Item_cache **row, bool never_empty)
Makes storage for the output values for a scalar or row subquery and calculates their data and column...
Definition: item_subselect.cc:2997
void cleanup()
Cleanup subquery after complete query execution, free all resources.
Definition: item_subselect.cc:2951
bool change_query_result(THD *thd, Item_subselect *si, Query_result_subquery *result)
change query result object of subquery.
Definition: item_subselect.cc:3207
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
Object containing parameters used when creating and using temporary tables.
Definition: temp_table_param.h:95
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:110
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:94
Compute an IN predicate via a hash semi-join.
Definition: item_subselect.h:869
void create_iterators(THD *thd) override
Definition: item_subselect.cc:3417
void print(const THD *thd, String *str, enum_query_type query_type) override
Print the state of this engine into a string for debugging and views.
Definition: item_subselect.cc:3648
nulls_exist
Existence of inner NULLs in materialized table: By design, other values than IRRELEVANT_OR_FALSE are ...
Definition: item_subselect.h:881
@ NEX_TRUE
they matter, and we know there exists at least one.
Definition: item_subselect.h:887
@ NEX_UNKNOWN
they matter, and we don't know yet if they exists
Definition: item_subselect.h:885
@ NEX_IRRELEVANT_OR_FALSE
none, or they don't matter
Definition: item_subselect.h:883
void cleanup() override
Cleanup performed after each execution.
Definition: item_subselect.cc:3494
unique_ptr_destroy_only< RowIterator > m_iterator
Definition: item_subselect.h:891
TABLE * get_table() const
Definition: item_subselect.h:912
subselect_hash_sj_engine(Item_in_subselect *in_predicate, Query_expression *unit_arg)
Definition: item_subselect.h:898
Query_expression *const unit
Definition: item_subselect.h:890
~subselect_hash_sj_engine() override
Definition: item_subselect.cc:3483
Query_result_interceptor * saved_result
Saved result object, must be restored after use.
Definition: item_subselect.h:895
enum nulls_exist mat_table_has_nulls
Definition: item_subselect.h:889
bool is_materialized
Definition: item_subselect.h:872
bool has_zero_rows
Definition: item_subselect.h:875
const Index_lookup & index_lookup() const
Definition: item_subselect.h:913
bool exec(THD *thd) override
Execute a subquery IN predicate via materialization.
Definition: item_subselect.cc:3530
enum_engine_type engine_type() const override
Definition: item_subselect.h:910
AccessPath * root_access_path() const
Definition: item_subselect.h:915
bool setup(THD *thd, const mem_root_deque< Item * > &tmp_columns)
Create all structures needed for subquery execution using hash semijoin.
Definition: item_subselect.cc:3247
enum join_type get_join_type() const
Definition: item_subselect.h:914
AccessPath * m_root_access_path
Definition: item_subselect.h:892
A subquery execution engine that evaluates the subquery by doing index lookups in a single table's in...
Definition: item_subselect.h:808
Item * having
Definition: item_subselect.h:828
TABLE * table
Table which is read, using one of eq_ref, ref, ref_or_null.
Definition: item_subselect.h:812
virtual ~subselect_indexsubquery_engine()=default
virtual void cleanup()
Definition: item_subselect.h:851
virtual bool exec(THD *thd)
Definition: item_subselect.cc:3133
virtual void print(const THD *thd, String *str, enum_query_type query_type)
Definition: item_subselect.cc:3156
Item * cond
Definition: item_subselect.h:816
subselect_indexsubquery_engine(TABLE *table, Table_ref *table_ref, const Index_lookup &ref, enum join_type join_type, Item_in_subselect *subs, Item *where, Item *having_arg)
Definition: item_subselect.h:835
virtual void create_iterators(THD *)
Definition: item_subselect.h:852
join_type type
Definition: item_subselect.h:815
enum_engine_type
Definition: item_subselect.h:833
@ HASH_SJ_ENGINE
Definition: item_subselect.h:833
@ INDEXSUBQUERY_ENGINE
Definition: item_subselect.h:833
Index_lookup ref
Definition: item_subselect.h:814
ulonglong hash
Definition: item_subselect.h:817
virtual enum_engine_type engine_type() const
Definition: item_subselect.h:850
Item_in_subselect * item
Definition: item_subselect.h:830
Table_ref * table_ref
Definition: item_subselect.h:813
Comp_creator *(*)(bool invert) chooser_compare_func_creator
Convenience typedef for a function that returns factories for Item comparators (ie....
Definition: comp_creator.h:39
static int cmp(Bigint *a, Bigint *b)
Definition: dtoa.cc:1064
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:31
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:222
This file contains the field type.
enum_field_types
Column types for MySQL.
Definition: field_types.h:53
bool subquery_allows_materialization(THD *thd, Query_block *query_block, const Query_block *outer)
Check if the subquery predicate can be executed via materialization.
Definition: sql_resolver.cc:981
Item * all_any_subquery_creator(Item *left_expr, chooser_compare_func_creator cmp, bool all, Query_block *select)
Construct ALL/ANY/SOME subquery Item.
Definition: sql_parse.cc:6695
bool(Item::* Item_analyzer)(uchar **argp)
Definition: item.h:714
Item *(Item::* Item_transformer)(uchar *arg)
Type for transformers used by Item::transform and Item::compile.
Definition: item.h:723
Item * remove_in2exists_conds(Item *conds)
Removes every predicate injected by IN->EXISTS.
Definition: item_subselect.cc:406
bool IsItemInSubSelect(Item *item)
Returns whether the Item is an IN-subselect.
Definition: item_subselect.cc:2621
Subquery_strategy
Strategy which will be used to handle this subquery: flattening to a semi-join, conversion to a deriv...
Definition: item_subselect.h:395
@ CANDIDATE_FOR_SEMIJOIN
Candidate for semi-join flattening.
@ UNSPECIFIED
Nothing decided yet.
@ SUBQ_EXISTS
Evaluate as EXISTS subquery (possibly after rewriting from another type)
@ DERIVED_TABLE
Rewrite to joined derived table.
@ DELETED
Subquery has been deleted, probably because it was always false.
@ CANDIDATE_FOR_IN2EXISTS_OR_MAT
Candidate for rewriting IN(subquery) to EXISTS, or subquery materialization.
@ SEMIJOIN
Semi-join flattening.
@ SUBQ_MATERIALIZATION
Subquery materialization (HASH_SJ_ENGINE)
@ CANDIDATE_FOR_DERIVED_TABLE
Candidate for rewriting to joined derived table.
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:489
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
unsigned char uchar
Definition: my_inttypes.h:52
long long int longlong
Definition: my_inttypes.h:55
uint64_t table_map
Definition: my_table_map.h:30
Interface for low level time utilities.
unsigned int my_time_flags_t
Flags to str_to_datetime and number_to_datetime.
Definition: my_time.h:94
Time declarations shared between the server and client API: you should not add anything to this heade...
static char * where
Definition: mysqldump.cc:140
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1052
PT & ref(PT *tp)
Definition: tablespace_impl.cc:359
std::string join(Container cont, const std::string &delim)
join elements of an container into a string separated by a delimiter.
Definition: string.h:151
int add_tables(PFS_engine_table_share_proxy **, unsigned int) noexcept
Definition: pfs_plugin_table_v1_all_empty.cc:33
enum_parsing_context
Names for different query parse tree parts.
Definition: parse_tree_node_base.h:58
File containing constants that can be used throughout the server.
enum_walk
Enumeration for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:287
bool(Item::*)(unsigned char *) Item_processor
Processor type for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:305
enum_condition_context
Enumeration for Query_block::condition_context.
Definition: sql_const.h:311
Common types of the Optimizer, used by optimization and execution.
join_type
Definition: sql_opt_exec_shared.h:186
@ JT_UNKNOWN
Definition: sql_opt_exec_shared.h:188
Access paths are a query planning structure that correspond 1:1 to iterators, in that an access path ...
Definition: access_path.h:193
Struct used to pass around arguments to/from check_function_as_value_generator.
Definition: item.h:488
int err_code
the error code found during check(if any)
Definition: item.h:495
int get_unnamed_function_error_code() const
Return the correct error code, based on whether or not if we are checking for disallowed functions in...
Definition: item.h:507
Structure used for index-based lookups.
Definition: sql_opt_exec_shared.h:67
This bundles several pieces of information useful when doing the IN->EXISTS transform.
Definition: item_subselect.h:585
bool added_to_where
True: if IN->EXISTS has been done and has added a condition to the subquery's WHERE clause.
Definition: item_subselect.h:590
bool dependent_before
True: if subquery was dependent (correlated) before IN->EXISTS was done.
Definition: item_subselect.h:595
bool dependent_after
True: if subquery was dependent (correlated) after IN->EXISTS was done.
Definition: item_subselect.h:600
Argument for walk method replace_scalar_subquery.
Definition: item_subselect.h:334
Query_block * m_outer_query_block
The transformed query block.
Definition: item_subselect.h:337
Field * m_field
the replacement field
Definition: item_subselect.h:336
Query_block * m_inner_query_block
The immediately surrounding query.
Definition: item_subselect.h:338
bool m_add_coalesce
Definition: item_subselect.h:341
Item_singlerow_subselect * m_target
subquery to be replaced with field
Definition: item_subselect.h:335
Scalar_subquery_replacement(Item_singlerow_subselect *target, Field *field, Query_block *select, bool add_coalesce)
Definition: item_subselect.h:342
argument used by walk method collect_scalar_subqueries ("css")
Definition: item_subselect.h:244
Collect_subq_info(Query_block *owner)
Definition: item_subselect.h:248
Query_block * m_query_block
Definition: item_subselect.h:247
std::vector< Item_subselect * > list
< accumulated all subq (or aggregates) found
Definition: item_subselect.h:246
bool contains(Query_expression *candidate)
Definition: item_subselect.h:249
Definition: mysql_time.h:82
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:121
Bison "location" class.
Definition: parse_location.h:43
unsigned int uint
Definition: uca9-dump.cc:75
Item_result
Type of the user defined function return slot and arguments.
Definition: udf_registration_types.h:39
@ INT_RESULT
double
Definition: udf_registration_types.h:43
static int all(site_def const *s, node_no node)
Definition: xcom_transport.cc:871