My Project
Public Member Functions
table_def Class Reference

#include <rpl_utility.h>

List of all members.

Public Member Functions

 table_def (unsigned char *types, ulong size, uchar *field_metadata, int metadata_size, uchar *null_bitmap, uint16 flags)
ulong size () const
enum_field_types binlog_type (ulong index) const
enum_field_types type (ulong index) const
uint16 field_metadata (uint index) const
my_bool maybe_null (uint index) const
uint32 calc_field_size (uint col, uchar *master_data) const
bool compatible_with (THD *thd, Relay_log_info *rli, TABLE *table, TABLE **conv_table_var) const
TABLEcreate_conversion_table (THD *thd, Relay_log_info *rli, TABLE *target_table) const

Detailed Description

A table definition from the master.

The responsibilities of this class is:


Constructor & Destructor Documentation

table_def::table_def ( unsigned char *  types,
ulong  size,
uchar *  field_metadata,
int  metadata_size,
uchar *  null_bitmap,
uint16  flags 
)

Constructor.

Parameters:
typesArray of types, each stored as a byte
sizeNumber of elements in array 'types'
field_metadataArray of extra information about fields
metadata_sizeSize of the field_metadata array
null_bitmapThe bitmap of fields that can be null

Member Function Documentation

bool table_def::compatible_with ( THD *  thd,
Relay_log_info rli,
TABLE table,
TABLE **  conv_table_var 
) const

Decide if the table definition is compatible with a table.

Compare the definition with a table to see if it is compatible with it.

A table definition is compatible with a table if:

  • The columns types of the table definition is a (not necessarily proper) prefix of the column type of the table.
  • The other way around.
  • Each column on the master that also exists on the slave can be converted according to the current settings of SLAVE_TYPE_CONVERSIONS.
Parameters:
thd
rliPointer to relay log info
tablePointer to table to compare with.
[out]tmp_table_varPointer to temporary table for holding conversion table.
Return values:
1if the table definition is not compatible with table
0if the table definition is compatible with table

Is the definition compatible with a table?

This function 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 SLAVE_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.

Parameters:
rli_arg[in]Relay log info, for error reporting.
table[in]Table to compare with
tmp_table_var[out]Virtual temporary table for performing conversions, if necessary.
Return values:
trueMaster table is compatible with slave table.
falseMaster table is not compatible with slave table.
TABLE * table_def::create_conversion_table ( THD *  thd,
Relay_log_info rli,
TABLE target_table 
) const

Create a virtual in-memory temporary table structure.

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.

Parameters:
thdThread to allocate memory from.
rliRelay log info structure, for error reporting.
target_tableTarget table for fields.
Returns:
A pointer to a temporary table with memory allocated in the thread's memroot, NULL if the table could not be created

Create a conversion table.

If the function is unable to create the conversion table, an error will be printed and NULL will be returned.

Returns:
Pointer to conversion table, or NULL if unable to create conversion table.
ulong table_def::size ( ) const [inline]

Return the number of fields there is type data for.

Returns:
The number of fields that there is type data for.

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines