MySQL  8.0.22
Source Code Documentation
Item_param Class Referencefinal

Dynamic parameters used as placeholders ('?') inside prepared statements. More...

#include <item.h>

Inheritance diagram for Item_param:
Item Settable_routine_parameter Parse_tree_node_tmpl< Context >

Public Types

enum  enum_item_param_state {
  NO_VALUE, NULL_VALUE, INT_VALUE, REAL_VALUE,
  STRING_VALUE, TIME_VALUE, LONG_DATA_VALUE, DECIMAL_VALUE
}
 
- 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, VALUES_COLUMN_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_IMPLICIT_NE_ZERO = 1, MARKER_CONST_PROPAG = 2, MARKER_BIT = 4,
  MARKER_FUNC_DEP_NOT_NULL = 5, MARKER_DISTINCT_GROUP = 6, MARKER_COND_DERIVED_TABLE = 7, 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

void set_param_state (enum enum_item_param_state state)
 
enum enum_item_param_state param_state () const
 
void mark_json_as_scalar () override
 For Items with data type JSON, mark that a string argument is treated as a scalar JSON value. More...
 
bool json_as_scalar () const override
 
 Item_param (const POS &pos, MEM_ROOT *root, uint pos_in_query_arg)
 
bool itemize (Parse_context *pc, Item **item) override
 The same as contextualize() but with additional parameter. More...
 
Item_result result_type () const override
 
enum Type type () const override
 
void set_data_type_inherited () override
 Set the currently resolved data type for this parameter as inherited. More...
 
bool is_type_inherited () const
 
void pin_data_type () override
 Pin the currently resolved data type for this parameter. More...
 
bool is_type_pinned () const
 
bool is_unsigned_actual () const
 
void set_collation_actual (const CHARSET_INFO *coll)
 
void set_collation_stored (const CHARSET_INFO *coll)
 
const CHARSET_INFOcollation_actual () const
 
const CHARSET_INFOcollation_stored () const
 
bool fix_fields (THD *thd, Item **ref) override
 
bool propagate_type (THD *thd, const Type_properties &type) override
 Propagate data type specifications into parameters and user variables. More...
 
double val_real () override
 
longlong val_int () override
 
my_decimalval_decimal (my_decimal *) override
 
Stringval_str (String *) override
 
bool val_json (Json_wrapper *result) override
 Get a JSON value from an Item. More...
 
bool get_time (MYSQL_TIME *tm) override
 
bool get_date (MYSQL_TIME *tm, my_time_flags_t fuzzydate) override
 
void set_type_actual (enum_field_types data_type, bool unsigned_act)
 
enum_field_types data_type_actual () const
 
enum_field_types actual_data_type () const override
 Retrieve actual data type for an item. More...
 
void set_null ()
 
void set_int (longlong i)
 
void set_int (ulonglong i)
 
void set_double (double i)
 
void set_decimal (const char *str, ulong length)
 Set decimal parameter value from string. More...
 
void set_decimal (const my_decimal *dv)
 
bool set_str (const char *str, size_t length)
 
bool set_longdata (const char *str, ulong length)
 
void set_time (MYSQL_TIME *tm, enum_mysql_timestamp_type type)
 Set parameter value from MYSQL_TIME value. More...
 
bool set_from_user_var (THD *thd, const user_var_entry *entry)
 Set parameter value from user variable value. More...
 
void copy_param_actual_type (Item_param *from)
 
void reset ()
 Resets parameter after execution. More...
 
const Stringquery_val_str (const THD *thd, String *str) const
 Return Param item values in string format, for generating the dynamic query used in update/binary logs. More...
 
bool convert_str_value ()
 Convert string from client character set to the character set of connection. More...
 
table_map used_tables () const override
 
void print (const THD *thd, String *str, enum_query_type query_type) const override
 This method is used for to: More...
 
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...
 
Itemsafe_charset_converter (THD *thd, const CHARSET_INFO *tocs) override
 
Itemclone_item () const override
 
bool eq (const Item *item, bool binary_cmp) const override
 
void set_param_type_and_swap_value (Item_param *from)
 Preserve the original parameter types and values when re-preparing a prepared statement. More...
 
bool is_non_const_over_literals (uchar *) override
 
void sync_clones ()
 This should be called after any modification done to this Item, to propagate the said modification to all its clones. More...
 
bool add_clone (Item_param *i)
 
const Send_fieldget_out_param_info () const override
 Getter of Item_param::m_out_param_info. More...
 
