MySQL  8.0.18
Source Code Documentation
Item_subselect Class Referenceabstract

#include <item_subselect.h>

Inheritance diagram for Item_subselect:
Item_result_field Item Parse_tree_node_tmpl< Context > Item_exists_subselect Item_singlerow_subselect Item_in_subselect Item_maxmin_subselect Item_allany_subselect

Public Types

enum  trans_res { RES_OK, RES_REDUCE, RES_ERROR }
 
enum  subs_type {
  UNKNOWN_SUBS, SINGLEROW_SUBS, EXISTS_SUBS, IN_SUBS,
  ALL_SUBS, ANY_SUBS
}
 
- Public Types inherited from Item
enum  Type {
  INVALID_ITEM = 0, FIELD_ITEM, FUNC_ITEM, SUM_FUNC_ITEM,
  STRING_ITEM, INT_ITEM, REAL_ITEM, NULL_ITEM,
  VARBIN_ITEM, COPY_STR_ITEM, FIELD_AVG_ITEM, DEFAULT_VALUE_ITEM,
  PROC_ITEM, COND_ITEM, REF_ITEM, FIELD_STD_ITEM,
  FIELD_VARIANCE_ITEM, INSERT_VALUE_ITEM, SUBSELECT_ITEM, ROW_ITEM,
  CACHE_ITEM, TYPE_HOLDER, PARAM_ITEM, TRIGGER_FIELD_ITEM,
  DECIMAL_ITEM, XPATH_NODESET, XPATH_NODESET_CMP, VIEW_FIXER_ITEM,
  FIELD_BIT_ITEM, NULL_RESULT_ITEM
}
 
enum  cond_result { COND_UNDEF, COND_OK, COND_TRUE, COND_FALSE }
 
enum  traverse_order { POSTFIX, PREFIX }
 
enum  enum_const_item_cache { CACHE_NONE = 0, CACHE_JSON_VALUE, CACHE_JSON_ATOM }
 How to cache constant JSON data. More...
 
enum  Bool_test {
  BOOL_IS_TRUE = 0x00, BOOL_IS_FALSE = 0x01, BOOL_IS_UNKNOWN = 0x02, BOOL_NOT_TRUE = 0x03,
  BOOL_NOT_FALSE = 0x04, BOOL_NOT_UNKNOWN = 0x05, BOOL_IDENTITY = 0x06, BOOL_NEGATED = 0x07,
  BOOL_ALWAYS_TRUE = 0x08, BOOL_ALWAYS_FALSE = 0x09
}
 < Modifier for result transformation More...
 
enum  item_marker {
  MARKER_NONE = 0, MARKER_CONST_PROPAG = 1, MARKER_BIT = 4, MARKER_FUNC_DEP_NOT_NULL = 5,
  MARKER_DISTINCT_GROUP = 6, MARKER_ICP_COND_USES_INDEX_ONLY = 10
}
 < Values for member 'marker' More...
 
- Public Types inherited from Parse_tree_node_tmpl< Context >
typedef Context context_t
 

Public Member Functions

const subselect_engineget_engine_for_explain () const
 EXPLAIN needs read-only access to the engine. More...
 
 Item_subselect ()
 
 Item_subselect (const POS &pos)
 
void accumulate_used_tables (table_map add_tables)
 Accumulate used tables. More...
 
virtual subs_type substype () const
 
void init (SELECT_LEX *select, Query_result_subquery *result)
 
 ~Item_subselect () override
 
void cleanup () override
 
virtual void reset ()
 
virtual trans_res select_transformer (THD *thd, SELECT_LEX *select)=0
 
bool assigned () const
 
void assigned (bool a)
 
enum Type type () const override
 
bool is_null () override
 
bool fix_fields (THD *thd, Item **ref) override
 
void fix_after_pullout (SELECT_LEX *parent_select, SELECT_LEX *removed_select) override
 
virtual bool exec (THD *thd)
 
bool resolve_type (THD *) override
 Resolve type-related information for this item, such as result field type, maximum size, precision, signedness, character set and collation. More...
 
table_map used_tables () const override
 
table_map not_null_tables () const override
 
Itemget_tmp_table_item (THD *thd) override
 
void update_used_tables () override
 
void print (const THD *thd, String *str, enum_query_type query_type) const override
 This method is used for to: More...
 
virtual bool have_guarded_conds ()
 
bool change_engine (subselect_engine *eng)
 
bool is_evaluated () const
 
bool is_uncacheable () const
 
virtual void reset_value_registration ()
 
enum_parsing_context place ()
 
bool walk_body (Item_processor processor, enum_walk walk, uchar *arg)
 Workaround for bug in gcc 4.1. More...
 
bool walk (Item_processor processor, enum_walk walk, uchar *arg) override
 Traverses a tree of Items in prefix and/or postfix order. More...
 
bool explain_subquery_checker (uchar **arg) override
 Register subquery to the table where it is used within a condition. More...
 
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. More...
 
bool clean_up_after_removal (uchar *arg) override
 Clean up after removing the subquery from the item tree. More...
 
const char * func_name () const override
 
bool check_function_as_value_generator (uchar *args) override
 Check if this item is allowed for a virtual column or inside a default expression. More...
 
- Public Member Functions inherited from Item_result_field
 Item_result_field ()
 
 Item_result_field (const POS &pos)
 
 Item_result_field (THD *thd, const Item_result_field *item)
 
 ~Item_result_field () override
 
Fieldget_tmp_table_field () override
 
Fieldtmp_table_field (TABLE *) override
 
void set_result_field (Field *field) override
 
bool is_result_field () const override
 
Fieldget_result_field () const override
 
