#include "univ.i"
Go to the source code of this file.
Classes | |
struct | dtype_struct |
Defines | |
#define | DATA_MYSQL_LATIN1_SWEDISH_CHARSET_COLL 8 |
#define | DATA_MYSQL_BINARY_CHARSET_COLL 63 |
#define | DATA_VARCHAR |
#define | DATA_CHAR |
#define | DATA_FIXBINARY 3 /* binary string of fixed length */ |
#define | DATA_BINARY 4 /* binary string */ |
#define | DATA_BLOB |
#define | DATA_INT 6 /* integer: can be any size 1 - 8 bytes */ |
#define | DATA_SYS_CHILD 7 /* address of the child page in node pointer */ |
#define | DATA_SYS 8 /* system column */ |
#define | DATA_FLOAT 9 |
#define | DATA_DOUBLE 10 |
#define | DATA_DECIMAL 11 /* decimal number stored as an ASCII string */ |
#define | DATA_VARMYSQL 12 /* any charset varying length char */ |
#define | DATA_MYSQL 13 /* any charset fixed length char */ |
#define | DATA_MTYPE_MAX |
#define | DATA_ENGLISH |
#define | DATA_ERROR 111 /* another relic from pre-MySQL time */ |
#define | DATA_MYSQL_TYPE_MASK |
#define | DATA_MYSQL_TRUE_VARCHAR |
#define | DATA_ROW_ID 0 /* row id: a 48-bit integer */ |
#define | DATA_ROW_ID_LEN 6 /* stored length for row id */ |
#define | DATA_TRX_ID 1 /* transaction id: 6 bytes */ |
#define | DATA_TRX_ID_LEN 6 |
#define | DATA_ROLL_PTR 2 /* rollback data pointer: 7 bytes */ |
#define | DATA_ROLL_PTR_LEN 7 |
#define | DATA_N_SYS_COLS 3 /* number of system columns defined above */ |
#define | DATA_SYS_PRTYPE_MASK 0xF /* mask to extract the above from prtype */ |
#define | DATA_NOT_NULL |
#define | DATA_UNSIGNED |
#define | DATA_BINARY_TYPE |
#define | DATA_LONG_TRUE_VARCHAR |
#define | DATA_ORDER_NULL_TYPE_BUF_SIZE 4 |
#define | DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE 6 |
#define | DATA_MBMAX 5 |
#define | DATA_MBMINMAXLEN(mbminlen, mbmaxlen) ((mbmaxlen) * DATA_MBMAX + (mbminlen)) |
#define | DATA_MBMINLEN(mbminmaxlen) |
#define | DATA_MBMAXLEN(mbminmaxlen) ((ulint) ((mbminmaxlen) / DATA_MBMAX)) |
Typedefs | |
typedef struct dtype_struct | dtype_t |
Functions | |
UNIV_INLINE ulint | dtype_get_mysql_type (const dtype_t *type) |
UNIV_INTERN ulint | dtype_get_at_most_n_mbchars (ulint prtype, ulint mbminmaxlen, ulint prefix_len, ulint data_len, const char *str) |
UNIV_INTERN ibool | dtype_is_string_type (ulint mtype) |
UNIV_INTERN ibool | dtype_is_binary_string_type (ulint mtype, ulint prtype) |
UNIV_INTERN ibool | dtype_is_non_binary_string_type (ulint mtype, ulint prtype) |
UNIV_INLINE void | dtype_set (dtype_t *type, ulint mtype, ulint prtype, ulint len) |
UNIV_INLINE void | dtype_copy (dtype_t *type1, const dtype_t *type2) |
UNIV_INLINE ulint | dtype_get_mtype (const dtype_t *type) |
UNIV_INLINE ulint | dtype_get_prtype (const dtype_t *type) |
UNIV_INLINE void | dtype_get_mblen (ulint mtype, ulint prtype, ulint *mbminlen, ulint *mbmaxlen) |
UNIV_INLINE ulint | dtype_get_charset_coll (ulint prtype) |
UNIV_INTERN ulint | dtype_form_prtype (ulint old_prtype, ulint charset_coll) |
UNIV_INLINE ibool | dtype_is_utf8 (ulint prtype) |
UNIV_INLINE ulint | dtype_get_len (const dtype_t *type) |
UNIV_INLINE ulint | dtype_get_mbminlen (const dtype_t *type) |
UNIV_INLINE ulint | dtype_get_mbmaxlen (const dtype_t *type) |
UNIV_INLINE void | dtype_set_mbminmaxlen (dtype_t *type, ulint mbminlen, ulint mbmaxlen) |
UNIV_INLINE ulint | dtype_get_pad_char (ulint mtype, ulint prtype) |
UNIV_INLINE ulint | dtype_get_fixed_size_low (ulint mtype, ulint prtype, ulint len, ulint mbminmaxlen, ulint comp) |
UNIV_INLINE ulint | dtype_get_min_size_low (ulint mtype, ulint prtype, ulint len, ulint mbminmaxlen) |
UNIV_INLINE ulint | dtype_get_max_size_low (ulint mtype, ulint len) |
UNIV_INLINE ulint | dtype_get_sql_null_size (const dtype_t *type, ulint comp) |
UNIV_INLINE void | dtype_read_for_order_and_null_size (dtype_t *type, const byte *buf) |
UNIV_INLINE void | dtype_new_store_for_order_and_null_size (byte *buf, const dtype_t *type, ulint prefix_len) |
UNIV_INLINE void | dtype_new_read_for_order_and_null_size (dtype_t *type, const byte *buf) |
UNIV_INTERN ibool | dtype_validate (const dtype_t *type) |
UNIV_INTERN void | dtype_print (const dtype_t *type) |
Variables | |
ulint | data_mysql_default_charset_coll |
#define DATA_BINARY_TYPE |
1024 /* if the data type is a binary character string, this is ORed to the precise type: this only holds for tables created with >= MySQL-4.0.14 */
Definition at line 136 of file data0type.h.
#define DATA_BLOB |
5 /* binary large object, or a TEXT type; if prtype & DATA_BINARY_TYPE == 0, then this is actually a TEXT column (or a BLOB created with < 4.0.14; since column prefix indexes came only in 4.0.14, the missing flag in BLOBs created before that does not cause any harm) */
Definition at line 45 of file data0type.h.
#define DATA_CHAR |
2 /* fixed length character of the latin1_swedish_ci charset-collation */
Definition at line 42 of file data0type.h.
#define DATA_ENGLISH |
4 /* English language character string: this is a relic from pre-MySQL time and only used for InnoDBs own system tables */
Definition at line 107 of file data0type.h.
#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 */
Definition at line 141 of file data0type.h.
#define DATA_MBMINLEN | ( | mbminmaxlen | ) |
((ulint) \ UNIV_EXPECT(((mbminmaxlen) % DATA_MBMAX), \ 1))
Definition at line 160 of file data0type.h.
#define DATA_MTYPE_MAX |
63 /* dtype_store_for_order_and_null_size() requires the values are <= 63 */
Definition at line 62 of file data0type.h.
#define DATA_MYSQL_TRUE_VARCHAR |
15 /* MySQL type code for the >= 5.0.3 format true VARCHAR */
Definition at line 114 of file data0type.h.
#define DATA_MYSQL_TYPE_MASK |
255 /* AND with this mask to extract the MySQL type from the precise type */
Definition at line 110 of file data0type.h.
#define DATA_NOT_NULL |
256 /* this is ORed to the precise type when the column is declared as NOT NULL */
Definition at line 134 of file data0type.h.
#define DATA_UNSIGNED |
512 /* this id ORed to the precise type when we have an unsigned integer type */
Definition at line 135 of file data0type.h.
#define DATA_VARCHAR |
1 /* character varying of the 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 */
Definition at line 41 of file data0type.h.
UNIV_INLINE void dtype_copy | ( | dtype_t * | type1, |
const dtype_t * | type2 | ||
) |
Copies a data type structure. in: type struct to copy from
type1 | in: type struct to copy to |
UNIV_INTERN ulint dtype_form_prtype | ( | ulint | old_prtype, |
ulint | charset_coll | ||
) |
Forms a precise type from the < 4.1.2 format precise type plus the charset-collation code.
Forms a precise type from the < 4.1.2 format precise type plus the charset-collation code.
old_prtype | in: the MySQL type code and the flags DATA_BINARY_TYPE etc. |
charset_coll | in: MySQL charset-collation code |
Definition at line 154 of file data0type.cc.
References ut_a.
UNIV_INTERN ulint dtype_get_at_most_n_mbchars | ( | ulint | prtype, |
ulint | mbminmaxlen, | ||
ulint | prefix_len, | ||
ulint | data_len, | ||
const char * | str | ||
) |
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 the characters in the string occupy.
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 the characters in the string occupy.
prtype | in: precise type |
mbminmaxlen | in: minimum and maximum length of a multi-byte character |
prefix_len | in: length of the requested prefix, in characters, multiplied by dtype_get_mbmaxlen(dtype) |
data_len | in: length of str (in bytes) |
str | in: the string whose prefix length is being determined |
Definition at line 49 of file data0type.cc.
References dtype_get_charset_coll(), innobase_get_at_most_n_mbchars(), ut_a, and ut_ad.
UNIV_INLINE ulint dtype_get_charset_coll | ( | ulint | prtype | ) |
Gets the MySQL charset-collation code for MySQL string types.
Referenced by build_template(), cmp_cols_are_equal(), cmp_data_data_slow(), cmp_dtuple_rec_with_match(), cmp_rec_rec_simple(), cmp_rec_rec_with_match(), dict_load_column_low(), and dtype_get_at_most_n_mbchars().
UNIV_INLINE ulint dtype_get_fixed_size_low | ( | ulint | mtype, |
ulint | prtype, | ||
ulint | len, | ||
ulint | mbminmaxlen, | ||
ulint | comp | ||
) |
Returns the size of a fixed size data type, 0 if not a fixed size type.
mtype | in: main type |
prtype | in: precise type |
len | in: length |
mbminmaxlen | in: minimum and maximum length of a multibyte character, in bytes |
UNIV_INLINE ulint dtype_get_len | ( | const dtype_t * | type | ) |
Gets the type length.
Referenced by rec_convert_dtuple_to_rec_comp(), and row_mysql_store_col_in_innobase_format().
UNIV_INLINE ulint dtype_get_max_size_low | ( | ulint | mtype, |
ulint | len | ||
) |
Returns the maximum size of a data type. Note: types in system tables may be incomplete and return incorrect information.
mtype | in: main type |
UNIV_INLINE void dtype_get_mblen | ( | ulint | mtype, |
ulint | prtype, | ||
ulint * | mbminlen, | ||
ulint * | mbmaxlen | ||
) |
Compute the mbminlen and mbmaxlen members of a data type structure. out: maximum length of a multi-byte character
mtype | in: main type |
prtype | in: precise type (and collation) |
mbminlen | out: minimum length of a multi-byte character |
Referenced by dict_mem_fill_column_struct().
UNIV_INLINE ulint dtype_get_mbmaxlen | ( | const dtype_t * | type | ) |
Gets the maximum length of a character, in bytes.
Referenced by dtype_validate(), and row_mysql_store_col_in_innobase_format().
UNIV_INLINE ulint dtype_get_mbminlen | ( | const dtype_t * | type | ) |
Gets the minimum length of a character, in bytes.
Referenced by dtype_validate(), and row_mysql_store_col_in_innobase_format().
UNIV_INLINE ulint dtype_get_min_size_low | ( | ulint | mtype, |
ulint | prtype, | ||
ulint | len, | ||
ulint | mbminmaxlen | ||
) |
Returns the minimum size of a data type.
mtype | in: main type |
prtype | in: precise type |
len | in: length |
UNIV_INLINE ulint dtype_get_mtype | ( | const dtype_t * | type | ) |
Gets the SQL main data type.
Referenced by dfield_print(), dfield_print_also_hex(), pars_assignment_statement(), and rec_convert_dtuple_to_rec_comp().
UNIV_INLINE ulint dtype_get_mysql_type | ( | const dtype_t * | type | ) |
Gets the MySQL type code from a dtype.
Referenced by row_mysql_store_col_in_innobase_format(), and row_sel_convert_mysql_key_to_innobase().
UNIV_INLINE ulint dtype_get_pad_char | ( | ulint | mtype, |
ulint | prtype | ||
) |
Gets the padding character code for the type.
mtype | in: main type |
Referenced by cmp_data_data_slow(), cmp_dtuple_rec_with_match(), cmp_rec_rec_simple(), and cmp_rec_rec_with_match().
UNIV_INLINE ulint dtype_get_prtype | ( | const dtype_t * | type | ) |
Gets the precise data type.
Referenced by dfield_print_also_hex(), and rec_convert_dtuple_to_rec_comp().
UNIV_INLINE ulint dtype_get_sql_null_size | ( | const dtype_t * | type, |
ulint | comp | ||
) |
Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a type. For fixed length types it is the fixed length of the type, otherwise 0.
type | in: type |
UNIV_INTERN ibool dtype_is_binary_string_type | ( | ulint | mtype, |
ulint | prtype | ||
) |
Checks if a type is a binary string type. Note that for tables created with < 4.0.14, we do not know if a DATA_BLOB column is a BLOB or a TEXT column. For those DATA_BLOB columns this function currently returns FALSE.
Checks if a type is a binary string type. Note that for tables created with < 4.0.14, we do not know if a DATA_BLOB column is a BLOB or a TEXT column. For those DATA_BLOB columns this function currently returns FALSE.
mtype | in: main data type |
prtype | in: precise type |
Definition at line 111 of file data0type.cc.
UNIV_INTERN ibool dtype_is_non_binary_string_type | ( | ulint | mtype, |
ulint | prtype | ||
) |
Checks if a type is a non-binary string type. That is, dtype_is_string_type is TRUE and dtype_is_binary_string_type is FALSE. Note that for tables created with < 4.0.14, we do not know if a DATA_BLOB column is a BLOB or a TEXT column. For those DATA_BLOB columns this function currently returns TRUE.
Checks if a type is a non-binary string type. That is, dtype_is_string_type is TRUE and dtype_is_binary_string_type is FALSE. Note that for tables created with < 4.0.14, we do not know if a DATA_BLOB column is a BLOB or a TEXT column. For those DATA_BLOB columns this function currently returns TRUE.
mtype | in: main data type |
prtype | in: precise type |
Definition at line 134 of file data0type.cc.
UNIV_INTERN ibool dtype_is_string_type | ( | ulint | mtype | ) |
Checks if a data main type is a string type. Also a BLOB is considered a string type.
Checks if a data main type is a string type. Also a BLOB is considered a string type.
mtype | in: InnoDB main data type code: DATA_CHAR, ... |
Definition at line 90 of file data0type.cc.
UNIV_INLINE ibool dtype_is_utf8 | ( | ulint | prtype | ) |
Determines if a MySQL string type is a subset of UTF-8. This function may return false negatives, in case further character-set collation codes are introduced in MySQL later.
UNIV_INLINE void dtype_new_read_for_order_and_null_size | ( | dtype_t * | type, |
const byte * | buf | ||
) |
Reads to a type the stored information which determines its alphabetical ordering and the storage size of an SQL NULL value. This is the 4.1.x storage format. in: buffer for stored type order info
type | in: type struct |
UNIV_INLINE void dtype_new_store_for_order_and_null_size | ( | byte * | buf, |
const dtype_t * | type, | ||
ulint | prefix_len | ||
) |
Stores for a type the information which determines its alphabetical ordering and the storage size of an SQL NULL value. This is the >= 4.1.x storage format. in: prefix length to replace type->len, or 0
buf | in: buffer for DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE bytes where we store the info |
type | in: type struct |
UNIV_INTERN void dtype_print | ( | const dtype_t * | type | ) |
Prints a data type structure. in: type
Prints a data type structure.
type | in: type |
Definition at line 195 of file data0type.cc.
References dtype_struct::len, dtype_struct::mtype, dtype_struct::prtype, and ut_a.
UNIV_INLINE void dtype_read_for_order_and_null_size | ( | dtype_t * | type, |
const byte * | buf | ||
) |
Reads to a type the stored information which determines its alphabetical ordering and the storage size of an SQL NULL value. in: buffer for the stored order info
type | in: type struct |
Sets a data type structure. in: precision of type
type | in: type struct to init |
mtype | in: main data type |
prtype | in: precise type |
Referenced by dict_index_build_node_ptr(), sym_tab_add_bound_lit(), sym_tab_add_int_lit(), and sym_tab_add_str_lit().
UNIV_INLINE void dtype_set_mbminmaxlen | ( | dtype_t * | type, |
ulint | mbminlen, | ||
ulint | mbmaxlen | ||
) |
Sets the minimum and maximum length of a character, in bytes. in: maximum length of a char, in bytes, or 0 if this is not a character type
type | in/out: type |
mbminlen | in: minimum length of a char, in bytes, or 0 if this is not a character type |
UNIV_INTERN ibool dtype_validate | ( | const dtype_t * | type | ) |
Validates a data type structure.
Validates a data type structure.
type | in: type struct to validate |
Definition at line 171 of file data0type.cc.
References dtype_get_mbmaxlen(), dtype_get_mbminlen(), dtype_struct::mtype, dtype_struct::prtype, and ut_a.