void make_field (Send_field *field) override
 Fill meta-data information for the corresponding column in a result set. More...
 
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...
 
bool check_column_from_derived_table (uchar *arg) override
 Check if all the columns present in this expression are from the derived table. More...
 
- 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
 
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 cleanup ()
 Called for every Item after use (preparation and execution). More...
 
virtual Fieldmake_string_field (TABLE *table) const
 Create a field to hold a string value from an item. More...
 
virtual void fix_after_pullout (SELECT_LEX *parent_select, SELECT_LEX *removed_select)
 Fix after tables have been moved from one select_lex level to the parent level, e.g by semijoin conversion. 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...
 
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 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...
 
enum_field_types data_type () const
 Retrieve the derived data type of the 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_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 (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 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 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 Stringval_str_ascii (String *str)
 
virtual bool val_bool ()
 
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 Fieldget_tmp_table_field ()
 If this Item is being materialized into a temporary table, returns the field that is being materialized into. More...
 
virtual Fieldtmp_table_field (TABLE *)
 
virtual const char * full_name () const
 
virtual table_map not_null_tables () 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 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 update_used_tables ()
 Updates used tables, not null tables information and accumulates properties up the item tree, cf. More...
 
virtual void split_sum_func (THD *, Ref_item_array, mem_root_deque< Item *> *)
 
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_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 void set_result_field (Field *)
 
virtual bool is_result_field () const
 
virtual Fieldget_result_field () const
 
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 Itemget_tmp_table_item (THD *thd)
 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...
 
virtual const CHARSET_INFOcompare_collation () const
 
virtual const CHARSET_INFOcharset_for_protocol ()
 
virtual bool walk (Item_processor processor, enum_walk walk, uchar *arg)
 Traverses a tree of Items in prefix and/or postfix order. More...
 
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 collect_item_field_or_view_ref_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 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 mark_field_in_map (uchar *arg)
 Mark underlying field in read or write map of a table. More...
 
virtual bool references_select_expr_of (uchar *arg)
 
virtual bool ensure_multi_equality_fields_are_available_walker (uchar *)
 Traverse the item tree and replace fields that are outside of reach with fields that are within reach. 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 *)
 Clean up after removing the item from the item tree. 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 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...
 
virtual 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...
 
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 bool explain_subquery_checker (uchar **)
 
virtual Itemexplain_subquery_propagator (uchar *)
 
virtual Itemequal_fields_propagator (uchar *)
 
virtual bool disable_constant_propagation (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 bool check_column_in_window_functions (uchar *arg)
 Check if all the columns present in this expression are present in PARTITION clause of window functions of the derived table. More...
 
virtual bool check_column_in_group_by (uchar *arg)
 Check if all the columns present in this expression are present in GROUP BY clause of the derived table. More...
 
virtual Itemreplace_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 Itemreplace_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 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) const
 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 Itemreplace_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 Itemreplace_item_field (uchar *)
 Transform processor used by SELECT_LEX::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 Itemreplace_item_view_ref (uchar *)
 
virtual Itemreplace_aggregate (uchar *)
 
virtual bool update_aggr_refs (uchar *)
 A walker processor overridden by Item_aggregate_ref, q.v. More...
 
void delete_self ()
 Delete this item. More...
 
virtual bool is_splocal () const
 
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 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...
 
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

String str_value_ptr
 
my_decimal decimal_value
 
union {
   longlong   integer
 
   double   real
 
