MySQL 8.0.40
Source Code Documentation
|
A field that stores a JSON value. More...
#include <field.h>
Public Member Functions | |
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) | |
enum_field_types | type () const override |
void | sql_type (String &str) const override |
Get the type of this field (json). More... | |
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... | |
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 (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_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 |
Field_json * | clone (MEM_ROOT *mem_root) const override |
Create a shallow clone of this field in the specified MEM_ROOT. More... | |
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 |
size_t | make_sort_key (uchar *to, size_t length) const override |
Writes a copy of the current value in the record buffer, suitable for sorting using byte-by-byte comparison. More... | |
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... | |
size_t | make_sort_key (uchar *buff, size_t length) 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 (uchar *to, size_t length, size_t trunc_pos) const final |
Writes a copy of the current value in the record buffer, suitable for sorting using byte-by-byte comparison. More... | |
Public Member Functions inherited from Field_blob | |
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) | |
bool | match_collation_to_optimize_range () const override |
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 |
int | key_cmp (const uchar *, const uchar *) const override |
int | key_cmp (const uchar *str, uint length) const override |
uint32 | key_length () const override |
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) |
size_t | get_key_image (uchar *buff, size_t length, imagetype type) const override |
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... | |
uint32 | char_length () const override |
maximum possible character 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... | |
Public Member Functions inherited from Field_longstr | |
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... | |
Public Member Functions inherited from Field_str | |
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 | result_type () const override |
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 | decimals () const override |
void | make_send_field (Send_field *field) const override |
Populates a Send_field object with metadata about the column represented by this Field object. 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 | binary () const override |
bool | str_needs_quotes () const final |
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 () |
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... | |
virtual bool | is_unsigned () const |
Whether the field is signed or not. 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_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... | |
virtual uint | pack_length_from_metadata (uint field_metadata) const |
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 |
virtual enum_field_types | real_type () const |
virtual enum_field_types | binlog_type () 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 |
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 |
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... | |
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 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... | |
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... | |
Private Member Functions | |
type_conversion_status | unsupported_conversion () |
Helper function for raising an error when trying to store a value into a JSON column, and that value needs to be cast to JSON before it can be stored. More... | |
type_conversion_status | store_binary (const char *ptr, size_t length) |
Store the provided JSON binary data in this field. More... | |
Additional Inherited Members | |
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 } |
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... | |
Public Attributes inherited from Field_str | |
uint32 | char_length_cache |
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... | |
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_blob | |
void | store_ptr_and_length (const char *from, uint32 length) |
Store ptr and length. More... | |
Protected Member Functions inherited from Field_longstr | |
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... | |
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 |
Static Protected Member Functions inherited from Field_blob | |
static uchar * | get_blob_data (const uchar *position) |
Get the BLOB data pointer stored at the specified position in the record buffer. More... | |
Protected Attributes inherited from Field_blob | |
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... | |
Protected Attributes inherited from Field_str | |
const CHARSET_INFO * | field_charset |
enum Derivation | field_derivation |
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 = ' ' |
A field that stores a JSON value.
|
inline |
|
inline |
|
inlinefinalvirtual |
Reimplemented from Field.
|
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_str.
Reimplemented in Field_typed_array.
|
overridevirtual |
Create a shallow clone of this field in the specified MEM_ROOT.
Reimplemented from Field_blob.
Reimplemented in Field_typed_array.
|
finalvirtual |
Reimplemented from Field_blob.
const char * Field_json::get_binary | ( | ptrdiff_t | row_offset = 0 | ) | const |
Get a read-only pointer to the binary representation of the JSON document in this field.
row_offset | Field's data offset |
|
finalvirtual |
Reimplemented from Field.
longlong Field_json::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.
This is the format used when writing the binary log in row format and using a partial format according to @session.binlog_row_value_options.
[in] | value_options | The value of binlog_row_value options. |
[out] | diff_vector_p | If this is not NULL, the pointer it points to will be set to NULL if the field is to be stored in full format, or to the Json_diff_vector if the field is to be stored in partial format. |
|
finalvirtual |
Reimplemented from Field.
|
inlinefinalvirtual |
JSON columns don't have an associated charset.
Returning false here prevents SHOW CREATE TABLE from attaching a CHARACTER SET clause to the column.
Reimplemented from Field_blob.
bool Field_json::is_before_image_equal_to_after_image | ( | ) | const |
Return true if the before-image and after-image for this field are equal.
|
finalvirtual |
Check if a new field is compatible with this one.
new_field | the new field |
Reimplemented from Field_blob.
Make a hash key that can be used by sql_executor.cc/unique_hash in order to support SELECT DISTINCT.
[in] | hash_val | An initial hash value. |
|
overridevirtual |
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_blob.
Reimplemented in Field_typed_array, and Field_typed_array.
|
overridevirtual |
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_blob.
Reimplemented in Field_typed_array, Field_typed_array, and Field_typed_array.
|
finalvirtual |
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. Field_string, Field_varstring and Field_blob classes are truncated after pos number of characters.
buff | The buffer, assumed to be at least length bytes. |
length | Number of bytes to write. |
trunc_pos | Number of characters which should be included before truncation. |
The | number of bytes actually written. |
Reimplemented from Field_blob.
Reimplemented in Field_typed_array.
Write the field for the binary log in diff format.
This should only write the field if the diff format is smaller than the full format. Otherwise it should leave the buffer untouched.
[in,out] | to | Pointer to buffer where the field will be written. This will be changed to point to the next byte after the last byte that was written. |
value_options | bitmap that indicates if full or partial JSON format is to be used. |
true | The field was not written, either because the data type does not support it, or because it was disabled according to value_options, or because there was no diff information available from the optimizer, or because the the diff format was bigger than the full format. The 'to' parameter is unchanged in this case. |
false | The field was written. |
Reimplemented from Field.
|
inlinefinalvirtual |
Sort should treat the field as binary and not attempt any conversions.
Reimplemented from Field.
|
overridevirtual |
Get the type of this field (json).
str | the string that receives the type |
Reimplemented from Field_blob.
Reimplemented in Field_typed_array.
|
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_blob.
Reimplemented in Field_typed_array.
type_conversion_status Field_json::store | ( | const Field_json * | field | ) |
Copy the contents of a non-null JSON field into this field.
[in] | field | the field to copy data from |
|
overridevirtual |
Store a double in a JSON field. Will raise an error for now.
Reimplemented from Field_blob.
Reimplemented in Field_typed_array.
|
overridevirtual |
Store an integer in a JSON field. Will raise an error for now.
Reimplemented from Field_blob.
Reimplemented in Field_typed_array.
|
private |
Store the provided JSON binary data in this field.
[in] | data | pointer to JSON binary data |
[in] | length | the length of the binary data |
|
finalvirtual |
Store a decimal in a JSON field. Will raise an error for now.
Reimplemented from Field_longstr.
type_conversion_status Field_json::store_json | ( | const Json_wrapper * | json | ) |
Store a JSON value as binary.
json | the JSON value to store |
|
finalvirtual |
Store a TIME value in a JSON field. Will raise an error for now.
Reimplemented from Field.
|
inlineoverridevirtual |
Reimplemented from Field_blob.
Reimplemented in Field_typed_array.
bool Field_json::unpack_diff | ( | const uchar ** | from | ) |
Read the binary diff from the given buffer, and apply it to this field.
[in,out] | from | Pointer to buffer where the binary diff is stored. This will be changed to point to the next byte after the field. |
false | Success |
true | Error (e.g. failed to apply the diff). The error has been reported through my_error. |
|
private |
Helper function for raising an error when trying to store a value into a JSON column, and that value needs to be cast to JSON before it can be stored.
|
finalvirtual |
Reimplemented from Field_blob.
|
finalvirtual |
Retrieve the JSON as an int if possible.
This requires a JSON scalar of suitable type.
Reimplemented from Field_blob.
bool Field_json::val_json | ( | Json_wrapper * | wr | ) | const |
Retrieve the field's value as a JSON wrapper.
It there is an error, wr is not modified and we return false, else true.
[out] | wr | the JSON value |
|
finalvirtual |
Retrieve the JSON as a double if possible.
This requires a JSON scalar of suitable type.
Reimplemented from Field_blob.
Retrieve the JSON value stored in this field as text.
[in,out] | buf1 | string buffer for converting JSON value to string |
[in,out] | buf2 | unused |
Reimplemented from Field_blob.