Loading client/mysqldump.c +1 −0 Original line number Diff line number Diff line Loading @@ -1084,6 +1084,7 @@ static void print_xml_row(FILE *xml_file, const char *row_name, check_io(xml_file); } /* getStructure -- retrievs database structure, prints out corresponding CREATE statement and fills out insert_pat. Loading innobase/include/data0type.h +20 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,11 @@ extern dtype_t* dtype_binary; /*-------------------------------------------*/ /* The 'MAIN TYPE' of a column */ #define DATA_VARCHAR 1 /* character varying of the latin1_swedish_ci charset-collation */ latin1_swedish_ci charset-collation; note that the MySQL format for this, DATA_BINARY, DATA_VARMYSQL, is also affected by whether the 'precise type' contains DATA_MYSQL_TRUE_VARCHAR */ #define DATA_CHAR 2 /* fixed length character of the latin1_swedish_ci charset-collation */ #define DATA_FIXBINARY 3 /* binary string of fixed length */ Loading Loading @@ -102,6 +106,8 @@ columns, and for them the precise type is usually not used at all. #define DATA_MYSQL_TYPE_MASK 255 /* AND with this mask to extract the MySQL type from the precise type */ #define DATA_MYSQL_TRUE_VARCHAR 15 /* MySQL type code for the >= 5.0.3 format true VARCHAR */ /* Precise data types for system columns and the length of those columns; NOTE: the values must run from 0 up in the order given! All codes must Loading Loading @@ -134,6 +140,10 @@ be less than 256 */ In earlier versions this was set for some BLOB columns. */ #define DATA_LONG_TRUE_VARCHAR 4096 /* this is ORed to the precise data type when the column is true VARCHAR where MySQL uses 2 bytes to store the data len; for shorter VARCHARs MySQL uses only 1 byte */ /*-------------------------------------------*/ /* This many bytes we need to store the type information affecting the Loading @@ -144,6 +154,15 @@ SQL null*/ store the charset-collation number; one byte is left unused, though */ #define DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE 6 /************************************************************************* Gets the MySQL type code from a dtype. */ UNIV_INLINE ulint dtype_get_mysql_type( /*=================*/ /* out: MySQL type code; this is NOT an InnoDB type code! */ dtype_t* type); /* in: type struct */ /************************************************************************* Determine how many bytes the first n characters of the given string occupy. If the string is shorter than n characters, returns the number of bytes Loading innobase/include/data0type.ic +13 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,19 @@ dtype_get_charset_coll( return((prtype >> 16) & 0xFFUL); } /************************************************************************* Gets the MySQL type code from a dtype. */ UNIV_INLINE ulint dtype_get_mysql_type( /*=================*/ /* out: MySQL type code; this is NOT an InnoDB type code! */ dtype_t* type) /* in: type struct */ { return(type->prtype & 0xFFUL); } /************************************************************************* Sets the mbminlen and mbmaxlen members of a data type structure. */ UNIV_INLINE Loading innobase/include/que0que.h +2 −1 Original line number Diff line number Diff line Loading @@ -359,7 +359,8 @@ struct que_thr_struct{ the control came */ ulint resource; /* resource usage of the query thread thus far */ ulint lock_state; /* lock state of thread (table or row) */ ulint lock_state; /* lock state of thread (table or row) */ }; #define QUE_THR_MAGIC_N 8476583 Loading innobase/include/row0mysql.h +61 −41 Original line number Diff line number Diff line Loading @@ -21,36 +21,6 @@ Created 9/17/2000 Heikki Tuuri typedef struct row_prebuilt_struct row_prebuilt_t; /*********************************************************************** Stores a variable-length field (like VARCHAR) length to dest, in the MySQL format. */ UNIV_INLINE byte* row_mysql_store_var_len( /*====================*/ /* out: dest + 2 */ byte* dest, /* in: where to store */ ulint len); /* in: length, must fit in two bytes */ /*********************************************************************** Reads a MySQL format variable-length field (like VARCHAR) length and returns pointer to the field data. */ UNIV_INLINE byte* row_mysql_read_var_ref( /*===================*/ /* out: field + 2 */ ulint* len, /* out: variable-length field length */ byte* field); /* in: field */ /*********************************************************************** Reads a MySQL format variable-length field (like VARCHAR) length and returns pointer to the field data. */ byte* row_mysql_read_var_ref_noninline( /*=============================*/ /* out: field + 2 */ ulint* len, /* out: variable-length field length */ byte* field); /* in: field */ /*********************************************************************** Frees the blob heap in prebuilt when no longer needed. */ Loading @@ -60,6 +30,30 @@ row_mysql_prebuilt_free_blob_heap( row_prebuilt_t* prebuilt); /* in: prebuilt struct of a ha_innobase:: table handle */ /*********************************************************************** Stores a >= 5.0.3 format true VARCHAR length to dest, in the MySQL row format. */ byte* row_mysql_store_true_var_len( /*=========================*/ /* out: pointer to the data, we skip the 1 or 2 bytes at the start that are used to store the len */ byte* dest, /* in: where to store */ ulint len, /* in: length, must fit in two bytes */ ulint lenlen);/* in: storage length of len: either 1 or 2 bytes */ /*********************************************************************** Reads a >= 5.0.3 format true VARCHAR length, in the MySQL row format, and returns a pointer to the data. */ byte* row_mysql_read_true_varchar( /*========================*/ /* out: pointer to the data, we skip the 1 or 2 bytes at the start that are used to store the len */ ulint* len, /* out: variable-length field length */ byte* field, /* in: field in the MySQL format */ ulint lenlen);/* in: storage length of len: either 1 or 2 bytes */ /*********************************************************************** Stores a reference to a BLOB in the MySQL format. */ void Loading @@ -83,24 +77,40 @@ row_mysql_read_blob_ref( ulint col_len); /* in: BLOB reference length (not BLOB length) */ /****************************************************************** Stores a non-SQL-NULL field given in the MySQL format in the Innobase format. */ UNIV_INLINE void Stores a non-SQL-NULL field given in the MySQL format in the InnoDB format. The counterpart of this function is row_sel_field_store_in_mysql_format() in row0sel.c. */ byte* row_mysql_store_col_in_innobase_format( /*===================================*/ dfield_t* dfield, /* in/out: dfield */ byte* buf, /* in/out: buffer for the converted value */ /* out: up to which byte we used buf in the conversion */ dfield_t* dfield, /* in/out: dfield where dtype information must be already set when this function is called! */ byte* buf, /* in/out: buffer for a converted integer value; this must be at least col_len long then! */ ibool row_format_col, /* TRUE if the mysql_data is from a MySQL row, FALSE if from a MySQL key value; in MySQL, a true VARCHAR storage format differs in a row and in a key value: in a key value the length is always stored in 2 bytes! */ byte* mysql_data, /* in: MySQL column value, not SQL NULL; NOTE that dfield may also get a pointer to mysql_data, therefore do not discard this as long as dfield is used! */ ulint col_len, /* in: MySQL column length */ ulint type, /* in: data type */ bool comp, /* in: TRUE=compact format */ ulint is_unsigned); /* in: != 0 if unsigned integer type */ ulint col_len, /* in: MySQL column length; NOTE that this is the storage length of the column in the MySQL format row, not necessarily the length of the actual payload data; if the column is a true VARCHAR then this is irrelevant */ ibool comp); /* in: TRUE = compact format */ /******************************************************************** Handles user errors and lock waits detected by the database engine. */ Loading Loading @@ -457,6 +467,16 @@ struct mysql_row_templ_struct { zero if column cannot be NULL */ ulint type; /* column type in Innobase mtype numbers DATA_CHAR... */ ulint mysql_type; /* MySQL type code; this is always < 256 */ ulint mysql_length_bytes; /* if mysql_type == DATA_MYSQL_TRUE_VARCHAR, this tells whether we should use 1 or 2 bytes to store the MySQL true VARCHAR data length at the start of row in the MySQL format (NOTE that the MySQL key value format always uses 2 bytes for the data len) */ ulint charset; /* MySQL charset-collation code of the column, or zero */ ulint mbminlen; /* minimum length of a char, in bytes, Loading Loading
client/mysqldump.c +1 −0 Original line number Diff line number Diff line Loading @@ -1084,6 +1084,7 @@ static void print_xml_row(FILE *xml_file, const char *row_name, check_io(xml_file); } /* getStructure -- retrievs database structure, prints out corresponding CREATE statement and fills out insert_pat. Loading
innobase/include/data0type.h +20 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,11 @@ extern dtype_t* dtype_binary; /*-------------------------------------------*/ /* The 'MAIN TYPE' of a column */ #define DATA_VARCHAR 1 /* character varying of the latin1_swedish_ci charset-collation */ latin1_swedish_ci charset-collation; note that the MySQL format for this, DATA_BINARY, DATA_VARMYSQL, is also affected by whether the 'precise type' contains DATA_MYSQL_TRUE_VARCHAR */ #define DATA_CHAR 2 /* fixed length character of the latin1_swedish_ci charset-collation */ #define DATA_FIXBINARY 3 /* binary string of fixed length */ Loading Loading @@ -102,6 +106,8 @@ columns, and for them the precise type is usually not used at all. #define DATA_MYSQL_TYPE_MASK 255 /* AND with this mask to extract the MySQL type from the precise type */ #define DATA_MYSQL_TRUE_VARCHAR 15 /* MySQL type code for the >= 5.0.3 format true VARCHAR */ /* Precise data types for system columns and the length of those columns; NOTE: the values must run from 0 up in the order given! All codes must Loading Loading @@ -134,6 +140,10 @@ be less than 256 */ In earlier versions this was set for some BLOB columns. */ #define DATA_LONG_TRUE_VARCHAR 4096 /* this is ORed to the precise data type when the column is true VARCHAR where MySQL uses 2 bytes to store the data len; for shorter VARCHARs MySQL uses only 1 byte */ /*-------------------------------------------*/ /* This many bytes we need to store the type information affecting the Loading @@ -144,6 +154,15 @@ SQL null*/ store the charset-collation number; one byte is left unused, though */ #define DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE 6 /************************************************************************* Gets the MySQL type code from a dtype. */ UNIV_INLINE ulint dtype_get_mysql_type( /*=================*/ /* out: MySQL type code; this is NOT an InnoDB type code! */ dtype_t* type); /* in: type struct */ /************************************************************************* Determine how many bytes the first n characters of the given string occupy. If the string is shorter than n characters, returns the number of bytes Loading
innobase/include/data0type.ic +13 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,19 @@ dtype_get_charset_coll( return((prtype >> 16) & 0xFFUL); } /************************************************************************* Gets the MySQL type code from a dtype. */ UNIV_INLINE ulint dtype_get_mysql_type( /*=================*/ /* out: MySQL type code; this is NOT an InnoDB type code! */ dtype_t* type) /* in: type struct */ { return(type->prtype & 0xFFUL); } /************************************************************************* Sets the mbminlen and mbmaxlen members of a data type structure. */ UNIV_INLINE Loading
innobase/include/que0que.h +2 −1 Original line number Diff line number Diff line Loading @@ -359,7 +359,8 @@ struct que_thr_struct{ the control came */ ulint resource; /* resource usage of the query thread thus far */ ulint lock_state; /* lock state of thread (table or row) */ ulint lock_state; /* lock state of thread (table or row) */ }; #define QUE_THR_MAGIC_N 8476583 Loading
innobase/include/row0mysql.h +61 −41 Original line number Diff line number Diff line Loading @@ -21,36 +21,6 @@ Created 9/17/2000 Heikki Tuuri typedef struct row_prebuilt_struct row_prebuilt_t; /*********************************************************************** Stores a variable-length field (like VARCHAR) length to dest, in the MySQL format. */ UNIV_INLINE byte* row_mysql_store_var_len( /*====================*/ /* out: dest + 2 */ byte* dest, /* in: where to store */ ulint len); /* in: length, must fit in two bytes */ /*********************************************************************** Reads a MySQL format variable-length field (like VARCHAR) length and returns pointer to the field data. */ UNIV_INLINE byte* row_mysql_read_var_ref( /*===================*/ /* out: field + 2 */ ulint* len, /* out: variable-length field length */ byte* field); /* in: field */ /*********************************************************************** Reads a MySQL format variable-length field (like VARCHAR) length and returns pointer to the field data. */ byte* row_mysql_read_var_ref_noninline( /*=============================*/ /* out: field + 2 */ ulint* len, /* out: variable-length field length */ byte* field); /* in: field */ /*********************************************************************** Frees the blob heap in prebuilt when no longer needed. */ Loading @@ -60,6 +30,30 @@ row_mysql_prebuilt_free_blob_heap( row_prebuilt_t* prebuilt); /* in: prebuilt struct of a ha_innobase:: table handle */ /*********************************************************************** Stores a >= 5.0.3 format true VARCHAR length to dest, in the MySQL row format. */ byte* row_mysql_store_true_var_len( /*=========================*/ /* out: pointer to the data, we skip the 1 or 2 bytes at the start that are used to store the len */ byte* dest, /* in: where to store */ ulint len, /* in: length, must fit in two bytes */ ulint lenlen);/* in: storage length of len: either 1 or 2 bytes */ /*********************************************************************** Reads a >= 5.0.3 format true VARCHAR length, in the MySQL row format, and returns a pointer to the data. */ byte* row_mysql_read_true_varchar( /*========================*/ /* out: pointer to the data, we skip the 1 or 2 bytes at the start that are used to store the len */ ulint* len, /* out: variable-length field length */ byte* field, /* in: field in the MySQL format */ ulint lenlen);/* in: storage length of len: either 1 or 2 bytes */ /*********************************************************************** Stores a reference to a BLOB in the MySQL format. */ void Loading @@ -83,24 +77,40 @@ row_mysql_read_blob_ref( ulint col_len); /* in: BLOB reference length (not BLOB length) */ /****************************************************************** Stores a non-SQL-NULL field given in the MySQL format in the Innobase format. */ UNIV_INLINE void Stores a non-SQL-NULL field given in the MySQL format in the InnoDB format. The counterpart of this function is row_sel_field_store_in_mysql_format() in row0sel.c. */ byte* row_mysql_store_col_in_innobase_format( /*===================================*/ dfield_t* dfield, /* in/out: dfield */ byte* buf, /* in/out: buffer for the converted value */ /* out: up to which byte we used buf in the conversion */ dfield_t* dfield, /* in/out: dfield where dtype information must be already set when this function is called! */ byte* buf, /* in/out: buffer for a converted integer value; this must be at least col_len long then! */ ibool row_format_col, /* TRUE if the mysql_data is from a MySQL row, FALSE if from a MySQL key value; in MySQL, a true VARCHAR storage format differs in a row and in a key value: in a key value the length is always stored in 2 bytes! */ byte* mysql_data, /* in: MySQL column value, not SQL NULL; NOTE that dfield may also get a pointer to mysql_data, therefore do not discard this as long as dfield is used! */ ulint col_len, /* in: MySQL column length */ ulint type, /* in: data type */ bool comp, /* in: TRUE=compact format */ ulint is_unsigned); /* in: != 0 if unsigned integer type */ ulint col_len, /* in: MySQL column length; NOTE that this is the storage length of the column in the MySQL format row, not necessarily the length of the actual payload data; if the column is a true VARCHAR then this is irrelevant */ ibool comp); /* in: TRUE = compact format */ /******************************************************************** Handles user errors and lock waits detected by the database engine. */ Loading Loading @@ -457,6 +467,16 @@ struct mysql_row_templ_struct { zero if column cannot be NULL */ ulint type; /* column type in Innobase mtype numbers DATA_CHAR... */ ulint mysql_type; /* MySQL type code; this is always < 256 */ ulint mysql_length_bytes; /* if mysql_type == DATA_MYSQL_TRUE_VARCHAR, this tells whether we should use 1 or 2 bytes to store the MySQL true VARCHAR data length at the start of row in the MySQL format (NOTE that the MySQL key value format always uses 2 bytes for the data len) */ ulint charset; /* MySQL charset-collation code of the column, or zero */ ulint mbminlen; /* minimum length of a char, in bytes, Loading