void save_in_result_field (bool no_conversions) override
 
bool mark_field_in_map (uchar *arg) override
 Mark underlying field in read or write map of a table. More...
 
longlong llrint_with_overflow_check (double realval)
 
void raise_numeric_overflow (const char *type_name)
 
double raise_float_overflow ()
 
longlong raise_integer_overflow ()
 
int raise_decimal_overflow ()
 
- Public Member Functions inherited from Item
 Item (const Item &)=delete
 
void operator= (Item &)=delete
 
 Item ()
 Item constructor for general use. More...
 
 Item (THD *thd, const Item *item)
 Constructor used by Item_field, Item_ref & aggregate functions. More...
 
 Item (const POS &)
 Parse-time context-independent constructor. More...
 
virtual ~Item () override
 
virtual bool itemize (Parse_context *pc, Item **res)
 The same as contextualize()/contextualize_() but with additional parameter. More...
 
void rename (char *new_name)
 rename item (used for views, cleanup() return original name). More...
 
void init_make_field (Send_field *tmp_field, enum enum_field_types type)
 
virtual void make_field (Send_field *field)
 
virtual Fieldmake_string_field (TABLE *table)
 Create a field to hold a string value from an item. More...
 
void quick_fix_field ()
 
virtual void set_can_use_prefix_key ()
 
type_conversion_status save_in_field_no_warnings (Field *field, bool no_conversions)
 Save the item into a field but do not emit any warnings. More...
 
type_conversion_status save_in_field (Field *field, bool no_conversions)
 Save a temporal value in packed longlong format into a Field. More...
 
virtual void save_org_in_field (Field *field)
 
virtual bool send (Protocol *protocol, String *str)
 This is only called from items that is not of type item_field. More...
 
bool evaluate (THD *thd, String *str)
 Evaluate item, possibly using the supplied buffer. More...
 
virtual bool eq (const Item *, bool binary_cmp) const
 
virtual Item_result result_type () const
 
virtual enum Item_result numeric_context_result_type () const
 Result type when an item appear in a numeric context. More...
 
enum Item_result temporal_with_date_as_number_result_type () const
 Similar to result_type() but makes DATE, DATETIME, TIMESTAMP pretend to be numbers rather than strings. More...
 
enum_field_types data_type () const
 Retrieve the derived data type of the Item. More...
 
void set_data_type (enum_field_types data_type)
 Set the data type of the current Item. More...
 
void set_data_type_bool ()
 
void set_data_type_longlong ()
 Set the data type of the Item to be longlong. More...
 
void set_data_type_decimal (uint8 precision, uint8 dec)
 Set the data type of the Item to be decimal. More...
 
void set_data_type_double ()
 Set the data type of the Item to be double precision floating point. More...
 
void set_data_type_float ()
 Set the data type of the Item to be single precision floating point. More...
 
void set_data_type_string_init ()
 Initialize an Item to be of VARCHAR type, other properties undetermined. More...
 
void set_data_type_string (uint32 max_l)
 Set the Item to be variable length string. More...
 
void set_data_type_string (ulonglong max_char_length_arg)
 Set the Item to be variable length string. More...
 
void set_data_type_string (ulonglong max_l, const CHARSET_INFO *cs)
 Set the Item to be variable length string. More...
 
void set_data_type_string (uint32 max_l, const DTCollation &coll)
 Set the Item to be variable length string. More...
 
void set_data_type_char (uint32 max_l)
 Set the Item to be fixed length string. More...
 
void set_data_type_char (uint32 max_l, const CHARSET_INFO *cs)
 Set the Item to be fixed length string. More...
 
void set_data_type_blob (uint32 max_l)
 Set the Item to be of BLOB type. More...
 
void set_data_type_date ()
 Set all type properties for Item of DATE type. More...
 
void set_data_type_time (uint8 fsp)
 Set all type properties for Item of TIME type. More...
 
void set_data_type_datetime (uint8 fsp)
 Set all properties for Item of DATETIME type. More...
 
void set_data_type_timestamp (uint8 fsp)
 Set all properties for Item of TIMESTAMP type. More...
 
void set_data_type_json ()
 Set the data type of the Item to be JSON. More...
 
void set_data_type_year ()
 Set the data type of the Item to be YEAR. More...
 
void set_data_type_geometry ()
 Set the Item to be of GEOMETRY type. More...
 
void set_data_type_from_result (Item_result result, uint32 length)
 Set type information of Item from "result" information. More...
 
void set_data_type_from_item (Item *item)
 Set data type properties of the item from the properties of another item. More...
 
virtual Item_result cast_to_int_type () const
 
void aggregate_type (Bounds_checked_array< Item *> items)
 Aggregates data types from array of items into current item. More...
 
virtual enum_monotonicity_info get_monotonicity_info () const
 
bool is_null_value ()
 For template-compatibility with Field. More...
 
virtual longlong val_int_endpoint (bool left_endp, bool *incl_endp)
 
virtual double val_real ()=0
 
virtual longlong val_int ()=0
 
virtual longlong val_date_temporal ()
 Return date value of item in packed longlong format. More...
 
virtual longlong val_time_temporal ()
 Return time value of item in packed longlong format. More...
 
longlong val_temporal_by_field_type ()
 Return date or time value of item in packed longlong format, depending on item field type. More...
 
longlong val_temporal_with_round (enum_field_types type, uint8 dec)
 Get date or time value in packed longlong format. More...
 
ulonglong val_uint ()
 
virtual Stringval_str (String *str)=0
 
virtual Stringval_str_ascii (String *str)
 
virtual my_decimalval_decimal (my_decimal *decimal_buffer)=0
 
