MySQL 8.0.40
Source Code Documentation
|
#include <item_func.h>
Public Member Functions | |
virtual uint | argument_count () const |
Item ** | arguments () const |
enum Type | type () const override |
virtual enum Functype | functype () const |
Item_func () | |
Item_func (const POS &pos) | |
Item_func (Item *a) | |
Item_func (const POS &pos, Item *a) | |
Item_func (Item *a, Item *b) | |
Item_func (const POS &pos, Item *a, Item *b) | |
Item_func (Item *a, Item *b, Item *c) | |
Item_func (const POS &pos, Item *a, Item *b, Item *c) | |
Item_func (Item *a, Item *b, Item *c, Item *d) | |
Item_func (const POS &pos, Item *a, Item *b, Item *c, Item *d) | |
Item_func (Item *a, Item *b, Item *c, Item *d, Item *e) | |
Item_func (const POS &pos, Item *a, Item *b, Item *c, Item *d, Item *e) | |
Item_func (Item *a, Item *b, Item *c, Item *d, Item *e, Item *f) | |
Item_func (const POS &pos, Item *a, Item *b, Item *c, Item *d, Item *e, Item *f) | |
Item_func (mem_root_deque< Item * > *list) | |
Item_func (const POS &pos, PT_item_list *opt_list) | |
Item_func (THD *thd, const Item_func *item) | |
virtual Item * | get_arg (uint i) |
Get the i'th argument of the function that this object represents. More... | |
virtual const Item * | get_arg (uint i) const |
Get the i'th argument of the function that this object represents. More... | |
virtual Item * | set_arg (THD *, uint, Item *) |
bool | itemize (Parse_context *pc, Item **res) override |
The same as contextualize() but with additional parameter. More... | |
bool | fix_fields (THD *, Item **ref) override |
bool | fix_func_arg (THD *, Item **arg) |
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.g by semijoin conversion. More... | |
virtual bool | resolve_type_inner (THD *) |
Resolve type of function after all arguments have had their data types resolved. More... | |
bool | propagate_type (THD *thd, const Type_properties &type) override |
Default implementation for all functions: Propagate base_item's type into all arguments. More... | |
virtual table_map | get_initial_pseudo_tables () const |
Returns the pseudo tables depended upon in order to evaluate this function expression. More... | |
table_map | used_tables () const override |
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 would contain a NULL row generated by a LEFT or RIGHT join, the item would not be true). More... | |
void | update_used_tables () override |
Updates used tables, not null tables information and accumulates properties up the item tree, cf. More... | |
void | set_used_tables (table_map map) |
bool | eq (const Item *item, bool binary_cmp) const override |
virtual optimize_type | select_optimize (const THD *) |
virtual bool | have_rev_func () const |
virtual Item * | key_item () const |
bool | set_arguments (mem_root_deque< Item * > *list, bool context_free) |
Copy arguments from list to args array. More... | |
void | split_sum_func (THD *thd, Ref_item_array ref_item_array, mem_root_deque< Item * > *fields) override |
See comments in Item_cmp_func::split_sum_func() More... | |
void | print (const THD *thd, String *str, enum_query_type query_type) const override |
This method is used for to: More... | |
void | print_op (const THD *thd, String *str, enum_query_type query_type) const |
void | print_args (const THD *thd, String *str, uint from, enum_query_type query_type) const |
virtual void | fix_num_length_and_dec () |
virtual bool | is_deprecated () const |
bool | get_arg0_date (MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) |
bool | get_arg0_time (MYSQL_TIME *ltime) |
bool | is_null () override |
The method allows to determine nullness of a complex expression without fully evaluating it, instead of calling val*() then checking null_value. More... | |
void | signal_divide_by_null () |
void | signal_invalid_argument_for_log () |
Field * | tmp_table_field (TABLE *t_arg) override |
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 the query that runs after the materialization. More... | |
my_decimal * | val_decimal (my_decimal *) override |
bool | agg_arg_charsets (DTCollation &c, Item **items, uint nitems, uint flags, int item_sep) |
bool | agg_arg_charsets_for_string_result (DTCollation &c, Item **items, uint nitems, int item_sep=1) |
bool | agg_arg_charsets_for_comparison (DTCollation &c, Item **items, uint nitems, int item_sep=1) |
bool | walk (Item_processor processor, enum_walk walk, uchar *arg) override |
Traverses a tree of Items in prefix and/or postfix order. More... | |
Item * | transform (Item_transformer transformer, uchar *arg) override |
Transform an Item_func object with a transformer callback function. More... | |
Item * | compile (Item_analyzer analyzer, uchar **arg_p, Item_transformer transformer, uchar *arg_t) override |
Compile Item_func object with a processor and a transformer callback functions. More... | |
void | traverse_cond (Cond_traverser traverser, void *arg, traverse_order order) override |
double | check_float_overflow (double value) |
Throw an error if the input double number is not finite, i.e. More... | |
longlong | check_integer_overflow (longlong value, bool val_unsigned) |
Throw an error if the input BIGINT value represented by the (longlong value, bool unsigned flag) pair cannot be returned by the function, i.e. More... | |
int | check_decimal_overflow (int error) |
Throw an error if the error code of a DECIMAL operation is E_DEC_OVERFLOW. More... | |
bool | has_timestamp_args () |
bool | has_date_args () |
bool | has_time_args () |
bool | has_datetime_args () |
bool | check_valid_arguments_processor (uchar *) override |
Item * | gc_subst_transformer (uchar *arg) override |
Transformer function for GC substitution. More... | |
bool | resolve_type (THD *thd) override |
Resolve type-related information for this item, such as result field type, maximum size, precision, signedness, character set and collation. More... | |
virtual enum_const_item_cache | can_cache_json_arg (Item *arg) |
Whether an arg of a JSON function can be cached to avoid repetitive string->JSON conversion. More... | |
virtual bool | contains_only_equi_join_condition () const |
Whether this Item is an equi-join condition. More... | |
Public Member Functions inherited from Item_result_field | |
Item_result_field ()=default | |
Item_result_field (const POS &pos) | |
Item_result_field (THD *thd, const Item_result_field *item) | |
Field * | get_tmp_table_field () override |
If this Item is being materialized into a temporary table, returns the field that is being materialized into. More... | |
void | set_result_field (Field *field) override |
bool | is_result_field () const override |
Field * | get_result_field () const override |
void | cleanup () override |
Called for every Item after use (preparation and execution). More... | |
virtual const char * | func_name () const =0 |
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... | |
~Item () override=default | |
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 | notify_removal () |
Called when an item has been removed, can be used to notify external objects about the removal, e.g subquery predicates that are part of the sj_candidates container. More... | |
virtual void | make_field (Send_field *field) |
virtual Field * | make_string_field (TABLE *table) const |
Create a field to hold a string value from an item. More... | |
void | quick_fix_field () |
virtual void | set_can_use_prefix_key () |
bool | propagate_type (THD *thd, enum_field_types def=MYSQL_TYPE_VARCHAR, bool pin=false, bool inherit=false) |
Wrapper for easier calling of propagate_type(const Type_properties &). More... | |
virtual void | mark_json_as_scalar () |
For Items with data type JSON, mark that a string argument is treated as a scalar JSON value. More... | |
virtual std::optional< ContainedSubquery > | get_contained_subquery (const Query_block *outer_query_block) |
If this item represents a IN/ALL/ANY/comparison_operator subquery, return that (along with data on how it will be executed). More... | |
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... | |
void | save_in_field_no_error_check (Field *field, bool no_conversions) |
A slightly faster value of save_in_field() that returns no error value (you will need to check thd->is_error() yourself), and does not support saving into hidden fields for functional indexes. 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 Item_result | result_type () const |
virtual Item_result | numeric_context_result_type () const |
Result type when an item appear in a numeric context. More... | |
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... | |
virtual void | set_data_type_inherited () |
Set data type for item as inherited. More... | |
virtual void | pin_data_type () |
Pin the data type for the item. More... | |
enum_field_types | data_type () const |
Retrieve the derived data type of the Item. More... | |
virtual enum_field_types | actual_data_type () const |
Retrieve actual data type for an item. More... | |
virtual enum_field_types | default_data_type () const |
Get the default data (output) type for the specific item. More... | |
void | set_data_type (enum_field_types data_type) |
Set the data type of the current Item. More... | |
void | set_data_type_null () |
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 scale) |
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 (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 (uint32 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_geometry () |
Set the data type of the Item to be GEOMETRY. 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_bit () |
Set the data type of the Item to be bit. More... | |
void | set_data_type_from_item (const Item *item) |
Set data type properties of the item from the properties of another item. More... | |
virtual TYPELIB * | get_typelib () const |
Get the typelib information for an item of type set or enum. 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 |
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 | int_sort_key () |
Produces a key suitable for filesort. 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 String * | val_str (String *str)=0 |
virtual String * | val_str_ascii (String *str) |
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... | |
my_decimal * | error_decimal (my_decimal *decimal_value) |
Get the value to return from val_decimal() in case of errors. More... | |
String * | error_str () |
Get the value to return from val_str() in case of errors. 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... | |
bool | may_eval_const_item (const THD *thd) const |
virtual Item * | clone_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... | |
bool | is_non_deterministic () const |
bool | is_outer_reference () const |
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... | |
void | split_sum_func2 (THD *thd, Ref_item_array ref_item_array, mem_root_deque< 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 (my_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 Item * | copy_or_same (THD *) |
virtual Item * | copy_andor_structure (THD *) |
virtual Item * | real_item () |
virtual const Item * | real_item () const |
virtual const CHARSET_INFO * | compare_collation () const |
virtual const CHARSET_INFO * | charset_for_protocol () |
template<class T > | |
auto | walk_helper_thunk (uchar *arg) |
template<class T > | |
auto | analyze_helper_thunk (uchar **arg) |
See CompileItem. More... | |
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 | collect_item_field_or_ref_processor (uchar *) |
virtual bool | collect_item_field_or_view_ref_processor (uchar *) |
Collects fields and view references that have the qualifying table in the specified query block. More... | |
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 | 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 | 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... | |
virtual bool | inform_item_in_cond_of_tab (uchar *) |
virtual void | bind_fields () |
Bind objects from the current execution context to field objects in item trees. More... | |
virtual bool | clean_up_after_removal (uchar *arg) |
Clean up after removing the item from the item tree. 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 Query_block *) const |
virtual bool | collect_scalar_subqueries (uchar *) |
virtual bool | collect_grouped_aggregates (uchar *) |
virtual bool | collect_subqueries (uchar *) |
virtual bool | update_depended_from (uchar *) |
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... | |
bool | visit_all_analyzer (uchar **) |
virtual bool | cache_const_expr_analyzer (uchar **cache_item) |
Check if an item is a constant one and can be cached. More... | |
Item * | cache_const_expr_transformer (uchar *item) |
Cache item if needed. More... | |
virtual bool | equality_substitution_analyzer (uchar **) |
virtual Item * | equality_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 bool | explain_subquery_checker (uchar **) |
virtual Item * | explain_subquery_propagator (uchar *) |
virtual Item * | equal_fields_propagator (uchar *) |
virtual bool | disable_constant_propagation (uchar *) |
virtual Item * | replace_equal_field (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 Item * | replace_with_derived_expr (uchar *arg) |
Assuming this expression is part of a condition that would be pushed to the WHERE clause of a materialized derived table, replace, in this expression, each derived table's column with a clone of the expression lying under it in the derived table's definition. More... | |
virtual Item * | replace_with_derived_expr_ref (uchar *arg) |
Assuming this expression is part of a condition that would be pushed to the HAVING clause of a materialized derived table, replace, in this expression, each derived table's column with a reference to the expression lying under it in the derived table's definition. More... | |
virtual Item * | replace_view_refs_with_clone (uchar *arg) |
Assuming this expression is part of a condition that would be pushed to a materialized derived table, replace, in this expression, each view reference with a clone of the expression in merged derived table's definition. More... | |
virtual Item * | this_item () |
virtual const Item * | this_item () const |
virtual Item ** | this_item_addr (THD *, Item **addr_arg) |
virtual uint | cols () const |
virtual Item * | element_index (uint) |
virtual Item ** | addr (uint) |
virtual bool | check_cols (uint c) |
virtual bool | null_inside () |
virtual void | bring_value () |
Field * | tmp_table_field_from_field_type (TABLE *table, bool fixed_length) const |
Create a field based on field_type of argument. More... | |
virtual Item_field * | field_for_view_update () |
virtual Item * | truth_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 Item * | update_value_transformer (uchar *) |
virtual Item * | replace_scalar_subquery (uchar *) |
When walking the item tree seeing an Item_singlerow_subselect matching a target, replace it with a substitute field used when transforming scalar subqueries into derived tables. More... | |
virtual Item * | replace_item_field (uchar *) |
Transform processor used by Query_block::transform_grouped_to_derived to replace fields which used to be at the transformed query block with corresponding fields in the new derived table containing the grouping operation of the original transformed query block. More... | |
virtual Item * | replace_item_view_ref (uchar *) |
virtual Item * | replace_aggregate (uchar *) |
virtual Item * | replace_outer_ref (uchar *) |
virtual bool | update_aggr_refs (uchar *) |
A walker processor overridden by Item_aggregate_ref, q.v. More... | |
virtual Item * | safe_charset_converter (THD *thd, const CHARSET_INFO *tocs) |
void | delete_self () |
Delete this item. More... | |
virtual bool | is_splocal () const |
virtual Settable_routine_parameter * | get_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 |
String * | check_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 |
uint32 | max_char_length (const CHARSET_INFO *cs) 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... | |
uint | reference_count () const |
void | increment_ref_count () |
Increment reference count. More... | |
uint | decrement_ref_count () |
Decrement reference count. 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... | |
void | mark_subqueries_optimized_away () |
virtual bool | gc_subst_analyzer (uchar **) |
Analyzer 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 (bool array=false) 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 bool | strip_db_table_name_processor (uchar *) |
bool | is_abandoned () const |
bool | is_nullable () const |
void | set_nullable (bool nullable) |
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 function to ensure proper usage of CAST(. More... | |
Public Member Functions inherited from Parse_tree_node_tmpl< Context > | |
virtual | ~Parse_tree_node_tmpl ()=default |
bool | is_contextualized () const |
virtual bool | contextualize (Context *pc) |
Do all context-sensitive things and mark the node as contextualized. 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 | |
uint | arg_count |
How many arguments in 'args'. More... | |
Public Attributes inherited from Item | |
Item * | next_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 | null_value |
True if item is null. More... | |
bool | unsigned_flag |
bool | m_is_window_function |
True if item represents window func. More... | |
bool | hidden {false} |
If the item is in a SELECT list (Query_block::fields) and hidden is true, the item wasn't actually in the list as given by the user (it was added by the optimizer, to e.g. More... | |
bool | m_in_check_constraint_exec_ctx {false} |
True if item is a top most element in the expression being evaluated for a check constraint. More... | |
Protected Member Functions | |
bool | param_type_uses_non_param (THD *thd, enum_field_types def=MYSQL_TYPE_VARCHAR) |
bool | param_type_is_default (THD *thd, uint start, uint end, uint step, enum_field_types def) |
For arguments of this Item_func ("args" array), in range [start, start+step, start+2*step,...,end[ : if they're a PS parameter with invalid (not known) type, give them default type "def". More... | |
bool | param_type_is_default (THD *thd, uint start, uint end, enum_field_types def=MYSQL_TYPE_VARCHAR) |
bool | param_type_is_rejected (uint start, uint end) |
For arguments of this Item_func ("args" array), in range [start,end[ : sends error if they're a dynamic parameter. More... | |
const Item_field * | contributes_to_filter (table_map read_tables, table_map filter_for_table, const MY_BITMAP *fields_to_ignore) const |
Whether or not an item should contribute to the filtering effect (. More... | |
virtual bool | may_have_named_parameters () const |
Named parameters are allowed in a parameter list. More... | |
bool | is_non_const_over_literals (uchar *) override |
bool | check_function_as_value_generator (uchar *checker_args) override |
Check if this item is allowed for a virtual column or inside a default expression. More... | |
bool | is_valid_for_pushdown (uchar *arg) override |
Check if all the columns present in this expression are from the derived table. More... | |
bool | check_column_in_window_functions (uchar *arg) override |
Check if all the columns present in this expression are present in PARTITION clause of window functions of the derived table. More... | |
bool | check_column_in_group_by (uchar *arg) override |
Check if all the columns present in this expression are present in GROUP BY clause of the derived table. More... | |
longlong | val_int_from_real () |
Protected Member Functions inherited from Item | |
String * | make_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... | |
String * | val_string_from_real (String *str) |
String * | val_string_from_int (String *str) |
String * | val_string_from_decimal (String *str) |
String * | val_string_from_date (String *str) |
String * | val_string_from_datetime (String *str) |
String * | val_string_from_time (String *str) |
my_decimal * | val_decimal_from_real (my_decimal *decimal_value) |
my_decimal * | val_decimal_from_int (my_decimal *decimal_value) |
my_decimal * | val_decimal_from_string (my_decimal *decimal_value) |
my_decimal * | val_decimal_from_date (my_decimal *decimal_value) |
my_decimal * | val_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 () |
longlong | val_int_from_string () |
double | val_real_from_decimal () |
double | val_real_from_string () |
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... | |
bool | error_date () |
Get the value to return from get_date() in case of errors. More... | |
bool | error_time () |
Get the value to return from get_time() in case of errors. More... | |
String * | null_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... | |
virtual longlong | val_date_temporal_at_utc () |
virtual longlong | val_time_temporal_at_utc () |
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 () | |
Protected Attributes | |
Item ** | args |
Array of pointers to arguments. More... | |
bool | null_on_null {true} |
Affects how to determine that NULL argument implies a NULL function return. More... | |
uint | allowed_arg_cols {1} |
table_map | used_tables_cache {0} |
Value used in calculation of result of used_tables() More... | |
table_map | not_null_tables_cache {0} |
Value used in calculation of result of not_null_tables() More... | |
Protected Attributes inherited from Item_result_field | |
Field * | result_field {nullptr} |
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 Member Functions | |
bool | alloc_args (MEM_ROOT *mem_root, unsigned num_args) |
Allocates space for the given number of arguments, if needed. More... | |
Private Attributes | |
Item * | m_embedded_arguments [2] |
Friends | |
class | udf_handler |
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 | result_to_type (Item_result result) |
static Item_result | type_to_result (enum_field_types type) |
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_INFO * | default_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 |
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... | |
enum Item_func::Functype |
|
inline |
|
inlineexplicit |
|
inline |
|
inline |
|
inlineexplicit |
Item_func::Item_func | ( | const POS & | pos, |
PT_item_list * | opt_list | ||
) |
|
inline |
|
inline |
|
inline |
|
inlineprivate |
Allocates space for the given number of arguments, if needed.
Uses m_embedded_arguments if it's big enough.
|
inlinevirtual |
Reimplemented in Item_rollup_sum_switcher.
|
inline |
|
inlinevirtual |
Whether an arg of a JSON function can be cached to avoid repetitive string->JSON conversion.
This function returns true only for those args, which are the source of JSON data. JSON path args are cached independently and for them this function returns false. Same as for all other type of args.
arg | the arg to cache |
true | arg can be cached |
false | otherwise |
Reimplemented in Item_func_json_contains, Item_func_json_contains_path, Item_func_json_overlaps, and Item_func_member_of.
|
overrideprotectedvirtual |
Check if all the columns present in this expression are present in GROUP BY clause of the derived table.
Used in checking if a condition can be pushed down to derived table.
Reimplemented from Item.
|
overrideprotectedvirtual |
Check if all the columns present in this expression are present in PARTITION clause of window functions of the derived table.
Used in checking if a condition can be pushed down to derived table.
Reimplemented from Item.
|
inline |
Throw an error if the error code of a DECIMAL operation is E_DEC_OVERFLOW.
|
inline |
Throw an error if the input double number is not finite, i.e.
is either +/-INF or NAN.
|
inlineoverrideprotectedvirtual |
Check if this item is allowed for a virtual column or inside a default expression.
Should be overridden in child classes.
[in,out] | args | Due 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. |
Reimplemented from Item_result_field.
Reimplemented in Item_func_additive_op, Item_func_mul, Item_func_div_int, Item_func_mod, Item_func_neg, Item_func_abs, Item_func_ceiling, Item_func_floor, Item_xml_str_func, Item_func_connection_id, Item_func_rand, Item_func_last_insert_id, Item_func_benchmark, Item_func_sleep, Item_udf_func, Item_func_get_lock, Item_func_release_lock, Item_func_release_all_locks, Item_source_pos_wait, Item_var_func, Item_func_match, Item_func_is_free_lock, Item_func_is_used_lock, Item_func_row_count, Item_func_sp, Item_func_found_rows, Item_func_uuid_short, Item_func_statement_digest, Item_func_statement_digest_text, Item_func_sysconst, Item_func_user, Item_load_file, Item_func_uuid, Item_func_curtime, Item_func_curdate, Item_func_now, Item_nodeset_func, Item_nodeset_to_const_comparator, Item_func_xml_update, and Item_func_unix_timestamp.
Throw an error if the input BIGINT value represented by the (longlong value, bool unsigned flag) pair cannot be returned by the function, i.e.
is not compatible with this Item's unsigned_flag.
|
inlineoverridevirtual |
Reimplemented from Item.
Reimplemented in Item_func_to_days, Item_func_to_seconds, Item_func_dayofmonth, Item_func_month, Item_func_monthname, Item_func_dayofyear, Item_func_hour, Item_func_minute, Item_func_quarter, Item_func_second, Item_func_yearweek, Item_func_year, Item_func_weekday, Item_func_unix_timestamp, Item_func_time_to_sec, Item_func_from_days, Item_extract, and Item_func_microsecond.
|
overridevirtual |
Compile Item_func object with a processor and a transformer callback functions.
First the function applies the analyzer to the root node of the Item_func object. Then if the analyzer succeeeds (returns true) the function recursively applies the compile method to each argument of the Item_func node. If the call of the method for an argument item returns a new item the old item is substituted for a new one. After this the transformer is applied to the root node of the Item_func object.
Reimplemented from Item.
|
inlinevirtual |
Whether this Item is an equi-join condition.
If this Item is a compound item (i.e. multiple condition AND'ed together), it will only return true if the Item contains only equi-join conditions AND'ed together. This is used to determine whether the condition can be used as a join condition for hash join (join conditions in hash join must be equi-join conditions), or if it should be placed as a filter after the join.
Reimplemented in Item_eq_base, Item_func_trig_cond, Item_equal, and Item_cond_and.
|
protected |
Whether or not an item should contribute to the filtering effect (.
1) The item must refer to a field in 'filter_for_table' in some way. This reference may be indirect through any number of intermediate items. For example, this item may be an Item_cond_and which refers to an Item_func_eq which refers to the field. 2) The item must not refer to other tables than those already read and the table in 'filter_for_table'
Then it contines to other properties as follows:
Item_funcs represent "<operand1> OP <operand2> [OP ...]". If the Item_func is to contribute to the filtering effect, then
1) one of the operands must be a field from 'filter_for_table' that is not in 'fields_to_ignore', and 2) depending on the Item_func type filtering effect is calculated for, one or all [1] of the other operand(s) must be an available value, i.e.:
[1] "At least one" for multiple equality (X = Y = Z = ...), "all" for the rest (e.g. BETWEEN)
read_tables | Tables earlier in the join sequence. Predicates for table 'filter_for_table' that rely on values from these tables can be part of the filter effect. |
filter_for_table | The table we are calculating filter effect for |
fields_to_ignore | Columns that should be ignored. |
|
overridevirtual |
Reimplemented from Item.
Reimplemented in Item_func_match, Item_rollup_group_item, Item_func_get_user_var, Item_func_get_system_var, Item_func_json_extract, Item_func_json_value, Item_typecast_char, Item_func_set_collation, Item_func_weight_string, Item_sum, Item_date_literal, Item_time_literal, Item_datetime_literal, Item_func_date_format, Item_date_add_interval, and Item_extract.
|
overridevirtual |
Fix after tables have been moved from one query_block level to the parent level, e.g by semijoin conversion.
Basically re-calculate all attributes dependent on the tables.
parent_query_block | query_block that tables are moved to. |
removed_query_block | query_block that tables are moved away from, child of parent_query_block. |
Reimplemented from Item.
Reimplemented in Item_func_sp, Item_func_make_set, and Item_sum.
Reimplemented from Item.
Reimplemented in Item_func_json_schema_valid, Item_func_json_schema_validation_report, Item_func_json_search, Item_sum_num, Item_sum_hybrid, Item_func_group_concat, Item_func_geomfromgeojson, Item_func_regexp, Item_func_regexp_instr, Item_non_framing_wf, Item_ntile, Item_lead_lag, Item_first_last_value, Item_nth_value, Item_sum_json, Item_func_connection_id, Item_func_rand, Item_udf_func, Item_func_set_user_var, Item_func_match, Item_func_sp, Item_func_as_geojson, Item_func_geohash, Item_func_latlongfromgeohash, Item_func_pointfromgeohash, Item_func_array_cast, Item_func_json_value, Item_func_pfs_current_thread_id, Item_str_func, Item_func_make_set, Item_sum, Item_sum_bit, Item_udf_sum, Item_func_grouping, and Item_sum_collect.
|
virtual |
Reimplemented in Item_func_numhybrid, Item_func_num1, and Item_func_neg.
|
inlinevirtual |
Reimplemented in Item_func_true, Item_func_false, Item_func_truth, Item_func_xor, Item_func_not, Item_func_match_predicate, Item_func_trig_cond, Item_func_not_all, Item_func_eq, Item_func_equal, Item_func_ge, Item_func_gt, Item_func_le, Item_func_lt, Item_func_ne, Item_func_between, Item_func_strcmp, Item_func_coalesce, Item_func_if, Item_func_nullif, Item_func_case, Item_func_in, Item_func_isnull, Item_is_not_null_test, Item_func_isnotnull, Item_func_like, Item_equal, Item_cond_and, Item_cond_or, Item_typecast_signed, Item_typecast_unsigned, Item_typecast_decimal, Item_typecast_real, Item_func_plus, Item_func_minus, Item_func_mul, Item_func_div_base, Item_func_mod, Item_func_neg, Item_func_abs, Item_func_exp, Item_func_ln, Item_func_log, Item_func_log10, Item_func_sqrt, Item_func_pow, Item_func_acos, Item_func_asin, Item_func_atan, Item_func_cos, Item_func_sin, Item_func_tan, Item_func_cot, Item_func_ceiling, Item_func_floor, Item_func_round, Item_func_sign, Item_func_degrees, Item_func_radians, Item_func_min, Item_func_max, Item_rollup_group_item, Item_udf_func, Item_func_internal_table_rows, Item_func_internal_avg_row_length, Item_func_internal_data_length, Item_func_internal_max_data_length, Item_func_internal_index_length, Item_func_internal_data_free, Item_func_internal_auto_increment, Item_func_internal_checksum, Item_func_internal_index_column_cardinality, Item_func_internal_tablespace_id, Item_func_internal_tablespace_logfile_group_number, Item_func_internal_tablespace_free_extents, Item_func_internal_tablespace_total_extents, Item_func_internal_tablespace_extent_size, Item_func_internal_tablespace_initial_size, Item_func_internal_tablespace_maximum_size, Item_func_internal_tablespace_autoextend_size, Item_func_internal_tablespace_version, Item_func_internal_tablespace_data_free, Item_func_set_user_var, Item_func_get_user_var, Item_func_get_system_var, Item_func_match, Item_func_sp, Item_func_internal_is_mandatory_role, Item_func_internal_is_enabled_role, Item_func_spatial_mbr_rel, Item_func_st_contains, Item_func_st_crosses, Item_func_st_disjoint, Item_func_st_equals, Item_func_st_intersects, Item_func_mbrcontains, Item_func_mbrcoveredby, Item_func_mbrcovers, Item_func_mbrdisjoint, Item_func_mbrequals, Item_func_mbrintersects, Item_func_mbroverlaps, Item_func_mbrtouches, Item_func_mbrwithin, Item_func_st_overlaps, Item_func_st_touches, Item_func_st_within, Item_typecast_geometry, Item_func_json_contains, Item_func_json_unquote, Item_func_array_cast, Item_func_json_overlaps, Item_func_member_of, Item_typecast_char, Item_func_set_collation, Item_func_get_dd_column_privileges, Item_func_get_dd_create_options, Item_func_get_dd_schema_options, Item_func_internal_get_comment_or_error, Item_func_get_dd_tablespace_private_data, Item_func_get_dd_index_private_data, Item_func_get_partition_nodegroup, Item_func_internal_tablespace_type, Item_func_internal_tablespace_logfile_group_name, Item_func_internal_tablespace_status, Item_func_internal_tablespace_row_format, Item_func_internal_tablespace_extra, Item_func_get_dd_property_key_value, Item_func_remove_dd_property_key, Item_func_convert_interval_to_user_interval, Item_func_internal_get_username, Item_func_internal_get_hostname, Item_func_internal_get_enabled_role_json, Item_func_internal_get_mandatory_roles_json, Item_func_internal_get_dd_column_extra, Item_func_grouping, Item_func_to_days, Item_func_to_seconds, Item_func_dayofmonth, Item_func_month, Item_func_monthname, Item_func_dayofyear, Item_func_hour, Item_func_minute, Item_func_quarter, Item_func_second, Item_func_week, Item_func_yearweek, Item_func_year, Item_typecast_year, Item_func_weekday, Item_func_dayname, Item_func_unix_timestamp, Item_func_time_to_sec, Item_date_func, Item_datetime_literal, Item_func_now_local, Item_func_from_days, Item_func_from_unixtime, Item_func_convert_tz, Item_date_add_interval, Item_extract, Item_typecast_date, Item_typecast_time, Item_typecast_datetime, Item_func_makedate, Item_func_add_time, Item_func_microsecond, Item_func_timestamp_diff, Item_func_last_day, Item_func_internal_update_time, and Item_func_internal_check_time.
Transformer function for GC substitution.
arg | List of indexed GC field |
This function transforms a search condition. It doesn't change 'this' item but rather changes its arguments. It takes list of GC fields and checks whether arguments of 'this' item matches them and index over the GC field isn't disabled with hints. If so, it replaces the argument with newly created Item_field which uses the matched GC field. The following predicates' arguments could be transformed:
After transformation comparators are updated to take into account the new field.
Note: Range optimizer is used with multi-value indexes and it prefers constants. Outer references are not considered as constants in JSON functions. However, range optimizer supports dynamic ranges, where ranges are re-optimized for each row. But the range optimizer is currently not able to handle multi-valued indexes with dynamic ranges, hence we use only constants in these cases.
Reimplemented from Item.
Get the i'th argument of the function that this object represents.
Reimplemented in Item_rollup_sum_switcher.
Get the i'th argument of the function that this object represents.
Reimplemented in Item_rollup_sum_switcher.
|
inline |
|
inline |
|
inlinevirtual |
Returns the pseudo tables depended upon in order to evaluate this function expression.
The default implementation returns the empty set.
Reimplemented in Item_func_reject_if, Item_is_not_null_test, Item_func_connection_id, Item_func_rand, Item_func_last_insert_id, Item_func_benchmark, Item_func_sleep, Item_udf_func, Item_func_get_system_var, Item_func_sp, Item_func_uuid_short, Item_func_random_bytes, Item_func_user, Item_load_file, Item_func_uuid, Item_func_curtime, Item_func_curdate, Item_func_now, and Item_func_sysdate_local.
If an Item is materialized in a temporary table, a different Item may have to be used in the part of the query that runs after the materialization.
For instance, if the Item was an Item_field, the new Item_field needs to point into the temporary table instead of the original one, but if, on the other hand, the Item was a literal constant, it can be reused as-is. This function encapsulates these policies for the different kinds of Items. See also get_tmp_table_field().
TODO: Document how aggregate functions (Item_sum) are handled.
Reimplemented from Item.
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
Reimplemented in Item_bool_func2.
|
inlinevirtual |
Reimplemented in Item_func_json_merge.
|
inlineoverrideprotectedvirtual |
Reimplemented from Item.
Reimplemented in Item_func_get_lock, Item_func_release_lock, Item_func_release_all_locks, Item_func_get_user_var, Item_func_get_system_var, Item_func_is_free_lock, and Item_func_is_used_lock.
|
inlineoverridevirtual |
The method allows to determine nullness of a complex expression without fully evaluating it, instead of calling val*() then checking null_value.
Used in Item_func_isnull/Item_func_isnotnull and Item_sum_count/Item_sum_count_distinct. Any item which can be NULL must implement this method.
false | if the expression is not NULL. |
true | if the expression is NULL, or evaluation caused an error. The null_value member is set according to the return value. |
Reimplemented from Item.
Reimplemented in Item_func_numhybrid, Item_func_spatial_mbr_rel, Item_func_spatial_relation, Item_sum, and Item_rollup_sum_switcher.
|
overrideprotectedvirtual |
Check if all the columns present in this expression are from the derived table.
Used in determining if a condition can be pushed down to derived table.
Reimplemented from Item.
Reimplemented in Item_func_get_system_var.
|
overridevirtual |
The same as contextualize() but with additional parameter.
This function finalize the construction of Item objects (see the Item(POS) constructor): we can access/change parser contexts from the itemize() function.
pc | current parse context | |
[out] | res | pointer to "this" or to a newly allocated replacement object to use in the Item tree instead |
false | success |
true | syntax/OOM/etc error |
Reimplemented from Item.
Reimplemented in Item_func_connection_id, Item_func_rand, Item_func_last_insert_id, Item_func_benchmark, Item_func_sleep, Item_udf_func, Item_func_get_lock, Item_func_release_lock, Item_func_release_all_locks, Item_source_pos_wait, Item_func_match, Item_func_is_free_lock, Item_func_is_used_lock, Item_func_row_count, Item_func_sp, Item_func_found_rows, Item_func_uuid_short, Item_func_geometry_from_text, Item_func_geometry_from_wkb, Item_wait_for_executed_gtid_set, Item_master_gtid_set_wait, Item_func_pfs_current_thread_id, Item_func_pfs_thread_id, Item_func_aes_encrypt, Item_func_aes_decrypt, Item_func_random_bytes, Item_func_database, Item_func_user, Item_func_current_user, Item_func_make_set, Item_load_file, Item_func_set_collation, Item_func_weight_string, Item_func_uuid, Item_sum, Item_udf_sum, Item_func_group_concat, Item_func_week, Item_func_unix_timestamp, Item_func_curtime, Item_func_curdate, Item_func_now_utc, PTI_function_call_nonkeyword_now, PTI_variable_aux_set_var, PTI_user_variable, and PTI_count_sym.
|
inlinevirtual |
Reimplemented in Item_func_match, Item_func_json_overlaps, and Item_func_member_of.
|
inlineprotectedvirtual |
Named parameters are allowed in a parameter list.
The syntax to name parameters in a function call is as follow: foo(expr AS named, expr named, expr AS "named", expr "named")
where "AS" is optional. Only UDF function support that syntax.
Reimplemented in Item_udf_func.
|
inlineoverridevirtual |
Return table map of tables that can't be NULL tables (tables that are used in a context where if they would contain a NULL row generated by a LEFT or RIGHT join, the item would not be true).
This expression is used on WHERE item to determinate if a LEFT JOIN can be converted to a normal join. Generally this function should return used_tables() if the function would return null if any of the arguments are null As this is only used in the beginning of optimization, the value don't have to be updated in update_used_tables()
Reimplemented from Item.
Reimplemented in Item_sum, Item_date_literal, Item_time_literal, and Item_datetime_literal.
|
inlineprotected |
|
protected |
For arguments of this Item_func ("args" array), in range [start, start+step, start+2*step,...,end[ : if they're a PS parameter with invalid (not known) type, give them default type "def".
thd | thread handler |
start | range's start (included) |
end | range's end (excluded) |
step | range's step |
def | default type |
For arguments of this Item_func ("args" array), in range [start,end[ : sends error if they're a dynamic parameter.
start | range's start (included) |
end | range's end (excluded) |
|
protected |
|
overridevirtual |
This method is used for to:
For more information about view definition query, INFORMATION_SCHEMA query and why they should be generated from the Item-tree,
Reimplemented from Item.
Reimplemented in Item_num_op, Item_typecast_signed, Item_typecast_unsigned, Item_typecast_decimal, Item_typecast_real, Item_rollup_group_item, Item_func_locate, Item_func_bit, Item_func_bit_neg, Item_func_benchmark, Item_udf_func, Item_func_set_user_var, Item_func_get_user_var, Item_func_get_system_var, Item_func_match, Item_func_spatial_mbr_rel, Item_func_spatial_relation, Item_typecast_point, Item_typecast_linestring, Item_typecast_polygon, Item_typecast_multipoint, Item_typecast_multilinestring, Item_typecast_multipolygon, Item_typecast_geometrycollection, Item_typecast_json, Item_func_array_cast, Item_func_member_of, Item_func_json_value, Item_func_trim, Item_func_make_set, Item_func_format, Item_typecast_char, Item_func_conv_charset, Item_func_set_collation, Item_func_weight_string, Item_sum, Item_udf_sum, Item_func_group_concat, Item_rollup_sum_switcher, Item_temporal_func, Item_date_literal, Item_time_literal, Item_datetime_literal, Item_date_add_interval, Item_extract, Item_typecast_date, Item_typecast_time, Item_typecast_datetime, Item_func_add_time, Item_func_timestamp_diff, Item_func_get_format, and Item_typecast_geometry.
void Item_func::print_args | ( | const THD * | thd, |
String * | str, | ||
uint | from, | ||
enum_query_type | query_type | ||
) | const |
void Item_func::print_op | ( | const THD * | thd, |
String * | str, | ||
enum_query_type | query_type | ||
) | const |
|
overridevirtual |
Default implementation for all functions: Propagate base_item's type into all arguments.
The functions that have context-aware parameter type detection must implement Item::default_data_type() and Item::resolve_type_inner().
If an SQL function or operator F embeds another SQL function or operator G: F::fix_fields() runs and calls G::fix_fields() which calls G::resolve_type(); assuming that G is outer-context dependent and has only dynamic parameters as arguments, G misses type information and thus does a no-op resolve_type(); then F::fix_fields() continues and calls F::resolve_type() which sees that G::data_type() == MYSQL_TYPE_INVALID; F thus calls G::propagate_type() to send it the necessary type information (i.e. provide the outer context); this then assigns the type to dynamic parameters of G and finishes the job of G::resolve_type() by calling G::resolve_type_inner().
Reimplemented from Item.
Reimplemented in Item_func_get_user_var.
|
inlineoverridevirtual |
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.
thd | thread handler |
Implements Item_result_field.
Reimplemented in Item_func_regexp_instr, Item_func_regexp_like, Item_func_regexp_replace, Item_func_regexp_substr, Item_func_abs, Item_func_round, Item_rollup_group_item, Item_func_find_in_set, Item_func_bit, Item_func_udf_float, Item_func_udf_int, Item_func_release_all_locks, Item_func_can_access_database, Item_func_can_access_table, Item_func_can_access_user, Item_func_can_access_trigger, Item_func_can_access_routine, Item_func_can_access_event, Item_func_can_access_resource_group, Item_func_can_access_view, Item_func_can_access_column, Item_func_is_visible_dd_object, Item_func_internal_table_rows, Item_func_internal_avg_row_length, Item_func_internal_data_length, Item_func_internal_max_data_length, Item_func_internal_index_length, Item_func_internal_data_free, Item_func_internal_auto_increment, Item_func_internal_checksum, Item_func_internal_keys_disabled, Item_func_internal_index_column_cardinality, Item_func_internal_dd_char_length, Item_func_internal_get_view_warning_or_error, Item_func_get_dd_index_sub_part_length, Item_func_internal_tablespace_id, Item_func_internal_tablespace_logfile_group_number, Item_func_internal_tablespace_free_extents, Item_func_internal_tablespace_total_extents, Item_func_internal_tablespace_extent_size, Item_func_internal_tablespace_initial_size, Item_func_internal_tablespace_maximum_size, Item_func_internal_tablespace_autoextend_size, Item_func_internal_tablespace_version, Item_func_internal_tablespace_data_free, Item_func_set_user_var, Item_func_get_user_var, Item_func_get_system_var, Item_func_row_count, Item_func_found_rows, Item_func_uuid_short, Item_func_internal_is_mandatory_role, Item_func_internal_is_enabled_role, Item_geometry_func, Item_func_as_wkt, Item_func_geohash, Item_func_spatial_mbr_rel, Item_func_gtid_subtract, Item_json_func, Item_func_json_type, Item_func_array_cast, Item_func_json_value, Item_func_pfs_current_thread_id, Item_func_pfs_thread_id, Item_func_pfs_format_bytes, Item_func_pfs_format_pico_time, Item_func_regexp, Item_func_to_base64, Item_func_aes_encrypt, Item_func_lower, Item_func_upper, Item_func_substr_index, Item_func_trim, Item_func_database, Item_func_user, Item_func_make_set, Item_func_space, Item_func_rpad, Item_func_lpad, Item_func_uuid_to_bin, Item_func_conv, Item_func_export_set, Item_func_set_collation, Item_func_weight_string, Item_func_uuid, Item_func_current_role, Item_func_roles_graphml, Item_func_get_dd_column_privileges, Item_func_get_dd_create_options, Item_func_get_dd_schema_options, Item_func_internal_get_comment_or_error, Item_func_get_dd_tablespace_private_data, Item_func_get_dd_index_private_data, Item_func_get_partition_nodegroup, Item_func_internal_tablespace_type, Item_func_internal_tablespace_logfile_group_name, Item_func_internal_tablespace_status, Item_func_internal_tablespace_row_format, Item_func_internal_tablespace_extra, Item_func_convert_cpu_id_mask, Item_func_get_dd_property_key_value, Item_func_remove_dd_property_key, Item_func_convert_interval_to_user_interval, Item_func_internal_get_username, Item_func_internal_get_hostname, Item_func_internal_get_enabled_role_json, Item_func_internal_get_mandatory_roles_json, Item_func_internal_get_dd_column_extra, Item_sum, Item_sum_variance, Item_sum_bit, Item_sum_udf_float, Item_sum_udf_int, Item_sum_udf_str, Item_sum_udf_decimal, Item_rollup_sum_switcher, Item_date_func, Item_date_literal, Item_time_literal, Item_datetime_literal, Item_func_at_time_zone, Item_func_curdate, Item_func_now, Item_func_sysdate_local, Item_func_convert_tz, Item_date_add_interval, Item_extract, Item_func_add_time, Item_func_get_format, Item_func_str_to_date, Item_nodeset_func, Item_func_xpath_position, Item_func_xpath_count, Item_func_modify_json_in_path, Item_func_numhybrid, Item_func_connection_id, Item_typecast_signed, Item_typecast_unsigned, Item_typecast_decimal, Item_typecast_real, Item_func_minus, Item_func_div, Item_func_div_int, Item_func_mod, Item_func_neg, Item_dec_func, Item_func_rand, Item_func_sign, Item_func_units, Item_func_min_max, Item_func_length, Item_func_char_length, Item_func_coercibility, Item_func_locate, Item_func_validate_password_strength, Item_func_field, Item_func_ascii, Item_func_bit_count, Item_func_last_insert_id, Item_func_benchmark, Item_func_sleep, Item_func_udf_decimal, Item_func_udf_str, Item_func_get_lock, Item_func_release_lock, Item_source_pos_wait, Item_func_is_free_lock, Item_func_is_used_lock, Item_func_sp, Item_func_geometry_from_text, Item_func_geometry_from_wkb, Item_func_as_wkb, Item_func_geometry_type, Item_func_latlongfromgeohash, Item_func_centroid, Item_func_convex_hull, Item_func_envelope, Item_func_make_envelope, Item_func_validate, Item_func_st_simplify, Item_func_point, Item_func_pointfromgeohash, Item_func_spatial_decomp, Item_func_spatial_decomp_n, Item_func_spatial_collection, Item_func_spatial_relation, Item_func_spatial_operation, Item_func_buffer_strategy, Item_func_isempty, Item_func_st_issimple, Item_func_isclosed, Item_func_isvalid, Item_func_dimension, Item_func_coordinate_mutator, Item_func_coordinate_observer, Item_func_swap_xy, Item_func_numgeometries, Item_func_numinteriorring, Item_func_numpoints, Item_func_st_area, Item_func_st_buffer, Item_func_st_length, Item_func_st_srid_mutator, Item_func_st_srid_observer, Item_func_distance, Item_func_st_frechet_distance, Item_func_st_hausdorff_distance, Item_func_st_distance_sphere, Item_func_lineinterpolate, Item_typecast_geometry, Item_wait_for_executed_gtid_set, Item_master_gtid_set_wait, Item_func_gtid_subset, Item_func_inet_aton, Item_func_inet_ntoa, Item_func_inet6_aton, Item_func_inet6_ntoa, Item_func_json_valid, Item_func_json_schema_validation_report, Item_func_json_contains, Item_func_json_contains_path, Item_typecast_json, Item_func_json_length, Item_func_json_depth, Item_func_json_keys, Item_func_json_extract, Item_func_json_array, Item_func_json_row_object, Item_func_json_search, Item_func_json_remove, Item_func_json_merge_preserve, Item_func_json_merge_patch, Item_func_json_quote, Item_func_json_unquote, Item_func_json_pretty, Item_func_json_storage_size, Item_func_json_storage_free, Item_func_member_of, Item_str_func, Item_func_md5, Item_func_sha, Item_func_sha2, Item_func_statement_digest, Item_func_statement_digest_text, Item_func_from_base64, Item_func_aes_decrypt, Item_func_random_bytes, Item_func_concat, Item_func_concat_ws, Item_func_reverse, Item_func_replace, Item_func_insert, Item_func_left, Item_func_right, Item_func_substr, Item_func_soundex, Item_func_elt, Item_func_format, Item_func_char, Item_func_repeat, Item_func_bin_to_uuid, Item_func_is_uuid, Item_func_hex, Item_func_unhex, Item_func_like_range, Item_charset_conversion, Item_load_file, Item_func_quote, Item_func_charset, Item_func_collation, Item_func_crc32, Item_func_uncompressed_length, Item_func_compress, Item_func_uncompress, Item_sum_sum, Item_sum_count, Item_sum_avg, Item_row_number, Item_rank, Item_cume_dist, Item_percent_rank, Item_ntile, Item_lead_lag, Item_first_last_value, Item_nth_value, Item_func_period_add, Item_func_period_diff, Item_func_to_days, Item_func_to_seconds, Item_func_dayofmonth, Item_func_month, Item_func_monthname, Item_func_dayofyear, Item_func_hour, Item_func_minute, Item_func_quarter, Item_func_second, Item_func_week, Item_func_yearweek, Item_func_year, Item_typecast_year, Item_func_weekday, Item_func_dayname, Item_func_unix_timestamp, Item_func_time_to_sec, Item_func_curtime, Item_func_from_days, Item_func_date_format, Item_func_from_unixtime, Item_func_sec_to_time, Item_typecast_date, Item_typecast_time, Item_typecast_datetime, Item_func_makedate, Item_func_timediff, Item_func_maketime, Item_func_microsecond, Item_func_timestamp_diff, Item_func_last_day, Item_func_internal_update_time, Item_func_internal_check_time, and Item_xml_str_func.
|
inlinevirtual |
Resolve type of function after all arguments have had their data types resolved.
Called from resolve_type() when no dynamic parameters are used and from propagate_type() otherwise.
Reimplemented in Item_func_coalesce, Item_func_if, Item_func_nullif, Item_func_case, Item_func_numhybrid, Item_func_int_val, and Item_func_min_max.
|
inlinevirtual |
Reimplemented in Item_sum, and Item_rollup_sum_switcher.
bool Item_func::set_arguments | ( | mem_root_deque< Item * > * | list, |
bool | context_free | ||
) |
Copy arguments from list to args array.
list | function argument list |
context_free | true: for use in context-independent constructors (Item_func(POS,...)) i.e. for use in the parser |
|
inline |
void Item_func::signal_divide_by_null | ( | ) |
void Item_func::signal_invalid_argument_for_log | ( | ) |
|
overridevirtual |
See comments in Item_cmp_func::split_sum_func()
Reimplemented from Item.
Reimplemented in Item_func_make_set, Item_sum, Item_sum_hybrid, Item_lead_lag, Item_first_last_value, and Item_nth_value.
Reimplemented from Item_result_field.
Reimplemented in Item_func_sp, Item_geometry_func, Item_func_array_cast, Item_temporal_func, and Item_temporal_hybrid_func.
|
overridevirtual |
Transform an Item_func object with a transformer callback function.
The function recursively applies the transform method to each argument of the Item_func node. If the call of the method for an argument item returns a new item the old item is substituted for a new one. After this the transformer is applied to the root node of the Item_func object.
Reimplemented from Item.
Reimplemented in Item_func_make_set.
|
overridevirtual |
Reimplemented from Item.
|
inlineoverridevirtual |
Implements Item.
Reimplemented in Item_sum, Item_nodeset_func, and Item_nodeset_to_const_comparator.
|
overridevirtual |
Updates used tables, not null tables information and accumulates properties up the item tree, cf.
used_tables_cache, not_null_tables_cache and m_accum_properties.
TODO(sgunders): Consider just removing these caches; it causes a lot of bugs (cache invalidation is known to be a complex problem), and the performance benefits are dubious.
Reimplemented from Item.
Reimplemented in Item_func_modify_json_in_path, Item_rollup_group_item, Item_func_get_user_var, Item_func_match, Item_func_sp, Item_func_make_set, Item_sum, and Item_func_grouping.
|
inlineoverridevirtual |
Reimplemented from Item_result_field.
Reimplemented in Item_rollup_group_item, Item_sum, Item_rollup_sum_switcher, Item_date_literal, Item_time_literal, and Item_datetime_literal.
|
overridevirtual |
Implements Item.
Reimplemented in Item_func_numhybrid, Item_typecast_decimal, Item_func_min_max, Item_func_udf_decimal, Item_func_set_user_var, Item_func_get_user_var, Item_func_array_cast, Item_str_func, Item_sum_num, Item_sum_int, Item_sum_sum, Item_sum_avg, Item_sum_variance, Item_sum_hybrid, Item_sum_udf_float, Item_sum_udf_int, Item_sum_udf_decimal, Item_row_number, Item_rank, Item_ntile, Item_cume_dist, Item_percent_rank, Item_rollup_group_item, Item_sum_udf_str, Item_rollup_sum_switcher, Item_func_udf_float, Item_func_udf_str, Item_func_get_system_var, Item_func_sp, Item_sum_json, Item_lead_lag, Item_first_last_value, Item_nth_value, Item_sum_collect, Item_real_func, Item_typecast_real, Item_func_bit, Item_json_func, Item_sum_bit, Item_func_group_concat, Item_timeval_func, Item_temporal_hybrid_func, Item_date_func, Item_datetime_func, Item_time_func, and Item_func_json_value.
|
protected |
|
overridevirtual |
Traverses a tree of Items in prefix and/or postfix order.
Optionally walks into subqueries.
processor | processor function to be invoked per item returns true to abort traversal, false to continue |
walk | controls 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. |
arg | Optional pointer to a walk-specific object |
false | walk succeeded |
true | walk aborted by agreement, an error may have been reported |
Reimplemented from Item.
Reimplemented in Item_func_make_set.
|
friend |
|
protected |
uint Item_func::arg_count |
How many arguments in 'args'.
|
protected |
Array of pointers to arguments.
If there are max 2 arguments, this array is often just m_embedded_arguments; otherwise it's explicitly allocated in the constructor.
|
private |
|
protected |
Value used in calculation of result of not_null_tables()
|
protected |
Affects how to determine that NULL argument implies a NULL function return.
Default behaviour in this class is:
|
protected |
Value used in calculation of result of used_tables()