Drizzled Public API Documentation

data0type.h File Reference
#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

Detailed Description

Data types

Created 1/16/1996 Heikki Tuuri

Definition in file data0type.h.


Define Documentation

#define DATA_BINARY_TYPE
Value:
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
Value:
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
Value:
2 /* fixed length character of the
        latin1_swedish_ci charset-collation */

Definition at line 42 of file data0type.h.

#define DATA_ENGLISH
Value:
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
Value:
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)
Value:
((ulint) \
                                    UNIV_EXPECT(((mbminmaxlen) % DATA_MBMAX), \
                                                1))

Definition at line 160 of file data0type.h.

#define DATA_MTYPE_MAX
Value:
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
Value:
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
Value:
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
Value:
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
Value:
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
Value:
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.


Function Documentation

UNIV_INLINE void dtype_copy ( dtype_t type1,
const dtype_t type2 
)

Copies a data type structure. in: type struct to copy from

Parameters:
type1in: 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.

Returns:
precise type, including the charset-collation code in: MySQL charset-collation code

Forms a precise type from the < 4.1.2 format precise type plus the charset-collation code.

Returns:
precise type, including the charset-collation code
Parameters:
old_prtypein: the MySQL type code and the flags DATA_BINARY_TYPE etc.
charset_collin: 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.

Returns:
length of the prefix, in bytes in: the string whose prefix length is being determined

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.

Returns:
length of the prefix, in bytes
Parameters:
prtypein: precise type
mbminmaxlenin: minimum and maximum length of a multi-byte character
prefix_lenin: length of the requested prefix, in characters, multiplied by dtype_get_mbmaxlen(dtype)
data_lenin: length of str (in bytes)
strin: 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.

Returns:
MySQL charset-collation code in: precise data type

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.

Returns:
fixed size, or 0 in: nonzero=ROW_FORMAT=COMPACT
Parameters:
mtypein: main type
prtypein: precise type
lenin: length
mbminmaxlenin: minimum and maximum length of a multibyte character, in bytes
UNIV_INLINE ulint dtype_get_len ( const dtype_t type)

Gets the type length.

Returns:
fixed length of the type, in bytes, or 0 if variable-length in: data type

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.

Returns:
maximum size in: length
Parameters:
mtypein: 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

Parameters:
mtypein: main type
prtypein: precise type (and collation)
mbminlenout: 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.

Returns:
maximum length of a char, in bytes, or 0 if this is not a character type in: type

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.

Returns:
minimum length of a char, in bytes, or 0 if this is not a character type in: type

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.

Returns:
minimum size in: minimum and maximum length of a multibyte character
Parameters:
mtypein: main type
prtypein: precise type
lenin: length
UNIV_INLINE ulint dtype_get_mtype ( const dtype_t type)

Gets the SQL main data type.

Returns:
SQL main data type in: 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.

Returns:
MySQL type code; this is NOT an InnoDB type code! in: type struct

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.

Returns:
padding character code, or ULINT_UNDEFINED if no padding specified in: precise type
Parameters:
mtypein: 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.

Returns:
precise data type in: 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.

Returns:
SQL null storage size in ROW_FORMAT=REDUNDANT in: nonzero=ROW_FORMAT=COMPACT
Parameters:
typein: 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.

Returns:
TRUE if binary string type in: precise type

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.

Returns:
TRUE if binary string type
Parameters:
mtypein: main data type
prtypein: 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.

Returns:
TRUE if non-binary string type in: precise type

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.

Returns:
TRUE if non-binary string type
Parameters:
mtypein: main data type
prtypein: 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.

Returns:
TRUE if string type in: InnoDB main data type code: DATA_CHAR, ...

Checks if a data main type is a string type. Also a BLOB is considered a string type.

Returns:
TRUE if string type
Parameters:
mtypein: 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.

Returns:
TRUE if a subset of UTF-8 in: precise data type
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

Parameters:
typein: 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

Parameters:
bufin: buffer for DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE bytes where we store the info
typein: type struct
UNIV_INTERN void dtype_print ( const dtype_t type)

Prints a data type structure. in: type

Prints a data type structure.

Parameters:
typein: 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

Parameters:
typein: type struct
UNIV_INLINE void dtype_set ( dtype_t type,
ulint  mtype,
ulint  prtype,
ulint  len 
)

Sets a data type structure. in: precision of type

Parameters:
typein: type struct to init
mtypein: main data type
prtypein: 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

Parameters:
typein/out: type
mbminlenin: 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.

Returns:
TRUE if ok in: type struct to validate

Validates a data type structure.

Returns:
TRUE if ok
Parameters:
typein: 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.