virtual bool val_bool ()
 
virtual bool val_json (Json_wrapper *result)
 Get a JSON value from an Item. More...
 
virtual float get_filtering_effect (THD *thd, table_map filter_for_table, table_map read_tables, const MY_BITMAP *fields_to_ignore, double rows_in_table)
 Calculate the filter contribution that is relevant for table 'filter_for_table' for this item. More...
 
bool error_json ()
 Get the value to return from val_json() in case of errors. More...
 
bool get_date_from_non_temporal (MYSQL_TIME *ltime, my_time_flags_t fuzzydate)
 Convert a non-temporal type to date. More...
 
bool get_time_from_non_temporal (MYSQL_TIME *ltime)
 Convert a non-temporal type to time. More...
 
type_conversion_status save_time_in_field (Field *field)
 
type_conversion_status save_date_in_field (Field *field)
 
type_conversion_status save_str_value_in_field (Field *field, String *result)
 
virtual const char * full_name () const
 
virtual bool basic_const_item () const
 Returns true if this is a simple constant item like an integer, not a constant expression. More...
 
virtual Itemclone_item () const
 
virtual cond_result eq_cmp_result () const
 
uint float_length (uint decimals_par) const
 
virtual uint decimal_precision () const
 
int decimal_int_part () const
 
virtual uint time_precision ()
 TIME precision of the item: 0..6. More...
 
virtual uint datetime_precision ()
 DATETIME precision of the item: 0..6. More...
 
bool const_item () const
 Returns true if item is constant, regardless of query evaluation state. More...
 
bool const_for_execution () const
 Returns true if item is constant during one query execution. More...
 
bool may_evaluate_const (const THD *thd) const
 Return true if this is a const item that may be evaluated in the current phase of statement processing. More...
 
void print_item_w_name (const THD *thd, String *, enum_query_type query_type) const
 
void print_for_order (const THD *thd, String *str, enum_query_type query_type, bool used_alias) const
 Prints the item when it's part of ORDER BY and GROUP BY. More...
 
virtual void split_sum_func (THD *, Ref_item_array, List< Item > &)
 
void split_sum_func2 (THD *thd, Ref_item_array ref_item_array, List< Item > &fields, Item **ref, bool skip_registered)
 
virtual bool get_date (MYSQL_TIME *ltime, my_time_flags_t fuzzydate)=0
 
virtual bool get_time (MYSQL_TIME *ltime)=0
 
virtual bool get_timeval (struct timeval *tm, int *warnings)
 Get timestamp in "struct timeval" format. More...
 
bool update_null_value ()
 Make sure the null_value member has a correct value. More...
 
virtual void apply_is_true ()
 Apply the IS TRUE truth property, meaning that an UNKNOWN result and a FALSE result are treated the same. More...
 
virtual bool is_bool_func () const
 
virtual void no_rows_in_result ()
 
virtual Itemcopy_or_same (THD *)
 
virtual Itemcopy_andor_structure (THD *)
 
virtual Itemreal_item ()
 
virtual Itemsubstitutional_item ()
 
virtual void set_runtime_created ()
 
virtual const CHARSET_INFOcompare_collation () const
 
virtual const CHARSET_INFOcharset_for_protocol () const
 
template<class T >
bool walk_helper_thunk (uchar *arg)
 
virtual Itemtransform (Item_transformer transformer, uchar *arg)
 Perform a generic transformation of the Item tree, by adding zero or more additional Item objects to it. More...
 
virtual Itemcompile (Item_analyzer analyzer, uchar **arg_p, Item_transformer transformer, uchar *arg_t)
 Perform a generic "compilation" of the Item tree, ie transform the Item tree by adding zero or more Item objects to it. More...
 
virtual void traverse_cond (Cond_traverser traverser, void *arg, traverse_order)
 
virtual bool intro_version (uchar *)
 
bool cleanup_processor (uchar *)
 cleanup() item if it is resolved ('fixed'). More...
 
virtual bool collect_item_field_processor (uchar *)
 
virtual bool add_field_to_set_processor (uchar *)
 Item::walk function. More...
 
virtual bool visitor_processor (uchar *arg)
 A processor to handle the select lex visitor framework. More...
 
virtual bool add_field_to_cond_set_processor (uchar *)
 Item::walk function. More...
 
virtual bool remove_column_from_bitmap (uchar *arg)
 Visitor interface for removing all column expressions (Item_field) in this expression tree from a bitmap. More...
 
virtual bool find_item_in_field_list_processor (uchar *)
 
virtual bool change_context_processor (uchar *)
 
virtual bool find_item_processor (uchar *arg)
 
virtual bool is_non_const_over_literals (uchar *)
 
virtual bool find_field_processor (uchar *)
 Is this an Item_field which references the given Field argument? More...
 
virtual bool cast_incompatible_args (uchar *)
 Wrap incompatible arguments in CAST nodes to the expected data types. More...
 
virtual bool references_select_expr_of (uchar *arg)
 
virtual bool reset_wf_state (uchar *arg)
 Reset execution state for such window function types as determined by arg. More...
 
virtual bool used_tables_for_level (uchar *arg)
 Return used table information for the specified query block (level). More...
 
virtual bool check_column_privileges (uchar *thd)
 Check privileges. More...
 
bool propagate_derived_used (uchar *)
 Propagate components that use referenced columns from derived tables. More...
 
bool propagate_set_derived_used (uchar *)
 Called by Item::walk() to set all the referenced items' derived_used flag. More...
 
virtual bool aggregate_check_distinct (uchar *)
 
virtual bool aggregate_check_group (uchar *)
 
virtual bool is_strong_side_column_not_in_fd (uchar *)
 
virtual bool is_column_not_in_fd (uchar *)
 
virtual Bool3 local_column (const SELECT_LEX *) const
 
virtual bool has_aggregate_ref_in_group_by (uchar *)
 Check if an aggregate is referenced from within the GROUP BY clause of the query block in which it is aggregated. More...
 
virtual bool cache_const_expr_analyzer (uchar **cache_item)
 Check if an item is a constant one and can be cached. More...
 
Itemcache_const_expr_transformer (uchar *item)
 Cache item if needed. More...
 
virtual bool equality_substitution_analyzer (uchar **)
 
virtual Itemequality_substitution_transformer (uchar *)
 
virtual bool check_partition_func_processor (uchar *)
 Check if a partition function is allowed. More...
 
virtual bool subst_argument_checker (uchar **arg)
 
virtual Itemexplain_subquery_propagator (uchar *)
 
virtual Itemequal_fields_propagator (uchar *)
 
virtual bool set_no_const_sub (uchar *)
 
virtual Itemreplace_equal_field (uchar *)
 
virtual bool check_valid_arguments_processor (uchar *)
 
virtual bool check_gcol_depend_default_processor (uchar *args)
 Check if a generated expression depends on DEFAULT function with specific column name as argument. More...
 
virtual Itemthis_item ()
 
virtual const Itemthis_item () const
 
virtual Item ** this_item_addr (THD *, Item **addr_arg)
 
virtual uint cols () const
 
virtual Itemelement_index (uint)
 
virtual Item ** addr (uint)
 
virtual bool check_cols (uint c)
 
virtual bool null_inside ()
 
virtual void bring_value ()
 
Fieldtmp_table_field_from_field_type (TABLE *table, bool fixed_length)
 Create a field based on field_type of argument. More...
 
virtual Item_fieldfield_for_view_update ()
 
virtual Itemtruth_transformer (THD *thd, Bool_test test)
 Informs an item that it is wrapped in a truth test, in case it wants to transforms itself to implement this test by itself. More...
 
virtual Itemupdate_value_transformer (uchar *)
 
virtual Itemsafe_charset_converter (THD *thd, const CHARSET_INFO *tocs)
 
void delete_self ()
 
virtual bool is_splocal () const
 
virtual Settable_routine_parameterget_settable_routine_parameter ()
 
bool is_temporal_with_date () const
 
bool is_temporal_with_date_and_time () const
 
bool is_temporal_with_time () const
 
bool is_temporal () const
 
bool has_compatible_context (Item *item) const
 Check whether this and the given item has compatible comparison context. More...
 
virtual Field::geometry_type get_geometry_type () const
 
Stringcheck_well_formed_result (String *str, bool send_error, bool truncate)
 Verifies that the input string is well-formed according to its character set. More...
 
bool eq_by_collation (Item *item, bool binary_cmp, const CHARSET_INFO *cs)
 
virtual bool is_expensive ()
 
uint32 max_char_length () const
 
void fix_char_length (uint32 max_char_length_arg)
 
virtual bool is_outer_field () const
 
bool is_blob_field () const
 Check if an item either is a blob field, or will be represented as a BLOB field if a field is created based on this item. More...
 
bool has_subquery () const
 
bool has_stored_program () const
 
bool has_aggregation () const
 
void set_aggregation ()
 Set the "has aggregation" property. More...
 
void reset_aggregation ()
 Reset the "has aggregation" property. More...
 
bool has_wf () const
 
void set_wf ()
 Set the "has window function" property. More...
 
bool has_rollup_expr () const
 
void set_rollup_expr ()
 Set the property: this item (tree) contains a reference to a ROLLUP expr. More...
 
bool has_grouping_func () const
 
void set_grouping_func ()
 Set the property: this item is a call to GROUPING. More...
 
virtual bool created_by_in2exists () const
 Whether this Item was created by the IN->EXISTS subquery transformation. More...
 
bool is_derived_used () const
 
void mark_subqueries_optimized_away ()
 
virtual bool gc_subst_analyzer (uchar **)
 Analyzer function for GC substitution. More...
 
virtual Itemgc_subst_transformer (uchar *)
 Transformer function for GC substitution. More...
 
virtual bool replace_field_processor (uchar *)
 A processor that replaces any Fields with a Create_field_wrapper. More...
 
bool can_be_substituted_for_gc () const
 Check if this item is of a type that is eligible for GC substitution. More...
 
void aggregate_decimal_properties (Item **item, uint nitems)
 Set precision and decimals of function when this depends on arguments' values for these quantities. More...
 
void aggregate_float_properties (Item **item, uint nitems)
 Set max_length and decimals of function if function is floating point and result length/precision depends on argument ones. More...
 
void aggregate_char_length (Item **args, uint nitems)
 Set the maximum number of characters required by any of the items in args. More...
 
void aggregate_temporal_properties (Item **item, uint nitems)
 Set fractional seconds precision for temporal functions. More...
 
bool aggregate_string_properties (const char *name, Item **item, uint nitems)
 Aggregate string properties (character set, collation and maximum length) for string function. More...
 
void aggregate_num_type (Item_result result_type, Item **item, uint nitems)
 This function is used to resolve type for numeric result type of CASE, COALESCE, IF and LEAD/LAG. More...
 
virtual bool repoint_const_outer_ref (uchar *arg)
 This function applies only to Item_field objects referred to by an Item_ref object that has been marked as a const_item. More...
 
virtual Fieldget_orig_field ()
 
virtual void set_orig_field (Field *)
 
virtual bool strip_db_table_name_processor (uchar *)
 