   MYSQL_TIME   time
 
value
 
uint pos_in_query
 
void(* set_param_func )(Item_param *param, uchar **pos, ulong len)
 
- 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...
 
bool hidden {false}
 If the item is in a SELECT list (SELECT_LEX::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

type_conversion_status save_in_field_inner (Field *field, bool no_conversions) override
 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...
 
- 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...
 
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 ()
 
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...
 
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...
 
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 ()
 

Private Types

typedef Item super
 

Private Member Functions

Settable_routine_parameterget_settable_routine_parameter () override
 
bool set_value (THD *, sp_rcontext *, Item **it) override
 This operation is intended to store some item value in Item_param to be used later. More...
 
void set_out_param_info (Send_field *info) override
 Setter of Item_param::m_out_param_info. More...
 
- Private Member Functions inherited from Settable_routine_parameter
 Settable_routine_parameter ()
 
virtual ~Settable_routine_parameter ()
 
virtual void set_required_privilege (ulong privilege)
 Set required privileges for accessing the parameter. More...
 

Private Attributes

bool m_type_inherited {false}
 True if type of parameter is inherited from parent object (like a typecast). More...
 
bool m_type_pinned {false}
 True if type of parameter has been pinned, attempt to use an incompatible actual type will cause error (no repreparation occurs), and value is subject to range check. More...
 
enum_field_types m_data_type_actual {MYSQL_TYPE_INVALID}
 The actual data type of the parameter value provided by the user. More...
 
bool m_unsigned_actual {false}
 Used when actual value is integer to indicate whether value is unsigned. More...
 
const CHARSET_INFOm_collation_actual {nullptr}
 The character set and collation of the actual parameter value. More...
 
const CHARSET_INFOm_collation_stored {nullptr}
 The character set and collation of the value stored in str_value, possibly after being converted from the m_collation_actual collation. More...
 
Item_result m_result_type {STRING_RESULT}
 
enum_item_param_state m_param_state {NO_VALUE}
 m_param_state is used to indicate that no parameter value is available with NO_VALUE, or a NULL value is available (NULL_VALUE), or the actual type of the provided parameter value. More...
 
bool m_json_as_scalar {false}
 If true, when retrieving JSON data, attempt to interpret a string value as a scalar JSON value, otherwise interpret it as a JSON object. More...
 
Send_fieldm_out_param_info {nullptr}
 
Mem_root_array< Item_param * > m_clones
 If a query expression's text QT, containing a parameter, is internally duplicated and parsed twice (. More...
 

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_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
 
- 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...
 
- 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
 
- 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...
 

Detailed Description

Dynamic parameters used as placeholders ('?') inside prepared statements.

Member Typedef Documentation

◆ super

typedef Item Item_param::super
private

Member Enumeration Documentation

◆ enum_item_param_state

Enumerator
NO_VALUE 
NULL_VALUE 
INT_VALUE 
REAL_VALUE 
STRING_VALUE 
TIME_VALUE 

holds TIME, DATE, DATETIME

LONG_DATA_VALUE 
DECIMAL_VALUE 

Constructor & Destructor Documentation

◆ Item_param()

Item_param::Item_param ( const POS pos,
MEM_ROOT root,
uint  pos_in_query_arg 
)

Member Function Documentation

◆ actual_data_type()

enum_field_types Item_param::actual_data_type ( ) const
inlineoverridevirtual

Retrieve actual data type for an item.

Equal to data_type() for all items, except parameters.

Reimplemented from Item.

◆ add_clone()

bool Item_param::add_clone ( Item_param i)
inline

◆ check_column_from_derived_table()

bool Item_param::check_column_from_derived_table ( uchar arg)
inlineoverridevirtual

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.

◆ check_function_as_value_generator()

bool Item_param::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.

◆ clone_item()

Item * Item_param::clone_item ( ) const
overridevirtual
Returns
cloned item if it is constant
Return values
nullptrif this is not const

Reimplemented from Item.

◆ collation_actual()

const CHARSET_INFO* Item_param::collation_actual ( ) const
inline
Returns
the actual collation of the supplied string parameter

◆ collation_stored()

const CHARSET_INFO* Item_param::collation_stored ( ) const
inline
Returns
the stored collation of the supplied string parameter

◆ convert_str_value()

bool Item_param::convert_str_value ( )

Convert string from client character set to the character set of connection.

◆ copy_param_actual_type()

void Item_param::copy_param_actual_type ( Item_param from)

◆ data_type_actual()

enum_field_types Item_param::data_type_actual ( ) const
inline

◆ eq()

bool Item_param::eq ( const Item item,
bool  binary_cmp 
) const
overridevirtual

This function is called when:

  • Comparing items in the WHERE clause (when doing where optimization)
  • When trying to find an ORDER BY/GROUP BY item in the SELECT part
  • When matching fields in multiple equality objects (Item_equal)

Reimplemented from Item.

◆ fix_fields()

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

Reimplemented from Item.

◆ get_date()

bool Item_param::get_date ( MYSQL_TIME tm,
my_time_flags_t  fuzzydate 
)
overridevirtual

Implements Item.

◆ get_out_param_info()

const Send_field * Item_param::get_out_param_info ( ) const
overridevirtual

Getter of Item_param::m_out_param_info.

m_out_param_info is used to store information about store routine OUT-parameters, such as stored routine name, database, stored routine variable name. It is supposed to be retrieved in Protocol::send_parameters() during creation of OUT-parameter result set.

Reimplemented from Settable_routine_parameter.

◆ get_settable_routine_parameter()

Settable_routine_parameter* Item_param::get_settable_routine_parameter ( )
inlineoverrideprivatevirtual

Reimplemented from Item.

◆ get_time()

bool Item_param::get_time ( MYSQL_TIME tm)
overridevirtual

Implements Item.

◆ is_non_const_over_literals()

bool Item_param::is_non_const_over_literals ( uchar )
inlineoverridevirtual

Reimplemented from Item.

◆ is_null()

bool Item_param::is_null ( )
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.

Return values
falseif the expression is not NULL.
trueif the expression is NULL, or evaluation caused an error. The null_value member is set according to the return value.

Reimplemented from Item.

◆ is_type_inherited()

bool Item_param::is_type_inherited ( ) const
inline
Returns
true if data type for this parameter is inherited.

◆ is_type_pinned()

bool Item_param::is_type_pinned ( ) const
inline
Returns
true if data type for this parameter is pinned.

◆ is_unsigned_actual()

bool Item_param::is_unsigned_actual ( ) const
inline
Returns
true if actual data value (integer) is unsigned

◆ itemize()

bool Item_param::itemize ( Parse_context pc,
Item **  res 
)
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.

Parameters
pccurrent parse context
[out]respointer to "this" or to a newly allocated replacement object to use in the Item tree instead
Return values
falsesuccess
truesyntax/OOM/etc error

Reimplemented from Item.

◆ json_as_scalar()

bool Item_param::json_as_scalar ( ) const
inlineoverridevirtual

Reimplemented from Item.

◆ make_field()

void Item_param::make_field ( Send_field field)
overridevirtual

Fill meta-data information for the corresponding column in a result set.

If this is an OUT-parameter of a stored procedure, preserve meta-data of stored-routine variable.

Parameters
fieldcontainer for meta-data to be filled

Reimplemented from Item.

◆ mark_json_as_scalar()

void Item_param::mark_json_as_scalar ( )
inlineoverridevirtual

For Items with data type JSON, mark that a string argument is treated as a scalar JSON value.

Only relevant for the Item_param class.

Reimplemented from Item.

◆ param_state()

enum enum_item_param_state Item_param::param_state ( ) const
inline

◆ pin_data_type()

void Item_param::pin_data_type ( )
inlineoverridevirtual

Pin the currently resolved data type for this parameter.

Reimplemented from Item.

◆ print()

void Item_param::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.

◆ propagate_type()

bool Item_param::propagate_type ( THD thd,
const Type_properties type 
)
overridevirtual

Propagate data type specifications into parameters and user variables.

If item has descendants, propagate type recursively into these.

Parameters
thdthread handler
typeData type properties that are propagated
Returns
false if success, true if error

Reimplemented from Item.

◆ query_val_str()

const String * Item_param::query_val_str ( const THD thd,
String str 
) const

Return Param item values in string format, for generating the dynamic query used in update/binary logs.

Parameters
thdcurrent thread
[out]strString to fill with parameter
Returns
supplied string on success, NULL on error

◆ reset()

void Item_param::reset ( void  )

Resets parameter after execution.

Note
We clear null_value here instead of setting it in set_* methods, because we want more easily handle case for long data.

◆ result_type()

Item_result Item_param::result_type ( ) const
inlineoverridevirtual

Reimplemented from Item.

◆ safe_charset_converter()

Item * Item_param::safe_charset_converter ( THD thd,
const CHARSET_INFO tocs 
)
overridevirtual

Reimplemented from Item.

◆ save_in_field_inner()

type_conversion_status Item_param::save_in_field_inner ( Field field,
bool  no_conversions 
)
overrideprotectedvirtual

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.

Subclasses that need to specialize the behaviour of save_in_field(), should override this function instead of save_in_field().

Parameters
[in,out]fieldthe field to save the item into
no_conversionswhether or not to allow conversions of the value
Returns
the status from saving into the field
Return values
TYPE_OKitem saved without any errors or warnings
!=TYPE_OK there were errors or warnings when saving the item

Reimplemented from Item.

◆ set_collation_actual()

void Item_param::set_collation_actual ( const CHARSET_INFO coll)
inline

◆ set_collation_stored()

void Item_param::set_collation_stored ( const CHARSET_INFO coll)
inline

◆ set_data_type_inherited()

void Item_param::set_data_type_inherited ( )
inlineoverridevirtual

Set the currently resolved data type for this parameter as inherited.

Reimplemented from Item.

◆ set_decimal() [1/2]

void Item_param::set_decimal ( const char *  str,
ulong  length 
)

Set decimal parameter value from string.

Parameters
strcharacter string
lengthstring length
Note
As we use character strings to send decimal values in binary protocol, we use str2my_decimal to convert it to internal decimal value.

◆ set_decimal() [2/2]

void Item_param::set_decimal ( const my_decimal dv)

◆ set_double()

void Item_param::set_double ( double  i)

◆ set_from_user_var()

bool Item_param::set_from_user_var ( THD thd,
const user_var_entry entry 
)

Set parameter value from user variable value.

Parameters
thdCurrent thread
entryUser variable structure (NULL means use NULL value)
Returns
false if success, true if error

◆ set_int() [1/2]

void Item_param::set_int ( longlong  i)

◆ set_int() [2/2]

void Item_param::set_int ( ulonglong  i)

◆ set_longdata()

bool Item_param::set_longdata ( const char *  str,
ulong  length 
)

◆ set_null()

void Item_param::set_null ( )

◆ set_out_param_info()

void Item_param::set_out_param_info ( Send_field info)
overrideprivatevirtual

Setter of Item_param::m_out_param_info.

m_out_param_info is used to store information about store routine OUT-parameters, such as stored routine name, database, stored routine variable name. It is supposed to be set in sp_head::execute() after Item_param::set_value() is called.

Reimplemented from Settable_routine_parameter.

◆ set_param_state()

void Item_param::set_param_state ( enum enum_item_param_state  state)
inline

◆ set_param_type_and_swap_value()

void Item_param::set_param_type_and_swap_value ( Item_param src)

Preserve the original parameter types and values when re-preparing a prepared statement.

Copy parameter type information and conversion function pointers from a parameter of the old statement to the corresponding parameter of the new one.

Move parameter values from the old parameters to the new one. We simply "exchange" the values, which allows to save on allocation and character set conversion in case a parameter is a string or a blob/clob.

The old parameter gets the value of this one, which ensures that all memory of this parameter is freed correctly.

Parameters
[in]srcparameter item of the original prepared statement

◆ set_str()

bool Item_param::set_str ( const char *  str,
size_t  length 
)

◆ set_time()

void Item_param::set_time ( MYSQL_TIME tm,
enum_mysql_timestamp_type  time_type 
)

Set parameter value from MYSQL_TIME value.

Parameters
tmdatetime value to set (time_type is ignored)
time_typetype of datetime value
Note
If we value to be stored is not normalized, zero value will be stored instead and proper warning will be produced. This function relies on the fact that even wrong value sent over binary protocol fits into MAX_DATE_STRING_REP_LENGTH buffer.

◆ set_type_actual()

void Item_param::set_type_actual ( enum_field_types  data_type,
bool  unsigned_act 
)
inline

◆ set_value()

bool Item_param::set_value ( THD ,
sp_rcontext ,
Item **  it 
)
overrideprivatevirtual

This operation is intended to store some item value in Item_param to be used later.

Parameters
ita pointer to an item in the tree
Returns
Error status
Return values
trueon error
falseon success

Implements Settable_routine_parameter.

◆ sync_clones()

void Item_param::sync_clones ( )

This should be called after any modification done to this Item, to propagate the said modification to all its clones.

◆ type()

enum Type Item_param::type ( ) const
inlineoverridevirtual

Implements Item.

◆ used_tables()

table_map Item_param::used_tables ( ) const
inlineoverridevirtual

Reimplemented from Item.

◆ val_decimal()

my_decimal * Item_param::val_decimal ( my_decimal dec)
overridevirtual

Implements Item.

◆ val_int()

longlong Item_param::val_int ( void  )
overridevirtual

Implements Item.

◆ val_json()

bool Item_param::val_json ( Json_wrapper result)
overridevirtual

Get a JSON value from an Item.

All subclasses that can return a JSON value, should override this function. The function in the base class is not expected to be called. If it is called, it most likely means that some subclass is missing an override of val_json().

Parameters
[in,out]resultThe resulting Json_wrapper.
Returns
false if successful, true on failure

Reimplemented from Item.

◆ val_real()

double Item_param::val_real ( void  )
overridevirtual

Implements Item.

◆ val_str()

String * Item_param::val_str ( String str)
overridevirtual

Implements Item.

Member Data Documentation

◆ decimal_value

my_decimal Item_param::decimal_value

◆ integer

longlong Item_param::integer

◆ m_clones

Mem_root_array<Item_param *> Item_param::m_clones
private

If a query expression's text QT, containing a parameter, is internally duplicated and parsed twice (.

See also
reparse_common_table_expression), the first parsing will create an Item_param I, and the re-parsing, which parses a forged "(QT)" parse-this-CTE type of statement, will create an Item_param J. J should not exist:
  • from the point of view of logging: it is not in the original query so it should not be substituted in the query written to logs (in insert_params() if with_log is true).
  • from the POV of the user: user provides one single value for I, not one for I and one for J. user expects mysql_stmt_param_count() to return 1, not 2 (count is sent by the server in send_prep_stmt()). That is why J is part neither of LEX::param_list, nor of param_array; it is considered an inferior clone of I; I::m_clones contains J. The connection between I and J is made once, by comparing their byte position in the statement, in Item_param::itemize(). J gets its value from I:
Item_param::sync_clones.

◆ m_collation_actual

const CHARSET_INFO* Item_param::m_collation_actual {nullptr}
private

The character set and collation of the actual parameter value.

Ignored if not a string value.

