MySQL 9.1.0
Source Code Documentation
|
#include <field.h>
Public Types | |
enum | Truncate_result { TR_OK = 0 , TR_POSITIVE_OVERFLOW = 1 , TR_NEGATIVE_OVERFLOW = 2 } |
Public Types inherited from Field | |
enum | enum_auto_flags { NONE = 0 , NEXT_NUMBER = 1 , DEFAULT_NOW = 2 , ON_UPDATE_NOW = 4 , GENERATED_FROM_EXPRESSION = 8 } |
Flags for Field::auto_flags / Create_field::auto_flags bitmaps. More... | |
enum | geometry_type { GEOM_GEOMETRY = 0 , GEOM_POINT = 1 , GEOM_LINESTRING = 2 , GEOM_POLYGON = 3 , GEOM_MULTIPOINT = 4 , GEOM_MULTILINESTRING = 5 , GEOM_MULTIPOLYGON = 6 , GEOM_GEOMETRYCOLLECTION = 7 } |
enum | imagetype { itRAW , itMBR } |
Public Member Functions | |
Field_real (uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, uint8 dec_arg, bool zero_arg, bool unsigned_arg) | |
type_conversion_status | store_decimal (const my_decimal *) final |
Storing decimal in integer fields. More... | |
type_conversion_status | store_time (MYSQL_TIME *ltime, uint8 dec) final |
Store MYSQL_TIME value with the given amount of decimal digits into a field. More... | |
my_decimal * | val_decimal (my_decimal *) const final |
Return decimal value of integer field. More... | |
bool | get_date (MYSQL_TIME *ltime, my_time_flags_t fuzzydate) const final |
bool | get_time (MYSQL_TIME *ltime) const final |
Truncate_result | truncate (double *nr, double max_length) |
If a field has fixed length, truncate the double argument pointed to by 'nr' appropriately. More... | |
Truncate_result | truncate (double *nr, double max_length) const |
If a field has fixed length, truncate the double argument pointed to by 'nr' appropriately. More... | |
uint32 | max_display_length () const final |
const uchar * | unpack (uchar *to, const uchar *from, uint param_data) override |
Unpack a field from row data. More... | |
uchar * | pack (uchar *to, const uchar *from, size_t max_length) const override |
Pack the field into a format suitable for storage and transfer. More... | |
Public Member Functions inherited from Field_num | |
Field_num (uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, uint8 dec_arg, bool zero_arg, bool unsigned_arg) | |
Numeric fields base class constructor. More... | |
bool | is_unsigned () const final |
Whether the field is signed or not. More... | |
Item_result | result_type () const override |
enum Derivation | derivation () const final |
uint | repertoire () const final |
const CHARSET_INFO * | charset () const final |
void | prepend_zeros (String *value) const |
uint | decimals () const final |
bool | eq_def (const Field *field) const final |
uint | is_equal (const Create_field *new_field) const override |
Check whether two numeric fields can be considered 'equal' for table alteration purposes. More... | |
uint | row_pack_length () const final |
uint32 | pack_length_from_metadata (uint) const override |
type_conversion_status | check_int (const CHARSET_INFO *cs, const char *str, size_t length, const char *int_end, int error) |
Test if given number is a int. More... | |
type_conversion_status | get_int (const CHARSET_INFO *cs, const char *from, size_t len, longlong *rnd, ulonglong unsigned_max, longlong signed_min, longlong signed_max) |
Public Member Functions inherited from Field | |
Field (const Field &)=default | |
void | operator= (Field &)=delete |
bool | has_insert_default_general_value_expression () const |
Checks if the field is marked as having a general expression to generate default values. More... | |
bool | has_insert_default_datetime_value_expression () const |
Checks if the field is marked as having a datetime value expression to generate default values on inserts. More... | |
bool | has_update_default_datetime_value_expression () const |
Checks if the field is marked as having a datetime value expression to generate default values on updates. More... | |
bool | has_insert_default_constant_expression () const |
Checks if the field is marked as having a constant expression to generate default values. More... | |
uchar * | get_null_ptr () |
virtual void | set_field_length (uint32 length) |
virtual void | add_to_cost (CostOfItem *cost) const |
Update '*cost' with the fact that this Field is accessed. More... | |
bool | is_flag_set (unsigned flag) const |
void | set_flag (unsigned flag) |
void | clear_flag (unsigned flag) |
uint32 | all_flags () const |
virtual bool | is_wrapper_field () const |
If true, it's a Create_field_wrapper (a sub-class of Field used during CREATE/ALTER that we mustn't cast to other sub-classes of Field that aren't on a direct path of inheritance, e.g. More... | |
bool | is_gcol () const |
bool | is_virtual_gcol () const |
void | set_hidden (dd::Column::enum_hidden_type hidden) |
Sets the hidden type for this field. More... | |
dd::Column::enum_hidden_type | hidden () const |
bool | is_hidden () const |
bool | is_hidden_by_system () const |
bool | is_hidden_by_user () const |
bool | is_field_for_functional_index () const |
Field (uchar *ptr_arg, uint32 length_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar auto_flags_arg, const char *field_name_arg) | |
This is used as a table name when the table structure is not set up. More... | |
virtual | ~Field ()=default |
void | reset_warnings () |
void | set_tmp_nullable () |
Turn on temporary nullability for the field. More... | |
void | reset_tmp_nullable () |
Turn off temporary nullability for the field. More... | |
void | reset_tmp_null () |
Reset temporary NULL value for field. More... | |
void | set_tmp_null () |
Set field to temporary value NULL. More... | |
bool | is_tmp_nullable () const |
bool | is_tmp_null () const |
virtual type_conversion_status | store (const char *to, size_t length, const CHARSET_INFO *cs)=0 |
virtual type_conversion_status | store (double nr)=0 |
virtual type_conversion_status | store (longlong nr, bool unsigned_val)=0 |
virtual type_conversion_status | store_packed (longlong nr) |
Store a temporal value in packed longlong format into a field. More... | |
type_conversion_status | store_time (MYSQL_TIME *ltime) |
Store MYSQL_TYPE value into a field when the number of fractional digits is not important or is not know. More... | |
type_conversion_status | store (const char *to, size_t length, const CHARSET_INFO *cs, enum_check_fields check_level) |
virtual double | val_real () const =0 |
virtual longlong | val_int () const =0 |
virtual longlong | val_time_temporal () const |
Returns TIME value in packed longlong format. More... | |
virtual longlong | val_date_temporal () const |
Returns DATE/DATETIME value in packed longlong format. More... | |
virtual longlong | val_time_temporal_at_utc () const |
virtual longlong | val_date_temporal_at_utc () const |
longlong | val_temporal_by_field_type () const |
Returns "native" packed longlong representation of a TIME or DATE/DATETIME field depending on field type. More... | |
String * | val_str (String *str) const |
virtual String * | val_str (String *, String *) const =0 |
String * | val_int_as_str (String *val_buffer, bool unsigned_flag) const |
Interpret field value as an integer but return the result as a string. More... | |
virtual bool | str_needs_quotes () const |
virtual Item_result | numeric_context_result_type () const |
Returns Item_result type of a field when it appears in numeric context such as: SELECT time_column + 1; SELECT SUM(time_column); Examples: More... | |
virtual Item_result | cmp_type () const |
virtual Item_result | cast_to_int_type () const |
bool | gcol_expr_is_equal (const Create_field *field) const |
Check whether generated columns' expressions are the same. More... | |
virtual bool | eq (const Field *field) const |
virtual uint32 | pack_length () const |
virtual uint32 | pack_length_in_rec () const |
virtual bool | compatible_field_size (uint metadata, Relay_log_info *, uint16, int *order) const |
Check to see if field size is compatible with destination. More... | |
int | save_field_metadata (uchar *first_byte) |
virtual uint32 | data_length (ptrdiff_t row_offset=0) const |
virtual uint32 | max_data_length () const |
Get the maximum size of the data in packed format. More... | |
virtual type_conversion_status | reset () |
virtual bool | get_timestamp (my_timeval *tm, int *warnings) const |
Returns a UTC component in struct timeval format. More... | |
virtual void | store_timestamp (const my_timeval *) |
Stores a timestamp value in timeval format in a field. More... | |
virtual void | set_default () |
void | evaluate_insert_default_function () |
Evaluates the INSERT default function and stores the result in the field. More... | |
void | evaluate_update_default_function () |
Evaluates the UPDATE default function, if one exists, and stores the result in the record buffer. More... | |
virtual bool | binary () const |
virtual bool | zero_pack () const |
virtual enum ha_base_keytype | key_type () const |
virtual uint32 | key_length () const |
virtual enum_field_types | type () const =0 |
virtual enum_field_types | real_type () const |
virtual enum_field_types | binlog_type () const |
int | cmp (const uchar *str) const |
virtual int | cmp_max (const uchar *a, const uchar *b, uint max_len) const |
virtual int | cmp (const uchar *, const uchar *) const =0 |
virtual int | cmp_binary (const uchar *a, const uchar *b, uint32 max_length=~0L) const |
virtual int | cmp_offset (ptrdiff_t row_offset) const |
virtual int | cmp_binary_offset (ptrdiff_t row_offset) const |
virtual int | key_cmp (const uchar *a, const uchar *b) const |
virtual int | key_cmp (const uchar *str, uint length) const |
virtual bool | is_text_key_type () const |
virtual void | sql_type (String &str) const =0 |
bool | is_null (ptrdiff_t row_offset=0) const |
Check whether the full table's row is NULL or the Field has value NULL. More... | |
bool | is_real_null (ptrdiff_t row_offset=0) const |
Check whether the Field has value NULL (temporary or actual). More... | |
bool | is_null_in_record (const uchar *record) const |
Check if the Field has value NULL or the record specified by argument has value NULL for this Field. More... | |
void | set_null (ptrdiff_t row_offset=0) |
Set field to value NULL. More... | |
void | set_notnull (ptrdiff_t row_offset=0) |
Set field to value NOT NULL. More... | |
type_conversion_status | check_constraints (int mysql_errno) |
Check NOT NULL constraint on the field after temporary nullability is disabled. More... | |
void | set_check_for_truncated_fields (enum_check_fields check_for_truncated_fields) |
Remember the value of THD::check_for_truncated_fields to handle possible NOT-NULL constraint errors after BEFORE-trigger execution is finished. More... | |
bool | is_nullable () const |
uint | null_offset (const uchar *record) const |
uint | null_offset () const |
void | set_null_ptr (uchar *p_null_ptr, uint p_null_bit) |
virtual void | make_send_field (Send_field *send_field) const |
Populates a Send_field object with metadata about the column represented by this Field object. More... | |
virtual size_t | make_sort_key (uchar *buff, size_t length) const =0 |
Writes a copy of the current value in the record buffer, suitable for sorting using byte-by-byte comparison. More... | |
virtual size_t | make_sort_key (uchar *buff, size_t length, size_t trunc_pos) const |
Writes a copy of the current value in the record buffer, suitable for sorting using byte-by-byte comparison. More... | |
virtual bool | optimize_range (uint idx, uint part) const |
Whether this field can be used for index range scans when in the given keypart of the given index. More... | |
virtual bool | can_be_compared_as_longlong () const |
virtual void | mem_free () |
virtual Field * | new_field (MEM_ROOT *root, TABLE *new_table) const |
Field * | new_field (MEM_ROOT *root, TABLE *new_table, uchar *new_ptr, uchar *new_null_ptr, uint new_null_bit) const |
virtual Field * | new_key_field (MEM_ROOT *root, TABLE *new_table, uchar *new_ptr, uchar *new_null_ptr, uint new_null_bit) const |
Field * | new_key_field (MEM_ROOT *root, TABLE *new_table, uchar *new_ptr) const |
virtual Field * | clone (MEM_ROOT *mem_root) const =0 |
Makes a shallow copy of the Field object. More... | |
void | move_field (uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg) |
virtual void | move_field_offset (ptrdiff_t ptr_diff) |
virtual void | get_image (uchar *buff, size_t length, const CHARSET_INFO *) const |
virtual void | set_image (const uchar *buff, size_t length, const CHARSET_INFO *) |
virtual size_t | get_key_image (uchar *buff, size_t length, imagetype type) const |
virtual void | set_key_image (const uchar *buff, size_t length) |
longlong | val_int_offset (ptrdiff_t row_offset) |
longlong | val_int (uchar *new_ptr) |
String * | val_str (String *str, uchar *new_ptr) |
virtual bool | send_to_protocol (Protocol *protocol) const |
Send the value of this field over the protocol using the correct Protocol::store*() function which matches the type of the field. More... | |
uchar * | pack (uchar *to) const |
const uchar * | unpack (const uchar *from) |
virtual uchar * | pack_with_metadata_bytes (uchar *to, const uchar *from, uint max_length) const |
This function does the same thing as pack(), except for the difference that max_length does not mean the number of bytes in the output, but the maximum field length from the input (which must be exactly field->max_field_length()). More... | |
virtual bool | pack_diff (uchar **to, ulonglong value_options) const |
Write the field for the binary log in diff format. More... | |
virtual uint | max_packed_col_length () const |
This is a wrapper around pack_length() used by filesort() to determine how many bytes we need for packing "addon fields". More... | |
uint | offset (uchar *record) const |
void | copy_data (ptrdiff_t src_record_offset) |
const CHARSET_INFO * | charset_for_protocol () const |
virtual const CHARSET_INFO * | sort_charset () const |
virtual bool | has_charset () const |
virtual bool | match_collation_to_optimize_range () const |
virtual void | set_derivation (enum Derivation) |
bool | set_warning (Sql_condition::enum_severity_level level, unsigned int code, int cut_increment) |
Produce warning or note about data saved into field. More... | |
bool | set_warning (Sql_condition::enum_severity_level level, uint code, int cut_increment, const char *view_db, const char *view_name) |
Produce warning or note about data saved into field. More... | |
bool | warn_if_overflow (int op_result) |
Process decimal library return codes and issue warnings for overflow and truncation. More... | |
virtual void | init (TABLE *table_arg) |
longlong | convert_decimal2longlong (const my_decimal *val, bool unsigned_flag, bool *has_overflow) |
Conversion from decimal to longlong. More... | |
virtual uint32 | char_length () const |
virtual geometry_type | get_geometry_type () const |
void | dbug_print () const |
ha_storage_media | field_storage_type () const |
void | set_storage_type (ha_storage_media storage_type_arg) |
column_format_type | column_format () const |
void | set_column_format (column_format_type column_format_arg) |
virtual type_conversion_status | validate_stored_val (THD *thd) |
virtual void | hash (ulong *nr, ulong *nr2) const |
virtual ulonglong | get_max_int_value () const |
Get the upper limit of the MySQL integral and floating-point type. More... | |
virtual const uchar * | data_ptr () const |
Return a const pointer to the actual data in the record buffer. More... | |
const uchar * | field_ptr () const |
Return a const pointer to where the field is stored in the record buffer. More... | |
uchar * | field_ptr () |
Return a pointer to where the field is stored in the record buffer. More... | |
void | set_field_ptr (uchar *ptr_arg) |
virtual bool | is_updatable () const |
Checks whether a string field is part of write_set. More... | |
bool | is_part_of_actual_key (THD *thd, uint cur_index, KEY *cur_index_info) const |
Check whether field is part of the index taking the index extensions flag into account. More... | |
Key_map | get_covering_prefix_keys () const |
Get covering prefix keys. More... | |
virtual bool | is_array () const |
Whether the field is a typed array. More... | |
virtual uint32 | get_length_bytes () const |
Return number of bytes the field's length takes. More... | |
bool | handle_old_value () const |
Whether field's old valued have to be handled. More... | |
virtual void | set_field_index (uint16 field_index) |
Sets field index. More... | |
uint16 | field_index () const |
Returns field index. More... | |
Public Attributes | |
bool | not_fixed |
Public Attributes inherited from Field_num | |
const uint8 | dec |
bool | zerofill |
True if the column was declared with the ZEROFILL attribute. More... | |
Public Attributes inherited from Field | |
TABLE * | table |
Pointer to TABLE object that owns this field. More... | |
const char * | orig_db_name {nullptr} |
Pointer to original database name, only non-NULL for a temporary table. More... | |
const char * | orig_table_name {nullptr} |
Pointer to original table name, only non-NULL for a temporary table. More... | |
const char ** | table_name |
const char * | field_name |
LEX_CSTRING | comment |
Key_map | key_start |
Key_map | part_of_key |
Keys that includes this field except of prefix keys. More... | |
Key_map | part_of_prefixkey |
Prefix keys. More... | |
Key_map | part_of_sortkey |
Key_map | part_of_key_not_extended |
All keys that include this field, but not extended by the storage engine to include primary key columns. More... | |
uint32 | field_length |
uchar | null_bit |
uchar | auto_flags |
Bitmap of flags indicating if field value is auto-generated by default and/or on update, and in which way. More... | |
bool | is_created_from_null_item |
If true, this field was created in create_tmp_field_from_item from a NULL value. More... | |
bool | m_indexed |
True if this field belongs to some index (unlike part_of_key, the index might have only a prefix). More... | |
LEX_CSTRING | m_engine_attribute = EMPTY_CSTR |
LEX_CSTRING | m_secondary_engine_attribute = EMPTY_CSTR |
Value_generator * | gcol_info {nullptr} |
bool | stored_in_db |
Indication that the field is physically stored in tables rather than just generated on SQL queries. More... | |
Value_generator * | m_default_val_expr {nullptr} |
Holds the expression to be used to generate default values. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from Field | |
static bool | type_can_have_key_part (enum_field_types) |
Check whether a field type can be partially indexed by a key. More... | |
static enum_field_types | field_type_merge (enum_field_types, enum_field_types) |
Return type of which can carry value of both given types in UNION result. More... | |
static Item_result | result_merge_type (enum_field_types) |
Detect Item_result by given field type of UNION merge result. More... | |
Static Public Attributes inherited from Field | |
static constexpr size_t | MAX_VARCHAR_WIDTH {65535} |
static constexpr size_t | MAX_TINY_BLOB_WIDTH {255} |
static constexpr size_t | MAX_SHORT_BLOB_WIDTH {65535} |
static constexpr size_t | MAX_MEDIUM_BLOB_WIDTH {16777215} |
static constexpr size_t | MAX_LONG_BLOB_WIDTH {4294967295} |
Protected Member Functions inherited from Field | |
uchar * | pack_int16 (uchar *to, const uchar *from, size_t max_length) const |
const uchar * | unpack_int16 (uchar *to, const uchar *from) const |
uchar * | pack_int24 (uchar *to, const uchar *from, size_t max_length) const |
const uchar * | unpack_int24 (uchar *to, const uchar *from) const |
uchar * | pack_int32 (uchar *to, const uchar *from, size_t max_length) const |
const uchar * | unpack_int32 (uchar *to, const uchar *from) const |
uchar * | pack_int64 (uchar *to, const uchar *from, size_t max_length) const |
const uchar * | unpack_int64 (uchar *to, const uchar *from) const |
Protected Attributes inherited from Field | |
uchar * | ptr |
Holds the position to the field in record. More... | |
Static Protected Attributes inherited from Field | |
static uchar | dummy_null_buffer = ' ' |
|
inline |
|
finalvirtual |
Reimplemented from Field_num.
|
finalvirtual |
Reimplemented from Field_num.
|
overridevirtual |
Pack the field into a format suitable for storage and transfer.
To implement packing functionality, only the virtual function should be overridden. The other functions are just convenience functions and hence should not be overridden.
The actual format is opaque and will vary between types of Field (it is meant to be unpacked by unpack(), but be aware that it is used among others in the replication log, so you cannot change it without incurring a format break.
max_length
characters.to | Pointer to memory area where representation of field should be put. |
from | Pointer to memory area where record representation of field is stored, typically field->field_ptr(). |
max_length | Available space in “to”, in bytes. pack() will not write more bytes than this; if the field is too short, the contents are not unpackable by unpack(). (It is nominally supposed to be a prefix of what would have been written with a full buffer, ie., the same as packing and then truncating the output, but not all Field classes follow this.) |
Reimplemented from Field.
Reimplemented in Field_decimal.
|
finalvirtual |
Storing decimal in integer fields.
val | value for storing |
TYPE_OK | Storage of value went fine without warnings or errors |
!TYPE_OK | Warning/error as indicated by type_conversion_status enum value |
Reimplemented from Field_num.
|
finalvirtual |
Store MYSQL_TIME value with the given amount of decimal digits into a field.
This is called when storing a date in a string.
Note, the "dec" parameter represents number of digits of the Item that previously created the MYSQL_TIME value. It's needed when we store the value into a CHAR/VARCHAR/TEXT field to display the proper amount of fractional digits. For other field types the "dec" value does not matter and is ignored.
ltime | Time, date or datetime value. |
dec_arg | Number of decimals in ltime. |
false | on success |
true | on error |
Reimplemented from Field_num.
Field_real::Truncate_result Field_real::truncate | ( | double * | nr, |
double | max_value | ||
) |
If a field has fixed length, truncate the double argument pointed to by 'nr' appropriately.
Also ensure that the argument is within [min_value; max_value] where min_value == 0 if unsigned_flag is set, else -max_value. Set warnings and nulls accordingly in the field object.
[in,out] | nr | the real number (FLOAT or DOUBLE) to be truncated |
[in] | max_value | the maximum (absolute) value of the real type |
Field_real::Truncate_result Field_real::truncate | ( | double * | nr, |
double | max_value | ||
) | const |
If a field has fixed length, truncate the double argument pointed to by 'nr' appropriately.
Also ensure that the argument is within [min_value; max_value] where min_value == 0 if unsigned_flag is set, else -max_value. Const overload, doesn't set warnings or null.
[in,out] | nr | the real number (FLOAT or DOUBLE) to be truncated |
[in] | max_value | the maximum (absolute) value of the real type |
|
overridevirtual |
Unpack a field from row data.
This method is used to unpack a field from a master whose size of the field is less than that of the slave.
The param_data
parameter is a two-byte integer (stored in the least significant 16 bits of the unsigned integer) usually consisting of two parts: the real type in the most significant byte and a original pack length in the least significant byte.
The exact layout of the param_data
field is given by the Table_map_log_event::save_field_metadata()
.
This is the default method for unpacking a field. It just copies the memory block in byte order (of original pack length bytes or length of field, whichever is smaller).
to | Destination of the data |
from | Source of the data |
param_data | Real type and original pack length of the field data |
Reimplemented from Field.
Reimplemented in Field_decimal.
|
finalvirtual |
Return decimal value of integer field.
decimal_value | buffer for storing decimal value |
Reimplemented from Field_num.
bool Field_real::not_fixed |