virtual bool set_table_name (uchar *)
 Noop in Item for items that are not subclasses of Item_ident. More...
 
virtual bool supports_partial_update (const Field_json *field) const
 Check if this expression can be used for partial update of a given JSON column. More...
 
virtual bool returns_array () const
 Whether the item returns array of its data type. More...
 
virtual void allow_array_cast ()
 
A helper funciton to ensure proper usage of CAST(. More...
 
- Public Member Functions inherited from Parse_tree_node_tmpl< Context >
virtual ~Parse_tree_node_tmpl ()
 
bool is_contextualized () const
 
virtual bool contextualize (Context *pc)
 Do all context-sensitive things and mark the node as contextualized. More...
 
virtual bool contextualize_ (Context *)
 
Intermediate version of the contextualize() function More...
 
void error (Context *pc, const POS &pos) const
 syntax_error() function replacement for deferred reporting of syntax errors More...
 
void error (Context *pc, const POS &pos, const char *msg) const
 syntax_error() function replacement for deferred reporting of syntax errors More...
 
void errorf (Context *pc, const POS &pos, const char *format,...) const
 syntax_error() function replacement for deferred reporting of syntax errors More...
 

Public Attributes

Itemsubstitution
 
SELECT_LEX_UNITunit
 
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 parent JOIN. More...
 
bool changed
 
- Public Attributes inherited from Item_result_field
Fieldresult_field
 
- Public Attributes inherited from Item
Itemnext_free
 Intrusive list pointer for free list. More...
 
DTCollation collation
 Character set and collation properties assigned for this Item. More...
 
Item_name_string item_name
 Name from query. More...
 
Item_name_string orig_name
 Original item name (if it was renamed) More...
 
uint32 max_length
 Maximum length of result of evaluating this item, in number of bytes. More...
 
item_marker marker
 This member has several successive meanings, depending on the phase we're in: More...
 
Item_result cmp_context
 Comparison context. More...
 
bool fixed
 True if item has been resolved. More...
 
uint8 decimals
 Number of decimals in result when evaluating this item. More...
 
bool maybe_null
 True if this item may be null. More...
 
bool null_value
 True if item is null. More...
 
bool unsigned_flag
 
bool m_is_window_function
 True if item represents window func. More...
 

Protected Attributes

subselect_engineengine
 
subselect_engineold_engine
 
table_map used_tables_cache
 
uint max_columns
 
enum_parsing_context parsing_place
 
bool have_to_be_excluded
 
- Protected Attributes inherited from Item
String str_value
 str_values's main purpose is to cache the value in save_in_field More...
 
uint8 m_accum_properties
 

Private Types

typedef Item_result_field super
 

Private Member Functions

void accumulate_properties ()
 Accumulate properties from underlying query expression. More...
 
void accumulate_properties (SELECT_LEX *select)
 Accumulate properties from underlying query block. More...
 
void accumulate_expression (Item *item)
 Accumulate properties from a selected expression within a query block. More...
 
void accumulate_condition (Item *item)
 Accumulate properties from a condition or GROUP/ORDER within a query block. More...
 
void accumulate_join_condition (List< TABLE_LIST > *tables)
 Accumulate properties from a join condition within a query block. More...
 
bool subq_opt_away_processor (uchar *arg) override
 Mark the subquery as optimized away, for EXPLAIN. More...
 

Private Attributes

bool value_assigned
 
bool traced_before
 Whether or not execution of this subselect has been traced by optimizer tracing already. More...
 

Friends

class Query_result_interceptor
 
class Item_in_optimizer
 
bool Item_field::fix_fields (THD *, Item **)
 
int Item_field::fix_outer_field (THD *, Field **, Item **)
 
bool Item_ref::fix_fields (THD *, Item **)
 
void Item_ident::fix_after_pullout (SELECT_LEX *parent_select, SELECT_LEX *removed_select)
 

Additional Inherited Members

- Static Public Member Functions inherited from Item
static void * operator new (size_t size) noexcept
 
static void * operator new (size_t size, MEM_ROOT *mem_root, const std::nothrow_t &arg=std::nothrow) noexcept
 
static void operator delete (void *ptr, size_t size)
 
static void operator delete (void *, MEM_ROOT *, const std::nothrow_t &) noexcept
 
static enum_field_types type_for_variable (enum_field_types src_type)
 Provide data type for a user or system variable, based on the type of the item that is assigned to the variable. More...
 
static enum_field_types string_field_type (uint32 max_bytes)
 Determine correct string field type, based on string length. More...
 
static const CHARSET_INFOdefault_charset ()
 
- Static Public Member Functions inherited from Parse_tree_node_tmpl< Context >
static void * operator new (size_t size, MEM_ROOT *mem_root, const std::nothrow_t &arg=std::nothrow) noexcept
 
static void operator delete (void *ptr, size_t size)
 
static void operator delete (void *, MEM_ROOT *, const std::nothrow_t &) noexcept
 
- Protected Member Functions inherited from Item
Stringmake_empty_result ()
 Sets the result value of the function an empty string, using the current character set. More...
 
bool skip_itemize (Item **res)
 Helper function to skip itemize() for grammar-allocated items. More...
 
virtual type_conversion_status save_in_field_inner (Field *field, bool no_conversions)
 Helper function which does all of the work for save_in_field(Field*, bool), except some error checking common to all subclasses, which is performed by save_in_field() itself. More...
 
Stringval_string_from_real (String *str)
 
Stringval_string_from_int (String *str)
 
Stringval_string_from_decimal (String *str)
 
Stringval_string_from_date (String *str)
 
Stringval_string_from_datetime (String *str)
 
Stringval_string_from_time (String *str)
 
my_decimalval_decimal_from_real (my_decimal *decimal_value)
 
my_decimalval_decimal_from_int (my_decimal *decimal_value)
 
my_decimalval_decimal_from_string (my_decimal *decimal_value)
 
my_decimalval_decimal_from_date (my_decimal *decimal_value)
 
my_decimalval_decimal_from_time (my_decimal *decimal_value)
 
longlong val_int_from_decimal ()
 
longlong val_int_from_date ()
 
longlong val_int_from_time ()
 
longlong val_int_from_datetime ()
 
double val_real_from_decimal ()
 
bool error_bool ()
 Get the value to return from val_bool() in case of errors. More...
 
int error_int ()
 Get the value to return from val_int() in case of errors. More...
 
double error_real ()
 Get the value to return from val_real() in case of errors. More...
 
Stringerror_str ()
 Get the value to return from val_str() in case of errors. More...
 
Stringnull_return_str ()
 Gets the value to return from val_str() when returning a NULL value. More...
 
bool get_date_from_string (MYSQL_TIME *ltime, my_time_flags_t flags)
 Convert val_str() to date in MYSQL_TIME. More...
 
bool get_date_from_real (MYSQL_TIME *ltime, my_time_flags_t flags)
 Convert val_real() to date in MYSQL_TIME. More...
 
bool get_date_from_decimal (MYSQL_TIME *ltime, my_time_flags_t flags)
 Convert val_decimal() to date in MYSQL_TIME. More...
 
bool get_date_from_int (MYSQL_TIME *ltime, my_time_flags_t flags)
 Convert val_int() to date in MYSQL_TIME. More...
 
bool get_date_from_time (MYSQL_TIME *ltime)
 Convert get_time() from time to date in MYSQL_TIME. More...
 
bool get_date_from_numeric (MYSQL_TIME *ltime, my_time_flags_t fuzzydate)
 Convert a numeric type to date. More...
 
bool get_time_from_string (MYSQL_TIME *ltime)
 Convert val_str() to time in MYSQL_TIME. More...
 
bool get_time_from_real (MYSQL_TIME *ltime)
 Convert val_real() to time in MYSQL_TIME. More...
 
bool get_time_from_decimal (MYSQL_TIME *ltime)
 Convert val_decimal() to time in MYSQL_TIME. More...
 
bool get_time_from_int (MYSQL_TIME *ltime)
 Convert val_int() to time in MYSQL_TIME. More...
 
bool get_time_from_date (MYSQL_TIME *ltime)
 Convert date to time. More...
 
bool get_time_from_datetime (MYSQL_TIME *ltime)
 Convert datetime to time. More...
 
bool get_time_from_numeric (MYSQL_TIME *ltime)
 Convert a numeric type to time. More...
 
void set_accum_properties (const Item *item)
 Set accumulated properties for an Item. More...
 
void add_accum_properties (const Item *item)
 Add more accumulated properties to an Item. More...
 
void set_subquery ()
 Set the "has subquery" property. More...
 
void set_stored_program ()
 Set the "has stored program" property. More...
 
- Protected Member Functions inherited from Parse_tree_node_tmpl< Context >
 Parse_tree_node_tmpl ()
 
- Static Protected Member Functions inherited from Item
static bool bit_func_returns_binary (const Item *a, const Item *b)
 
static bool mark_field_in_map (Mark_field *mark_field, Field *field)
 Helper function for mark_field_in_map(uchar *arg). More...
 
- Static Protected Attributes inherited from Item
static constexpr uint8 PROP_SUBQUERY = 0x01
 Set of properties that are calculated by accumulation from underlying items. More...
 
static constexpr uint8 PROP_STORED_PROGRAM = 0x02
 
static constexpr uint8 PROP_AGGREGATION = 0x04
 
static constexpr uint8 PROP_WINDOW_FUNCTION = 0x08
 
static constexpr uint8 PROP_ROLLUP_EXPR = 0x10
 Set if the item or one or more of the underlying items contains a ROLLUP expression. More...
 
static constexpr uint8 PROP_GROUPING_FUNC = 0x20
 Set if the item or one or more of the underlying items is a GROUPING function. More...
 

Member Typedef Documentation

◆ super

Member Enumeration Documentation

◆ subs_type

Enumerator
UNKNOWN_SUBS 
SINGLEROW_SUBS 
EXISTS_SUBS 
IN_SUBS 
ALL_SUBS 
ANY_SUBS 

◆ trans_res

Enumerator
RES_OK 
RES_REDUCE 
RES_ERROR 

Constructor & Destructor Documentation

◆ Item_subselect() [1/2]

Item_subselect::Item_subselect ( )

◆ Item_subselect() [2/2]

Item_subselect::Item_subselect ( const POS pos)
explicit

◆ ~Item_subselect()

Item_subselect::~Item_subselect ( )
override

Member Function Documentation

◆ accumulate_condition()

void Item_subselect::accumulate_condition ( Item item)
private

Accumulate properties from a condition or GROUP/ORDER within a query block.

Accumulate used_tables information for a condition from a query block.

Parameters
itemReference to condition.

◆ accumulate_expression()

void Item_subselect::accumulate_expression ( Item item)
private

Accumulate properties from a selected expression within a query block.

Accumulate used_tables information for an expression from a query block.

Parameters
itemReference to expression.

◆ accumulate_join_condition()

void Item_subselect::accumulate_join_condition ( List< TABLE_LIST > *  tables)
private

Accumulate properties from a join condition within a query block.

Accumulate used_tables information for the join conditions from a query block.

Parameters
tablesReferences to joined tables.

◆ accumulate_properties() [1/2]

void Item_subselect::accumulate_properties ( )
private

Accumulate properties from underlying query expression.

Accumulate missing used_tables information from embedded query expression into the subquery.

This function relies on a few other functions to accumulate information: accumulate_expression(), accumulate_condition(), accumulate_join_condition()

Currently, the only property that is accumulated is INNER_TABLE_BIT. Information about local tables and outer references are accumulated in mark_as_dependent() (

See also
item.cc). RAND_TABLE_BIT is currently not accumulated (but uncacheable is used instead).
  • When constructing an Item_subselect, maybe_null is false and null_value is true. This is obviously wrong.
  • When constructing an Item_in_subselect (subclass of Item_subselect), maybe_null is set true and null_value is set false.

We should probably keep both maybe_null and null_value as false in the constructor. Then, set maybe_null during preparation, according to type of subquery:

  • Scalar subquery is nullable when query block may have an empty result (not DUAL or implicitly grouped).
  • Scalar subquery is nullable when one of the selected expressions are nullable.
  • Scalar subquery is nullable when WHERE clause or HAVING clause is non-empty and not always true.
  • EXISTS subquery is never nullable!
  • IN subquery nullability ignores subquery cardinality.
  • IN subquery is nullable when one of the selected expressions are nullable.
  • UNIONed query blocks may cancel out nullability.

◆ accumulate_properties() [2/2]

void Item_subselect::accumulate_properties ( SELECT_LEX select)
private

Accumulate properties from underlying query block.

Accumulate missing used_tables information for a query block.

Parameters
selectReference to query block

◆ accumulate_used_tables()

void Item_subselect::accumulate_used_tables ( table_map  add_tables)
inline

Accumulate used tables.

◆ assigned() [1/2]

bool Item_subselect::assigned ( ) const
inline

◆ assigned() [2/2]

void Item_subselect::assigned ( bool  a)
inline

◆ change_engine()

bool Item_subselect::change_engine ( subselect_engine eng)
inline

◆ check_function_as_value_generator()

bool Item_subselect::check_function_as_value_generator ( uchar args)
inlineoverridevirtual

Check if this item is allowed for a virtual column or inside a default expression.

Should be overridden in child classes.

Parameters
[in,out]argsDue to the limitation of Item::walk() it is declared as a pointer to uchar, underneath there's a actually a structure of type Check_function_as_value_generator_parameters. It is used mainly in Item_field.
Returns
true if function is not accepted

Reimplemented from Item_result_field.

◆ clean_up_after_removal()

bool Item_subselect::clean_up_after_removal ( uchar arg)
overridevirtual

Clean up after removing the subquery from the item tree.

Call SELECT_LEX_UNIT::exclude_tree() to unlink it from its master and to unlink direct SELECT_LEX children from all_selects_list.

Don't unlink subqueries that are not descendants of the starting point (root) of the removal and cleanup.

Reimplemented from Item.

◆ cleanup()

void Item_subselect::cleanup ( )
overridevirtual

◆ exec()

bool Item_subselect::exec ( THD thd)
virtual

Reimplemented in Item_in_subselect.

◆ explain_subquery_checker()

bool Item_subselect::explain_subquery_checker ( uchar **  arg)
overridevirtual

Register subquery to the table where it is used within a condition.

Parameters
argqep_row to which the subquery belongs
Return values
false
Note
We always return "false" as far as we don't want to dive deeper because we explain inner subqueries in their joins contexts.

Reimplemented from Item.

◆ fix_after_pullout()

void Item_subselect::fix_after_pullout ( SELECT_LEX parent_select,
SELECT_LEX removed_select 
)
overridevirtual
See also
SELECT_LEX_UNIT::fix_after_pullout()

Reimplemented from Item.

Reimplemented in Item_in_subselect.

◆ fix_fields()

bool Item_subselect::fix_fields ( THD thd,
Item **  ref 
)
overridevirtual

Reimplemented from Item.

Reimplemented in Item_in_subselect.

◆ func_name()

const char* Item_subselect::func_name ( ) const
inlineoverridevirtual

Implements Item_result_field.

◆ get_engine_for_explain()

const subselect_engine* Item_subselect::get_engine_for_explain ( ) const
inline

EXPLAIN needs read-only access to the engine.

◆ get_tmp_table_item()

Item * Item_subselect::get_tmp_table_item ( THD thd)
overridevirtual

Reimplemented from Item.

◆ have_guarded_conds()

virtual bool Item_subselect::have_guarded_conds ( )
inlinevirtual

Reimplemented in Item_in_subselect.

◆ inform_item_in_cond_of_tab()

bool Item_subselect::inform_item_in_cond_of_tab ( uchar arg)
overridevirtual

Tells an Item that it is in the condition of a JOIN_TAB of a query block.

Parameters
argA std::pair: first argument is the query block, second is the index of JOIN_TAB in JOIN's array.

The Item records this fact and can deduce from it the estimated number of times that it will be evaluated. If the JOIN_TAB doesn't belong to the query block owning this Item_subselect, it must belong to a more inner query block (not a more outer, as the walk() doesn't dive into subqueries); in that case, it must be that Item_subselect is the left-hand-side of a subquery transformed with IN-to-EXISTS and has been wrapped in Item_cache and then injected into the WHERE/HAVING of that subquery; but then the Item_subselect will not be evaluated when the JOIN_TAB's condition is evaluated (Item_cache will short-circuit it); it will be evaluated when the IN(subquery) (Item_in_optimizer) is - that's when the Item_cache is updated. Thus, we will ignore JOIN_TAB in this case.