  • If parameter value is sent over the protocol: the client collation
  • If parameter value is a user variable: the variable's collation

◆ m_collation_stored

const CHARSET_INFO* Item_param::m_collation_stored {nullptr}
private

The character set and collation of the value stored in str_value, possibly after being converted from the m_collation_actual collation.

Ignored if not a string value.

  • If the derived collation is binary, the connection collation.
  • Otherwise, the derived collation (
    See also
    Item::collation).

◆ m_data_type_actual

enum_field_types Item_param::m_data_type_actual {MYSQL_TYPE_INVALID}
private

The actual data type of the parameter value provided by the user.

For example:

PREPARE s FROM "SELECT ?=3e0";

makes Item_param->data_type() be MYSQL_TYPE_DOUBLE ; then:

SET @a='1';
EXECUTE s USING @a;

data_type() is still MYSQL_TYPE_DOUBLE, while m_param_state is STRING_VALUE and m_data_type_actual is MYSQL_TYPE_VAR_STRING. Compatibility of data_type() and m_data_type_actual is later tested in check_parameter_types().

◆ m_json_as_scalar

bool Item_param::m_json_as_scalar {false}
private

If true, when retrieving JSON data, attempt to interpret a string value as a scalar JSON value, otherwise interpret it as a JSON object.

◆ m_out_param_info

Send_field* Item_param::m_out_param_info {nullptr}
private

◆ m_param_state

enum_item_param_state Item_param::m_param_state {NO_VALUE}
private

m_param_state is used to indicate that no parameter value is available with NO_VALUE, or a NULL value is available (NULL_VALUE), or the actual type of the provided parameter value.

Usually, this matches m_actual_type, but in the case of pinned data types, this is matching the resolved data type of the parameter. m_param_state reflects the type of the value stored in Item_param::value.

◆ m_result_type

Item_result Item_param::m_result_type {STRING_RESULT}
private

◆ m_type_inherited

bool Item_param::m_type_inherited {false}
private

True if type of parameter is inherited from parent object (like a typecast).

Reprepare of statement will not change this type. E.g, we have CAST(? AS DOUBLE), the parameter gets data type MYSQL_TYPE_DOUBLE and m_type_inherited is set true.

◆ m_type_pinned

bool Item_param::m_type_pinned {false}
private

True if type of parameter has been pinned, attempt to use an incompatible actual type will cause error (no repreparation occurs), and value is subject to range check.

This is used when the parameter is in a context where its type is imposed. For example, in LIMIT ?, we assign data_type() == integer, unsigned; and the provided value must be convertible to unsigned integer: passing a DOUBLE, instead of causing a repreparation as for an ordinary parameter, will cause an error; passing integer '-1' will also cause an error.

◆ m_unsigned_actual

bool Item_param::m_unsigned_actual {false}
private

Used when actual value is integer to indicate whether value is unsigned.

◆ pos_in_query

uint Item_param::pos_in_query

◆ real

double Item_param::real

◆ set_param_func

void(* Item_param::set_param_func) (Item_param *param, uchar **pos, ulong len)

◆ str_value_ptr

String Item_param::str_value_ptr

◆ time

MYSQL_TIME Item_param::time

◆ value

union { ... } Item_param::value

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