2005-10-27 07:29:40 +00:00
|
|
|
/**********************************************************************
|
|
|
|
Data dictionary system
|
|
|
|
|
|
|
|
(c) 1996 Innobase Oy
|
|
|
|
|
|
|
|
Created 1/8/1996 Heikki Tuuri
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
#include "dict0load.h"
|
|
|
|
#include "trx0undo.h"
|
|
|
|
#include "trx0sys.h"
|
Reduce the size of the data dictionary cache. (Bug #20877)
dtype_t: Remove unused field "prec", which was supposed to be used for
the precision of decimal columns in stand-alone InnoDB.
dtype_get_prec(): Remove.
dtype_set(), dict_mem_table_add_col(): Remove parameter "prec".
dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len)
into bit-fields.
dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds.
dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields.
Replace the default clust_pos value ULINT_UNDEFINED with
REC_MAX_N_FIELDS and replace all references to clust_pos with calls to
the accessor function dict_col_get_clust_pos().
dict_field_t: Turn prefix_len and fixed_len into bit-fields.
dict_tree_t: Remove pad[64].
dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded,
cached, flags, stat_initialized, and autoinc_inited into bit-fields.
Remove does_not_fit_in_memory from non-debug builds.
dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols,
n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields.
dict_foreign_struct: Turn n_fields and type into bit-fields.
rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields.
Omit level unless #defined UNIV_SYNC_DEBUG.
Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED)
from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic.
dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED.
2006-09-12 14:06:46 +00:00
|
|
|
#include "rem0types.h"
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
#include "data0type.h"
|
2005-10-27 07:29:40 +00:00
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the column data type. */
|
|
|
|
UNIV_INLINE
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
void
|
|
|
|
dict_col_copy_type(
|
|
|
|
/*===============*/
|
|
|
|
const dict_col_t* col, /* in: column */
|
|
|
|
dtype_t* type) /* out: data type */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
ut_ad(col && type);
|
|
|
|
|
|
|
|
type->mtype = col->mtype;
|
|
|
|
type->prtype = col->prtype;
|
|
|
|
type->len = col->len;
|
|
|
|
type->mbminlen = col->mbminlen;
|
|
|
|
type->mbmaxlen = col->mbmaxlen;
|
|
|
|
}
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2007-06-01 06:01:15 +00:00
|
|
|
#ifdef UNIV_DEBUG
|
|
|
|
/*************************************************************************
|
|
|
|
Assert that a column and a data type match. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ibool
|
|
|
|
dict_col_type_assert_equal(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: TRUE */
|
|
|
|
const dict_col_t* col, /* in: column */
|
|
|
|
const dtype_t* type) /* in: data type */
|
|
|
|
{
|
|
|
|
ut_ad(col);
|
|
|
|
ut_ad(type);
|
|
|
|
|
|
|
|
ut_ad(col->mtype == type->mtype);
|
|
|
|
ut_ad(col->prtype == type->prtype);
|
|
|
|
ut_ad(col->len == type->len);
|
|
|
|
ut_ad(col->mbminlen == type->mbminlen);
|
|
|
|
ut_ad(col->mbmaxlen == type->mbmaxlen);
|
|
|
|
|
|
|
|
return(TRUE);
|
|
|
|
}
|
|
|
|
#endif /* UNIV_DEBUG */
|
|
|
|
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
/***************************************************************************
|
|
|
|
Returns the minimum size of the column. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_col_get_min_size(
|
|
|
|
/*==================*/
|
|
|
|
/* out: minimum size */
|
|
|
|
const dict_col_t* col) /* in: column */
|
|
|
|
{
|
|
|
|
return(dtype_get_min_size_low(col->mtype, col->prtype, col->len,
|
|
|
|
col->mbminlen, col->mbmaxlen));
|
|
|
|
}
|
|
|
|
/***************************************************************************
|
|
|
|
Returns the maximum size of the column. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_col_get_max_size(
|
|
|
|
/*==================*/
|
|
|
|
/* out: maximum size */
|
|
|
|
const dict_col_t* col) /* in: column */
|
|
|
|
{
|
|
|
|
return(dtype_get_max_size_low(col->mtype, col->len));
|
|
|
|
}
|
|
|
|
/***************************************************************************
|
|
|
|
Returns the size of a fixed size column, 0 if not a fixed size column. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_col_get_fixed_size(
|
|
|
|
/*====================*/
|
|
|
|
/* out: fixed size, or 0 */
|
|
|
|
const dict_col_t* col) /* in: column */
|
|
|
|
{
|
|
|
|
return(dtype_get_fixed_size_low(col->mtype, col->prtype, col->len,
|
|
|
|
col->mbminlen, col->mbmaxlen));
|
|
|
|
}
|
|
|
|
/***************************************************************************
|
|
|
|
Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column.
|
|
|
|
For fixed length types it is the fixed length of the type, otherwise 0. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_col_get_sql_null_size(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: SQL null storage size
|
|
|
|
in ROW_FORMAT=REDUNDANT */
|
|
|
|
const dict_col_t* col) /* in: column */
|
|
|
|
{
|
|
|
|
return(dict_col_get_fixed_size(col));
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the column number. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_col_get_no(
|
|
|
|
/*============*/
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_col_t* col)
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
|
|
|
ut_ad(col);
|
|
|
|
|
|
|
|
return(col->ind);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the column position in the clustered index. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_col_get_clust_pos(
|
|
|
|
/*===================*/
|
2006-09-14 11:51:34 +00:00
|
|
|
const dict_col_t* col, /* in: table column */
|
|
|
|
const dict_index_t* clust_index) /* in: clustered index */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
2006-09-14 11:51:34 +00:00
|
|
|
ulint i;
|
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
ut_ad(col);
|
2006-09-14 11:51:34 +00:00
|
|
|
ut_ad(clust_index && clust_index->type & DICT_CLUSTERED);
|
|
|
|
|
|
|
|
for (i = 0; i < clust_index->n_def; i++) {
|
|
|
|
const dict_field_t* field = &clust_index->fields[i];
|
|
|
|
|
|
|
|
if (!field->prefix_len && field->col == col) {
|
|
|
|
return(i);
|
|
|
|
}
|
|
|
|
}
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-14 11:51:34 +00:00
|
|
|
return(ULINT_UNDEFINED);
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the first index on the table (the clustered index). */
|
|
|
|
UNIV_INLINE
|
|
|
|
dict_index_t*
|
|
|
|
dict_table_get_first_index(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: index, NULL if none exists */
|
|
|
|
dict_table_t* table) /* in: table */
|
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
|
|
|
|
|
|
|
return(UT_LIST_GET_FIRST(table->indexes));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the next index on the table. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dict_index_t*
|
|
|
|
dict_table_get_next_index(
|
|
|
|
/*======================*/
|
|
|
|
/* out: index, NULL if none left */
|
|
|
|
dict_index_t* index) /* in: index */
|
|
|
|
{
|
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
|
|
|
|
|
|
|
return(UT_LIST_GET_NEXT(indexes, index));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the number of user-defined columns in a table in the dictionary
|
|
|
|
cache. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_table_get_n_user_cols(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: number of user-defined (e.g., not
|
|
|
|
ROW_ID) columns of a table */
|
|
|
|
dict_table_t* table) /* in: table */
|
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
return(table->n_cols - DATA_N_SYS_COLS);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the number of system columns in a table in the dictionary cache. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_table_get_n_sys_cols(
|
|
|
|
/*======================*/
|
|
|
|
/* out: number of system (e.g.,
|
|
|
|
ROW_ID) columns of a table */
|
|
|
|
dict_table_t* table __attribute__((unused))) /* in: table */
|
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
|
|
|
ut_ad(table->cached);
|
|
|
|
|
|
|
|
return(DATA_N_SYS_COLS);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the number of all columns (also system) in a table in the dictionary
|
|
|
|
cache. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_table_get_n_cols(
|
|
|
|
/*==================*/
|
|
|
|
/* out: number of columns of a table */
|
|
|
|
dict_table_t* table) /* in: table */
|
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
return(table->n_cols);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the nth column of a table. */
|
|
|
|
UNIV_INLINE
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_col_t*
|
2005-10-27 07:29:40 +00:00
|
|
|
dict_table_get_nth_col(
|
|
|
|
/*===================*/
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
/* out: pointer to column object */
|
|
|
|
const dict_table_t* table, /* in: table */
|
|
|
|
ulint pos) /* in: position of column */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(pos < table->n_def);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
|
|
|
|
|
|
|
return((table->cols) + pos);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the given system column of a table. */
|
|
|
|
UNIV_INLINE
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_col_t*
|
2005-10-27 07:29:40 +00:00
|
|
|
dict_table_get_sys_col(
|
|
|
|
/*===================*/
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
/* out: pointer to column object */
|
|
|
|
const dict_table_t* table, /* in: table */
|
|
|
|
ulint sys) /* in: DATA_ROW_ID, ... */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_col_t* col;
|
2005-10-27 07:29:40 +00:00
|
|
|
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(sys < DATA_N_SYS_COLS);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
|
|
|
|
2006-02-21 12:37:54 +00:00
|
|
|
col = dict_table_get_nth_col(table, table->n_cols
|
2006-08-28 17:42:45 +00:00
|
|
|
- DATA_N_SYS_COLS + sys);
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
ut_ad(col->mtype == DATA_SYS);
|
|
|
|
ut_ad(col->prtype == (sys | DATA_NOT_NULL));
|
2005-10-27 07:29:40 +00:00
|
|
|
|
|
|
|
return(col);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the given system column number of a table. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_table_get_sys_col_no(
|
|
|
|
/*======================*/
|
|
|
|
/* out: column number */
|
|
|
|
dict_table_t* table, /* in: table */
|
|
|
|
ulint sys) /* in: DATA_ROW_ID, ... */
|
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
ut_ad(sys < DATA_N_SYS_COLS);
|
|
|
|
ut_ad(table->magic_n == DICT_TABLE_MAGIC_N);
|
|
|
|
|
|
|
|
return(table->n_cols - DATA_N_SYS_COLS + sys);
|
|
|
|
}
|
|
|
|
|
2006-02-27 09:11:57 +00:00
|
|
|
/************************************************************************
|
|
|
|
Check whether the table uses the compact page format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ibool
|
|
|
|
dict_table_is_comp(
|
|
|
|
/*===============*/
|
|
|
|
/* out: TRUE if table uses the
|
|
|
|
compact page format */
|
|
|
|
const dict_table_t* table) /* in: table */
|
|
|
|
{
|
|
|
|
ut_ad(table);
|
|
|
|
|
|
|
|
#if DICT_TF_COMPACT != TRUE
|
|
|
|
#error
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return(UNIV_LIKELY(table->flags & DICT_TF_COMPACT));
|
|
|
|
}
|
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
/************************************************************************
|
|
|
|
Gets the number of fields in the internal representation of an index,
|
|
|
|
including fields added by the dictionary system. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_index_get_n_fields(
|
|
|
|
/*====================*/
|
|
|
|
/* out: number of fields */
|
|
|
|
dict_index_t* index) /* in: an internal representation of index
|
|
|
|
(in the dictionary cache) */
|
|
|
|
{
|
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
return(index->n_fields);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the number of fields in the internal representation of an index
|
|
|
|
that uniquely determine the position of an index entry in the index, if
|
|
|
|
we do not take multiversioning into account: in the B-tree use the value
|
|
|
|
returned by dict_index_get_n_unique_in_tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_index_get_n_unique(
|
|
|
|
/*====================*/
|
|
|
|
/* out: number of fields */
|
|
|
|
dict_index_t* index) /* in: an internal representation of index
|
|
|
|
(in the dictionary cache) */
|
|
|
|
{
|
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
|
|
|
ut_ad(index->cached);
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
return(index->n_uniq);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the number of fields in the internal representation of an index
|
|
|
|
which uniquely determine the position of an index entry in the index, if
|
|
|
|
we also take multiversioning into account. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_index_get_n_unique_in_tree(
|
|
|
|
/*============================*/
|
|
|
|
/* out: number of fields */
|
|
|
|
dict_index_t* index) /* in: an internal representation of index
|
|
|
|
(in the dictionary cache) */
|
|
|
|
{
|
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
|
|
|
ut_ad(index->cached);
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
if (index->type & DICT_CLUSTERED) {
|
|
|
|
|
|
|
|
return(dict_index_get_n_unique(index));
|
|
|
|
}
|
|
|
|
|
|
|
|
return(dict_index_get_n_fields(index));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the number of user-defined ordering fields in the index. In the internal
|
|
|
|
representation of clustered indexes we add the row id to the ordering fields
|
|
|
|
to make a clustered index unique, but this function returns the number of
|
|
|
|
fields the user defined in the index as ordering fields. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_index_get_n_ordering_defined_by_user(
|
|
|
|
/*======================================*/
|
|
|
|
/* out: number of fields */
|
|
|
|
dict_index_t* index) /* in: an internal representation of index
|
|
|
|
(in the dictionary cache) */
|
|
|
|
{
|
|
|
|
return(index->n_user_defined_cols);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the nth field of an index. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dict_field_t*
|
|
|
|
dict_index_get_nth_field(
|
|
|
|
/*=====================*/
|
|
|
|
/* out: pointer to field object */
|
|
|
|
dict_index_t* index, /* in: index */
|
|
|
|
ulint pos) /* in: position of field */
|
|
|
|
{
|
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(pos < index->n_def);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
|
|
|
|
|
|
|
return((index->fields) + pos);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Returns the position of a system column in an index. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_index_get_sys_col_pos(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: position, ULINT_UNDEFINED if not
|
|
|
|
contained */
|
|
|
|
dict_index_t* index, /* in: index */
|
|
|
|
ulint type) /* in: DATA_ROW_ID, ... */
|
|
|
|
{
|
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
|
|
|
ut_ad(!(index->type & DICT_UNIVERSAL));
|
|
|
|
|
|
|
|
if (index->type & DICT_CLUSTERED) {
|
|
|
|
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
return(dict_col_get_clust_pos(
|
|
|
|
dict_table_get_sys_col(index->table, type),
|
|
|
|
index));
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
return(dict_index_get_nth_col_pos(
|
|
|
|
index, dict_table_get_sys_col_no(index->table, type)));
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the field column. */
|
|
|
|
UNIV_INLINE
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_col_t*
|
2005-10-27 07:29:40 +00:00
|
|
|
dict_field_get_col(
|
|
|
|
/*===============*/
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_field_t* field)
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
|
|
|
ut_ad(field);
|
|
|
|
|
|
|
|
return(field->col);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
Gets pointer to the nth column in an index. */
|
2005-10-27 07:29:40 +00:00
|
|
|
UNIV_INLINE
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
const dict_col_t*
|
|
|
|
dict_index_get_nth_col(
|
|
|
|
/*===================*/
|
|
|
|
/* out: column */
|
|
|
|
const dict_index_t* index, /* in: index */
|
|
|
|
ulint pos) /* in: position of the field */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
return(dict_field_get_col(dict_index_get_nth_field((dict_index_t*)
|
|
|
|
index, pos)));
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Gets the column number the nth field in an index. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
dict_index_get_nth_col_no(
|
|
|
|
/*======================*/
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
/* out: column number */
|
|
|
|
const dict_index_t* index, /* in: index */
|
|
|
|
ulint pos) /* in: position of the field */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits. (Bug #20877)
dtype_t: Change the type of all bit-fields to unsigned.
dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily. Add const to many dict_col_t* declarations.
dict_index_get_nth_type(): Replace with dict_index_get_nth_col().
dict_col_get_type(): Replace with dict_col_copy_type().
dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.
dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.
dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.
dtype_copy(): Add a const qualifier to type2 (the one being copied from).
dtype_set_mblen(): Replaced with dtype_get_mblen().
dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size(). These are used by the
dict_col_get_{fixed,min,max}_size() functions.
cmp_types_are_equal(): Replace with cmp_cols_are_equal().
dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".
dtype_binary, dtype_binary_val: Remove.
dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
|
|
|
return(dict_col_get_no(dict_index_get_nth_col(index, pos)));
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the space id of the root of the index tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_get_space(
|
|
|
|
/*=================*/
|
2005-10-27 07:29:40 +00:00
|
|
|
/* out: space id */
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_t* index) /* in: index */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
2006-09-15 11:04:01 +00:00
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-15 11:04:01 +00:00
|
|
|
return(index->space);
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Sets the space id of the root of the index tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_set_space(
|
|
|
|
/*=================*/
|
|
|
|
dict_index_t* index, /* in: index */
|
2005-10-27 07:29:40 +00:00
|
|
|
ulint space) /* in: space id */
|
|
|
|
{
|
2006-09-15 11:04:01 +00:00
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-15 11:04:01 +00:00
|
|
|
index->space = space;
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the page number of the root of the index tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_get_page(
|
|
|
|
/*================*/
|
2005-10-27 07:29:40 +00:00
|
|
|
/* out: page number */
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_t* index) /* in: index */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
2006-09-15 11:04:01 +00:00
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-15 11:04:01 +00:00
|
|
|
return(index->page);
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Sets the page number of the root of index tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_set_page(
|
|
|
|
/*================*/
|
|
|
|
dict_index_t* index, /* in: index */
|
2005-10-27 07:29:40 +00:00
|
|
|
ulint page) /* in: page number */
|
|
|
|
{
|
2006-09-15 11:04:01 +00:00
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-15 11:04:01 +00:00
|
|
|
index->page = page;
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the type of the index tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_get_type(
|
|
|
|
/*================*/
|
2005-10-27 07:29:40 +00:00
|
|
|
/* out: type */
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_t* index) /* in: index */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
2006-09-15 11:04:01 +00:00
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-15 11:04:01 +00:00
|
|
|
return(index->type);
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Gets the read-write lock of the index tree. */
|
|
|
|
UNIV_INLINE
|
|
|
|
rw_lock_t*
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_get_lock(
|
|
|
|
/*================*/
|
2005-10-27 07:29:40 +00:00
|
|
|
/* out: read-write lock */
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_t* index) /* in: index */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
2006-09-15 11:04:01 +00:00
|
|
|
ut_ad(index);
|
|
|
|
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
|
2005-10-27 07:29:40 +00:00
|
|
|
|
2006-09-15 11:04:01 +00:00
|
|
|
return(&(index->lock));
|
2005-10-27 07:29:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Returns free space reserved for future updates of records. This is
|
|
|
|
relevant only in the case of many consecutive inserts, as updates
|
|
|
|
which make the records bigger might fragment the index. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
2006-09-15 11:04:01 +00:00
|
|
|
dict_index_get_space_reserve(void)
|
|
|
|
/*==============================*/
|
2005-10-27 07:29:40 +00:00
|
|
|
/* out: number of free bytes on page,
|
|
|
|
reserved for updates */
|
|
|
|
{
|
|
|
|
return(UNIV_PAGE_SIZE / 16);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Checks if a table is in the dictionary cache. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dict_table_t*
|
|
|
|
dict_table_check_if_in_cache_low(
|
2006-02-20 12:12:22 +00:00
|
|
|
/*=============================*/
|
2005-10-27 07:29:40 +00:00
|
|
|
/* out: table, NULL if not found */
|
|
|
|
const char* table_name) /* in: table name */
|
|
|
|
{
|
|
|
|
dict_table_t* table;
|
|
|
|
ulint table_fold;
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
ut_ad(table_name);
|
|
|
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
|
|
|
|
|
|
|
/* Look for the table name in the hash table */
|
|
|
|
table_fold = ut_fold_string(table_name);
|
|
|
|
|
|
|
|
HASH_SEARCH(name_hash, dict_sys->table_hash, table_fold, table,
|
2006-08-28 17:42:45 +00:00
|
|
|
ut_strcmp(table->name, table_name) == 0);
|
2005-10-27 07:29:40 +00:00
|
|
|
return(table);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Gets a table; loads it to the dictionary cache if necessary. A low-level
|
|
|
|
function. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dict_table_t*
|
|
|
|
dict_table_get_low(
|
|
|
|
/*===============*/
|
|
|
|
/* out: table, NULL if not found */
|
|
|
|
const char* table_name) /* in: table name */
|
|
|
|
{
|
|
|
|
dict_table_t* table;
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
ut_ad(table_name);
|
|
|
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
|
|
|
|
|
|
|
table = dict_table_check_if_in_cache_low(table_name);
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
if (table == NULL) {
|
|
|
|
table = dict_load_table(table_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(table);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
2006-04-24 09:39:13 +00:00
|
|
|
Returns a table object based on table id. */
|
2005-10-27 07:29:40 +00:00
|
|
|
UNIV_INLINE
|
|
|
|
dict_table_t*
|
|
|
|
dict_table_get_on_id_low(
|
|
|
|
/*=====================*/
|
|
|
|
/* out: table, NULL if does not exist */
|
2006-04-24 09:39:13 +00:00
|
|
|
dulint table_id) /* in: table id */
|
2005-10-27 07:29:40 +00:00
|
|
|
{
|
|
|
|
dict_table_t* table;
|
|
|
|
ulint fold;
|
|
|
|
|
|
|
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
/* Look for the table name in the hash table */
|
|
|
|
fold = ut_fold_dulint(table_id);
|
|
|
|
|
|
|
|
HASH_SEARCH(id_hash, dict_sys->table_id_hash, fold, table,
|
2006-08-28 17:42:45 +00:00
|
|
|
ut_dulint_cmp(table->id, table_id) == 0);
|
2005-10-27 07:29:40 +00:00
|
|
|
if (table == NULL) {
|
|
|
|
table = dict_load_table_on_id(table_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* TODO: should get the type information from MySQL */
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
return(table);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Returns an index object. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dict_index_t*
|
|
|
|
dict_table_get_index(
|
|
|
|
/*=================*/
|
|
|
|
/* out: index, NULL if does not exist */
|
|
|
|
dict_table_t* table, /* in: table */
|
|
|
|
const char* name) /* in: index name */
|
|
|
|
{
|
|
|
|
dict_index_t* index = NULL;
|
2006-02-21 12:37:54 +00:00
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
index = dict_table_get_first_index(table);
|
|
|
|
|
|
|
|
while (index != NULL) {
|
|
|
|
if (ut_strcmp(name, index->name) == 0) {
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
index = dict_table_get_next_index(index);
|
2006-02-21 12:37:54 +00:00
|
|
|
}
|
|
|
|
|
2005-10-27 07:29:40 +00:00
|
|
|
return(index);
|
|
|
|
}
|