Reimplemented from Item.

◆ init()

void Item_subselect::init ( SELECT_LEX select,
Query_result_subquery result 
)

◆ is_evaluated()

bool Item_subselect::is_evaluated ( ) const

◆ is_null()

bool Item_subselect::is_null ( )
inlineoverridevirtual

Reimplemented from Item.

◆ is_uncacheable()

bool Item_subselect::is_uncacheable ( ) const
inline

◆ not_null_tables()

table_map Item_subselect::not_null_tables ( ) const
inlineoverridevirtual

Reimplemented from Item.

◆ place()

enum_parsing_context Item_subselect::place ( )
inline

◆ print()

void Item_subselect::print ( const THD ,
String str,
enum_query_type   
) const
overridevirtual

This method is used for to:

  • to generate a view definition query (SELECT-statement);
  • to generate a SQL-query for EXPLAIN EXTENDED;
  • to generate a SQL-query to be shown in INFORMATION_SCHEMA;
  • to generate a SQL-query that looks like a prepared statement for query_rewrite
  • debug.

For more information about view definition query, INFORMATION_SCHEMA query and why they should be generated from the Item-tree,

See also
mysql_register_view().

Reimplemented from Item.

Reimplemented in Item_allany_subselect, Item_in_subselect, Item_exists_subselect, and Item_maxmin_subselect.

