![]() |
MySQL 9.1.0
Source Code Documentation
|
A table definition from the master. More...
#include <rpl_utility.h>
Public Member Functions | |
table_def ()=default | |
No-op constructor. More... | |
table_def (unsigned char *types, ulong size, uchar *field_metadata, int metadata_size, uchar *null_bitmap, uint16 flags, const std::vector< unsigned int > &vector_dimensionality) | |
Constructor. More... | |
~table_def () | |
ulong | size () const |
Return the number of fields there is type data for. More... | |
ulong | filtered_size (bool replica_has_gipk) const |
Return the number of fields there is type data for minus the GIPK field if this field does not exist in the replica. More... | |
enum_field_types | binlog_type (ulong index) const |
int | json_column_count () const |
Return the number of JSON columns in this table. More... | |
enum_field_types | type (ulong index) const |
uint | field_metadata (uint index) const |
bool | is_array (uint index) const |
Returns whether or not the field at index is a typed array. More... | |
bool | maybe_null (uint index) const |
uint32 | calc_field_size (uint col, const uchar *master_data) const |
std::vector< unsignedint >::const_iterator | get_vector_dimensionality_begin () const |
std::vector< unsignedint >::const_iterator | get_vector_dimensionality_end () const |
bool | compatible_with (THD *thd, Relay_log_info *rli, TABLE *table, TABLE **conv_table_var) |
Decide if the table definition is compatible with a table. More... | |
TABLE * | create_conversion_table (THD *thd, Relay_log_info *rli, TABLE *target_table, bool replica_has_gipk) const |
Create a virtual in-memory temporary table structure. More... | |
bool | compute_source_table_gipk_info (THD &thd, TABLE *table) |
Evaluates if the source table might contain a GIPK. More... | |
bool | is_gipk_present_on_source_table () const |
Checks if the table contains a GIPK. More... | |
Static Public Member Functions | |
static uint | vector_column_count (const unsigned char *types, ulong size) |
Return the number of VECTOR columns. More... | |
Private Attributes | |
ulong | m_size |
unsigned char * | m_type |
uint | m_field_metadata_size |
uint * | m_field_metadata |
uchar * | m_null_bits |
uint16 | m_flags |
uchar * | m_memory |
int | m_json_column_count |
bool * | m_is_array |
bool | m_is_gipk_set |
bool | m_is_gipk_on_table |
std::vector< unsigned int > | m_vector_dimensionality |
A table definition from the master.
The responsibilities of this class is:
|
default |
No-op constructor.
Instances of RPL_Table_ref are created by first allocating memory, then placement-new-ing an RPL_Table_ref object containing an uninitialized table_def object which is only conditionally initialized. See Table_map_log_event::do_apply_event().
table_def::table_def | ( | unsigned char * | types, |
ulong | size, | ||
uchar * | field_metadata, | ||
int | metadata_size, | ||
uchar * | null_bitmap, | ||
uint16 | flags, | ||
const std::vector< unsigned int > & | vector_dimensionality | ||
) |
Constructor.
types | Array of types, each stored as a byte |
size | Number of elements in array 'types' |
field_metadata | Array of extra information about fields |
metadata_size | Size of the field_metadata array |
null_bitmap | The bitmap of fields that can be null |
flags | Table flags |
vector_dimensionality | Vector dimensionality array |
table_def::~table_def | ( | ) |
|
inline |
bool table_def::compatible_with | ( | THD * | thd, |
Relay_log_info * | rli, | ||
TABLE * | table, | ||
TABLE ** | conv_table_var | ||
) |
Decide if the table definition is compatible with a table.
Is the definition compatible with a table when it does not belong to the data dictionary?
Compare the definition with a table to see if it is compatible with it.
A table definition is compatible with a table if:
REPLICA_TYPE_CONVERSIONS
.thd | Current thread | |
rli | Pointer to relay log info | |
table | Pointer to table to compare with. | |
[out] | conv_table_var | Pointer to temporary table for holding conversion table. |
1 | if the table definition is not compatible with table |
0 | if the table definition is compatible with table |
This function first finds out whether the table belongs to the data dictionary. When not, it will compare the master table with an existing table on the slave and see if they are compatible with respect to the current settings of REPLICA_TYPE_CONVERSIONS
.
If the tables are compatible and conversions are required, tmp_table_var
will be set to a virtual temporary table with field pointers for the fields that require conversions. This allow simple checking of whether a conversion are to be applied or not.
If tables are compatible, but no conversions are necessary, tmp_table_var
will be set to NULL.
[in] | rli | Relay log info, for error reporting. |
[in] | table | Table to compare with |
[out] | conv_table_var | Virtual temporary table for performing conversions, if necessary. |
true | Master table is compatible with slave table. |
false | When the table belongs to the data dictionary or master table is not compatible with slave table. |
Evaluates if the source table might contain a GIPK.
In the case when the replica has a GIPK, the source is from an old version that does not indicate if it has a GIPK or not, and the source either has extra columns, or the replica has two more more extra columns true is returned. This function does not report an error.
thd | The thread object associated to the application |
table | The table in the replica. |
TABLE * table_def::create_conversion_table | ( | THD * | thd, |
Relay_log_info * | rli, | ||
TABLE * | target_table, | ||
bool | replica_has_gipk | ||
) | const |
Create a virtual in-memory temporary table structure.
Create a conversion table.
The table structure has records and field array so that a row can be unpacked into the record for further processing.
In the virtual table, each field that requires conversion will have a non-NULL value, while fields that do not require conversion will have a NULL value.
Some information that is missing in the events, such as the character set for string types, are taken from the table that the field is going to be pushed into, so the target table that the data eventually need to be pushed into need to be supplied.
thd | Thread to allocate memory from. |
rli | Relay log info structure, for error reporting. |
target_table | Target table for fields. |
replica_has_gipk | Does the replica table contain a GIPK |
If the function is unable to create the conversion table, an error will be printed and NULL will be returned.
|
inline |
|
inline |
Return the number of fields there is type data for minus the GIPK field if this field does not exist in the replica.
|
inline |
|
inline |
|
inline |
Returns whether or not the field at index
is a typed array.
bool table_def::is_gipk_present_on_source_table | ( | ) | const |
Checks if the table contains a GIPK.
|
inline |
Return the number of JSON columns in this table.
|
inline |
|
inline |
Return the number of fields there is type data for.
|
inline |
|
inlinestatic |
Return the number of VECTOR columns.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
mutableprivate |
|
private |
|
private |
|
private |
|
private |
|
private |