![]() |
MySQL 8.0.32
Source Code Documentation
|
Field that stores array of values of the same type. More...
#include <field.h>
Public Member Functions | |
Field_typed_array (const Field_typed_array &other) | |
Constructs a Field_typed_array that is a copy of another Field_typed_array. More... | |
Field_typed_array (enum_field_types elt_type, bool elt_is_unsigned, size_t elt_length, uint elt_decimals, uchar *ptr_arg, uchar *null_ptr_arg, uint null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, TABLE_SHARE *share, uint blob_pack_length, const CHARSET_INFO *cs) | |
Constructs a Field_typed_array object. More... | |
uint32 | char_length () const override |
maximum possible character length for blob. More... | |
void | init (TABLE *table_arg) override |
enum_field_types | type () const override |
enum_field_types | real_type () const override |
enum_field_types | binlog_type () const override |
uint32 | key_length () const override |
Field_typed_array * | clone (MEM_ROOT *mem_root) const override |
Create a shallow clone of this field in the specified MEM_ROOT. More... | |
bool | is_unsigned () const final |
Whether the field is signed or not. More... | |
bool | is_array () const override |
Whether the field is a typed array. More... | |
Item_result | result_type () const override |
uint | decimals () const override |
bool | binary () const override |
const CHARSET_INFO * | charset () const override |
Return a text charset so that string functions automatically convert the field value to string and treat it as a non-binary string. More... | |
type_conversion_status | store (const char *to, size_t length, const CHARSET_INFO *charset) override |
Store data in this JSON field. More... | |
type_conversion_status | store (double nr) override |
Store a double in a JSON field. Will raise an error for now. More... | |
type_conversion_status | store (longlong nr, bool unsigned_val) override |
Store an integer in a JSON field. Will raise an error for now. More... | |
type_conversion_status | store_array (const Json_wrapper *data, Json_array *array) |
Store a value as an array. More... | |
size_t | get_key_image (uchar *buff, size_t length, imagetype type) const override |
Field * | new_key_field (MEM_ROOT *root, TABLE *new_table, uchar *new_ptr, uchar *, uint) const override |
int | key_cmp (const uchar *, const uchar *) const override |
These methods are used by handler to prevent returning a row past the end_range during range access. More... | |
int | key_cmp (const uchar *, uint) const override |
bool | match_collation_to_optimize_range () const override |
Multi-valued index always works only as a pre-filter for actual condition check, and the latter always use binary collation, so no point to match collations in optimizer. More... | |
bool | coerce_json_value (const Json_wrapper *wr, bool no_error, Json_wrapper *coerced) const |
Convert arbitrary JSON value to the array's type using the conversion field. More... | |
const char * | get_index_name () const |
Get name of the index defined over this field. More... | |
uint32 | get_length_bytes () const override |
Return number of bytes the field's length takes. More... | |
size_t | make_sort_key (uchar *to, size_t max_len) const override |
Writes a copy of the current value in the record buffer, suitable for sorting using byte-by-byte comparison. More... | |
size_t | make_sort_key (Json_wrapper *wr, uchar *to, size_t length) const |
Create sort key out of given JSON value according to array's element type. More... | |
int | do_save_field_metadata (uchar *metadata_ptr) const override |
Save the field metadata for typed array fields. More... | |
uint | pack_length_from_metadata (uint) const override |
void | sql_type (String &str) const final |
Get the type of this field (json). More... | |
void | make_send_field (Send_field *field) const final |
Populates a Send_field object with metadata about the column represented by this Field object. More... | |
void | set_field_index (uint16 f_index) final override |
Sets field index. More... | |
Field * | get_conv_field () |
![]() | |
Field_json (uchar *ptr_arg, uchar *null_ptr_arg, uint null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, TABLE_SHARE *share, uint blob_pack_length) | |
Field_json (uint32 len_arg, bool is_nullable_arg, const char *field_name_arg) | |
const CHARSET_INFO * | sort_charset () const final |
Sort should treat the field as binary and not attempt any conversions. More... | |
bool | has_charset () const final |
JSON columns don't have an associated charset. More... | |
type_conversion_status | store_decimal (const my_decimal *) final |
Store a decimal in a JSON field. Will raise an error for now. More... | |
type_conversion_status | store_json (const Json_wrapper *json) |
Store a JSON value as binary. More... | |
type_conversion_status | store_time (MYSQL_TIME *ltime, uint8 dec_arg) final |
Store a TIME value in a JSON field. Will raise an error for now. More... | |
type_conversion_status | store (const Field_json *field) |
Copy the contents of a non-null JSON field into this field. More... | |
bool | pack_diff (uchar **to, ulonglong value_options) const final |
Write the field for the binary log in diff format. More... | |
longlong | get_diff_vector_and_length (ulonglong value_options, const Json_diff_vector **diff_vector_p=nullptr) const |
Return the length of this field, taking into consideration that it may be in partial format. More... | |
bool | is_before_image_equal_to_after_image () const |
Return true if the before-image and after-image for this field are equal. More... | |
bool | unpack_diff (const uchar **from) |
Read the binary diff from the given buffer, and apply it to this field. More... | |
bool | val_json (Json_wrapper *wr) const |
Retrieve the field's value as a JSON wrapper. More... | |
longlong | val_int () const final |
Retrieve the JSON as an int if possible. More... | |
double | val_real () const final |
Retrieve the JSON as a double if possible. More... | |
String * | val_str (String *buf1, String *buf2) const final |
Retrieve the JSON value stored in this field as text. More... | |
my_decimal * | val_decimal (my_decimal *m) const final |
bool | get_time (MYSQL_TIME *ltime) const final |
bool | get_date (MYSQL_TIME *ltime, my_time_flags_t fuzzydate) const final |
uint | is_equal (const Create_field *new_field) const final |
Check if a new field is compatible with this one. More... | |
Item_result | cast_to_int_type () const final |
int | cmp_binary (const uchar *a, const uchar *b, uint32 max_length=~0L) const final |
ulonglong | make_hash_key (ulonglong hash_val) const |
Make a hash key that can be used by sql_executor.cc/unique_hash in order to support SELECT DISTINCT. More... | |
const char * | get_binary (ptrdiff_t row_offset=0) const |
Get a read-only pointer to the binary representation of the JSON document in this field. More... | |
![]() | |
Field_blob (uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, TABLE_SHARE *share, uint blob_pack_length, const CHARSET_INFO *cs) | |
Field_blob (uint32 len_arg, bool is_nullable_arg, const char *field_name_arg, const CHARSET_INFO *cs, bool set_packlength) | |
Field_blob (const Field_blob &field) | |
Copy static information and reset dynamic information. More... | |
Field_blob (uint32 packlength_arg) | |
enum ha_base_keytype | key_type () const override |
type_conversion_status | store (const Field *from) |
int | cmp_max (const uchar *, const uchar *, uint max_length) const final |
int | cmp (const uchar *a, const uchar *b) const final |
int | cmp (const uchar *a, uint32 a_length, const uchar *b, uint32 b_length) const |
uint32 | pack_length () const final |
uint32 | pack_length_no_ptr () const |
Return the packed length without the pointer size added. More... | |
uint | row_pack_length () const final |
uint32 | max_data_length () const final |
Get the maximum size of the data in packed format. More... | |
size_t | get_field_buffer_size () |
void | store_length (uchar *i_ptr, uint i_packlength, uint32 i_number) |
void | store_length (uint32 number) |
uint32 | data_length (ptrdiff_t row_offset=0) const final |
uint32 | get_length (ptrdiff_t row_offset=0) const |
uint32 | get_length (const uchar *ptr, uint packlength) const |
uint32 | get_length (const uchar *ptr_arg) const |
const uchar * | get_blob_data () const |
Get a const pointer to the BLOB data of this field. More... | |
uchar * | get_blob_data (ptrdiff_t row_offset=0) |
Get a non-const pointer to the BLOB data of this field. More... | |
const uchar * | data_ptr () const final |
Get a const pointer to the BLOB data of this field. More... | |
void | set_ptr (const uchar *length, const uchar *data) |
void | set_ptr_offset (ptrdiff_t ptr_diff, uint32 length, const uchar *data) |
void | set_ptr (uint32 length, const uchar *data) |
void | set_key_image (const uchar *buff, size_t length) final |
bool | copy () |
uchar * | pack (uchar *to, const uchar *from, size_t max_length) const final |
Pack the field into a format suitable for storage and transfer. More... | |
uchar * | pack_with_metadata_bytes (uchar *to, const uchar *from, uint max_length) const final |
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... | |
const uchar * | unpack (uchar *, const uchar *from, uint param_data) final |
Unpack a blob field from row data. More... | |
uint | max_packed_col_length () const final |
This is a wrapper around pack_length() used by filesort() to determine how many bytes we need for packing "addon fields". More... | |
void | mem_free () final |
uint32 | max_display_length () const final |
maximum possible display length for blob. More... | |
bool | copy_blob_value (MEM_ROOT *mem_root) |
This function creates a separate copy of blob value. More... | |
bool | is_text_key_type () const final |
void | set_keep_old_value (bool old_value_flag) |
Mark that the BLOB stored in value should be copied before updating it. More... | |
void | keep_old_value () |
Save the current BLOB value to avoid that it gets overwritten. More... | |
void | store_in_allocated_space (const char *from, uint32 length) |
Use to store the blob value into an allocated space. More... | |
bool | backup_blob_field () |
Backup data stored in 'value' into the backup_value. More... | |
void | restore_blob_backup () |
Restore backup value. More... | |
![]() | |
Field_longstr (uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, const CHARSET_INFO *charset_arg) | |
bool | is_updatable () const final |
Checks whether a string field is part of write_set. More... | |
![]() | |
Field_str (uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, uchar auto_flags_arg, const char *field_name_arg, const CHARSET_INFO *charset) | |
Item_result | numeric_context_result_type () const final |
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... | |
uint | repertoire () const final |
void | set_charset (const CHARSET_INFO *charset_arg) |
void | set_field_length (uint32 length) final |
enum Derivation | derivation () const final |
void | set_derivation (enum Derivation derivation_arg) final |
bool | str_needs_quotes () const final |
![]() | |
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 () |
bool | is_flag_set (unsigned flag) const |
void | set_flag (unsigned flag) |
void | clear_flag (unsigned flag) |
uint32 | all_flags () const |
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_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 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 |
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 Item_result | cmp_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 bool | eq_def (const Field *field) 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 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 | zero_pack () const |
int | cmp (const uchar *str) const |
virtual int | cmp_offset (ptrdiff_t row_offset) const |
virtual int | cmp_binary_offset (ptrdiff_t row_offset) const |
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 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 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 |
Field * | new_key_field (MEM_ROOT *root, TABLE *new_table, uchar *new_ptr) const |
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 *) |
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) |
uint | offset (uchar *record) const |
void | copy_data (ptrdiff_t src_record_offset) |
const CHARSET_INFO * | charset_for_protocol () const |
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... | |
longlong | convert_decimal2longlong (const my_decimal *val, bool unsigned_flag, bool *has_overflow) |
Conversion from decimal to longlong. More... | |
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... | |
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) |
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... | |
bool | handle_old_value () const |
Whether field's old valued have to be handled. More... | |
uint16 | field_index () const |
Returns field index. More... | |
Private Attributes | |
Item_field * | m_conv_item {nullptr} |
Conversion item_field. More... | |
enum_field_types | m_elt_type |
The array element's real type. More... | |
uint | m_elt_decimals |
Element's decimals. More... | |
const CHARSET_INFO * | m_elt_charset |
Element's charset. More... | |
const bool | unsigned_flag |
Additional Inherited Members | |
![]() | |
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 } |
![]() | |
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... | |
![]() | |
uint32 | char_length_cache |
![]() | |
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... | |
![]() | |
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} |
![]() | |
void | store_ptr_and_length (const char *from, uint32 length) |
Store ptr and length. More... | |
![]() | |
type_conversion_status | check_string_copy_error (const char *well_formed_error_pos, const char *cannot_convert_error_pos, const char *from_end_pos, const char *end, bool count_spaces, const CHARSET_INFO *cs) |
Report "not well formed" or "cannot convert" error after storing a character string info a field. More... | |
![]() | |
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 |
![]() | |
static uchar * | get_blob_data (const uchar *position) |
Get the BLOB data pointer stored at the specified position in the record buffer. More... | |
![]() | |
uint | packlength |
The number of bytes used to represent the length of the blob. More... | |
String | value |
The 'value'-object is a cache fronting the storage engine. More... | |
![]() | |
const CHARSET_INFO * | field_charset |
enum Derivation | field_derivation |
![]() | |
uchar * | ptr |
Holds the position to the field in record. More... | |
![]() | |
static uchar | dummy_null_buffer = ' ' |
Field that stores array of values of the same type.
This Field class is used together with Item_func_array_cast class (CAST( .. AS .. ARRAY) function) in implementation of multi-valued index. Effectively it's a JSON field that contains a single JSON array. When a JSON value is stored, it's checked to be either a scalar, or an array. All source values are converted using the internal conversion field and stored as an array. Field_typed_array ensures that all values stored in the array have the same type and precision - the one specified by user. This way InnoDB doesn't have to do the conversion on its own and can easily index them.
The Field_typed_array always reports type of its element and from this point of view it's undistinguishable from regular field having the same type. Due to that, fields are differentiated by is_array() property. Field_typed_array returns true, all other fields - false.
For conversion and index applicability tests, Field_typed_array employs a conversion field, which is a regular Field class of array's element type. It's stored in the m_conv_field. All Field_typed_array::store_*() methods store values to the conversion field. Conversion field and typed array field are sharing same field_index, to allow correct read/write_set checks. So the field always have to be marked for read in order to allow read of conversions' results.
Field_typed_array::Field_typed_array | ( | const Field_typed_array & | other | ) |
Constructs a Field_typed_array that is a copy of another Field_typed_array.
other | the other Field_typed_array object |
Field_typed_array::Field_typed_array | ( | enum_field_types | elt_type, |
bool | elt_is_unsigned, | ||
size_t | elt_length, | ||
uint | elt_decimals, | ||
uchar * | ptr_arg, | ||
uchar * | null_ptr_arg, | ||
uint | null_bit_arg, | ||
uchar | auto_flags_arg, | ||
const char * | field_name_arg, | ||
TABLE_SHARE * | share, | ||
uint | blob_pack_length, | ||
const CHARSET_INFO * | cs | ||
) |
Constructs a Field_typed_array object.
|
inlineoverridevirtual |
Reimplemented from Field_str.
|
inlineoverridevirtual |
Reimplemented from Field.
|
inlineoverridevirtual |
maximum possible character length for blob.
This method is used in Item_field::set_field to calculate max_length for Item.
For example: CREATE TABLE t2 SELECT CONCAT(tinyblob_utf8_column) FROM t1; must create a "VARCHAR(255) CHARACTER SET utf8" column.
Reimplemented from Field_blob.
|
inlineoverridevirtual |
Return a text charset so that string functions automatically convert the field value to string and treat it as a non-binary string.
Reimplemented from Field_json.
|
overridevirtual |
Create a shallow clone of this field in the specified MEM_ROOT.
Reimplemented from Field_json.
bool Field_typed_array::coerce_json_value | ( | const Json_wrapper * | wr, |
bool | no_error, | ||
Json_wrapper * | coerced | ||
) | const |
Convert arbitrary JSON value to the array's type using the conversion field.
If conversion fails and it's not a coercion test (no_error= false) then an error is thrown. The converted value is guaranteed to match the field's type and can be indexed by SE without any additional handling.
[in] | wr | Source data |
[in] | no_error | Whether an error should be thrown if value can't be coerced. Error should be thrown when inserting data into the index, and shouldn't be thrown when the range optimizer tests index applicability. |
[out] | coerced | The converted value. Can be nullptr if no_error is true. |
|
overridevirtual |
Save the field metadata for typed array fields.
Saved metadata contains element type (1 byte) and up to 3 bytes of metadata - the same as each respective Field class saves (e.g Field_new_decimal for DECIMAL type). The only difference is that for VARCHAR type length is stored in 3 bytes. This allows to store longer strings, as its supported by JSON storage.
metadata_ptr | First byte of field metadata |
Reimplemented from Field_blob.
Field * Field_typed_array::get_conv_field | ( | ) |
const char * Field_typed_array::get_index_name | ( | ) | const |
Get name of the index defined over this field.
Since typed array fields can be created only as an underlying GC field of a multi-valued functional index, there's always only one index defined over the field.
|
overridevirtual |
Reimplemented from Field_blob.
|
inlineoverridevirtual |
Return number of bytes the field's length takes.
Valid only for varchar and typed arrays of varchar
Reimplemented from Field.
|
inlineoverridevirtual |
Whether the field is a typed array.
Reimplemented from Field.
|
inlinefinalvirtual |
Whether the field is signed or not.
Meaningful only for numeric fields and numeric arrays.
Reimplemented from Field.
These methods are used by handler to prevent returning a row past the end_range during range access.
Since there's no order defined for sorting set of arrays, always return -1 here, allowing all records fetched from SE to be returned to server. They will be filtered by WHERE condition later.
Reimplemented from Field_blob.
Reimplemented from Field_blob.
|
overridevirtual |
Reimplemented from Field_blob.
|
finalvirtual |
Populates a Send_field object with metadata about the column represented by this Field object.
The Send_field object is used for sending column metadata to the client.
[out] | send_field | the Send_field object to populate |
Reimplemented from Field_str.
size_t Field_typed_array::make_sort_key | ( | Json_wrapper * | wr, |
uchar * | to, | ||
size_t | length | ||
) | const |
Create sort key out of given JSON value according to array's element type.
wr | JSON value to create sort key from |
to | buffer to create sort key in |
length | buffer's length |
|
inlineoverridevirtual |
Writes a copy of the current value in the record buffer, suitable for sorting using byte-by-byte comparison.
Integers are always in big-endian regardless of hardware architecture. At most length bytes are written into the buffer.
buff | The buffer, assumed to be at least length bytes. |
length | Number of bytes to write. |
The | number of bytes actually written. |
Reimplemented from Field_json.
|
inlineoverridevirtual |
Multi-valued index always works only as a pre-filter for actual condition check, and the latter always use binary collation, so no point to match collations in optimizer.
Reimplemented from Field_blob.
|
overridevirtual |
Reimplemented from Field.
Reimplemented from Field.
|
inlineoverridevirtual |
Reimplemented from Field.
|
overridevirtual |
Reimplemented from Field_str.
|
finaloverridevirtual |
|
finalvirtual |
Get the type of this field (json).
str | the string that receives the type |
Reimplemented from Field_json.
|
overridevirtual |
Store data in this JSON field.
JSON data is usually stored using store(Field_json*) or store_json(), so this function will only be called if non-JSON data is attempted stored in a JSON field. This results in an error in most cases.
It will attempt to parse the string (unless it's binary) as JSON text, and store a binary representation of JSON document if the string could be parsed.
Note that we override store() and not store_internal() because Field_blob::store() contains logic that bypasses store_internal() in some cases we care about. In particular:
from | the start of the data to be stored |
length | the length of the data |
cs | the character set of the data |
Reimplemented from Field_json.
|
overridevirtual |
Store a double in a JSON field. Will raise an error for now.
Reimplemented from Field_json.
|
overridevirtual |
Store an integer in a JSON field. Will raise an error for now.
Reimplemented from Field_json.
type_conversion_status Field_typed_array::store_array | ( | const Json_wrapper * | data, |
Json_array * | array | ||
) |
Store a value as an array.
data | the value to store as an array |
array | scratch space for building the array to store |
|
inlineoverridevirtual |
Reimplemented from Field_json.
|
private |
Conversion item_field.
|
private |
Element's charset.
|
private |
Element's decimals.
|
private |
The array element's real type.
|
private |