◆ reset()

virtual void Item_subselect::reset ( void  )
inlinevirtual

◆ reset_value_registration()

virtual void Item_subselect::reset_value_registration ( )
inlinevirtual

Reimplemented in Item_maxmin_subselect.

◆ resolve_type()

bool Item_subselect::resolve_type ( THD thd)
overridevirtual

Resolve type-related information for this item, such as result field type, maximum size, precision, signedness, character set and collation.

Also check compatibility of argument types and return error when applicable. Also adjust nullability when applicable.

Parameters
thdthread handler
Returns
false if success, true if error

Implements Item_result_field.

Reimplemented in Item_exists_subselect, and Item_singlerow_subselect.

◆ select_transformer()

virtual trans_res Item_subselect::select_transformer ( THD thd,
SELECT_LEX select 
)
pure virtual

◆ subq_opt_away_processor()

bool Item_subselect::subq_opt_away_processor ( uchar arg)
overrideprivatevirtual

Mark the subquery as optimized away, for EXPLAIN.

Reimplemented from Item.

◆ substype()

virtual subs_type Item_subselect::substype ( ) const
inlinevirtual

◆ type()

Item::Type Item_subselect::type ( ) const
overridevirtual

Implements Item.

◆ update_used_tables()

void Item_subselect::update_used_tables ( )
overridevirtual

Reimplemented from Item.

◆ used_tables()

table_map Item_subselect::used_tables ( ) const
inlineoverridevirtual

Reimplemented from Item_result_field.

◆ walk()

bool Item_subselect::walk ( Item_processor  processor,
enum_walk  walk,
uchar arg 
)
overridevirtual

Traverses a tree of Items in prefix and/or postfix order.

Optionally walks into subqueries.

Parameters
processorprocessor function to be invoked per item returns true to abort traversal, false to continue
walkcontrols how to traverse the item tree enum_walk::PREFIX: call processor before invoking children enum_walk::POSTFIX: call processor after invoking children enum_walk::SUBQUERY go down into subqueries walk values are bit-coded and may be combined. Omitting both enum_walk::PREFIX and enum_walk::POSTFIX is undefined behaviour.
argOptional pointer to a walk-specific object
Return values
falsewalk succeeded
truewalk aborted by agreement, an error may have been reported

Reimplemented from Item.

Reimplemented in Item_in_subselect.

◆ walk_body()

bool Item_subselect::walk_body ( Item_processor  processor,
enum_walk  walk,
uchar arg 
)

Workaround for bug in gcc 4.1.

See also
Item_in_subselect::walk()

Friends And Related Function Documentation

◆ Item_field::fix_fields

bool Item_field::fix_fields ( THD ,
Item **   
)
friend

◆ Item_field::fix_outer_field

int Item_field::fix_outer_field ( THD ,
Field **  ,
Item **   
)
friend

◆ Item_ident::fix_after_pullout

void Item_ident::fix_after_pullout ( SELECT_LEX parent_select,
SELECT_LEX removed_select 
)
friend

◆ Item_in_optimizer

friend class Item_in_optimizer
friend

◆ Item_ref::fix_fields

bool Item_ref::fix_fields ( THD ,
Item **   
)
friend

◆ Query_result_interceptor

friend class Query_result_interceptor
friend

Member Data Documentation

◆ changed

bool Item_subselect::changed

◆ engine

subselect_engine* Item_subselect::engine
protected

◆ have_to_be_excluded

bool Item_subselect::have_to_be_excluded
protected

◆ in_cond_of_tab

int Item_subselect::in_cond_of_tab

If !=NO_PLAN_IDX: this Item is in the condition attached to the JOIN_TAB having this index in the parent JOIN.

◆ max_columns

uint Item_subselect::max_columns
protected

◆ old_engine

subselect_engine* Item_subselect::old_engine
protected

◆ parsing_place

enum_parsing_context Item_subselect::parsing_place
protected

◆ substitution

Item* Item_subselect::substitution

◆ traced_before

bool Item_subselect::traced_before
private

Whether or not execution of this subselect has been traced by optimizer tracing already.

If optimizer trace option REPEATED_SUBSELECT is disabled, this is used to disable tracing after the first one.

◆ unit

SELECT_LEX_UNIT* Item_subselect::unit

◆ used_tables_cache

table_map Item_subselect::used_tables_cache
protected

◆ value_assigned

bool Item_subselect::value_assigned
private

The documentation for this class was generated from the following files: