mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Added Innobase to source distribution
Docs/manual.texi: Added Innobase documentation configure.in: Incremented version include/my_base.h: Added option for Innobase myisam/mi_check.c: cleanup mysql-test/t/bdb.test: cleanup mysql-test/t/innobase.test: Extended with new tests from bdb.test mysql-test/t/merge.test: Added test of SHOW create mysys/my_init.c: Fix for UNIXWARE 7 scripts/mysql_install_db.sh: Always write how to start mysqld scripts/safe_mysqld.sh: Fixed type sql/ha_innobase.cc: Update to new version sql/ha_innobase.h: Update to new version sql/handler.h: Added 'update_table_comment()' and 'append_create_info()' sql/sql_delete.cc: Fixes for Innobase sql/sql_select.cc: Fixes for Innobase sql/sql_show.cc: Append create information (for MERGE tables) sql/sql_update.cc: Fixes for Innobase
This commit is contained in:
248
innobase/include/data0type.ic
Normal file
248
innobase/include/data0type.ic
Normal file
@ -0,0 +1,248 @@
|
||||
/******************************************************
|
||||
Data types
|
||||
|
||||
(c) 1996 Innobase Oy
|
||||
|
||||
Created 1/16/1996 Heikki Tuuri
|
||||
*******************************************************/
|
||||
|
||||
#include "mach0data.h"
|
||||
|
||||
/*************************************************************************
|
||||
Sets a data type structure. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dtype_set(
|
||||
/*======*/
|
||||
dtype_t* type, /* in: type struct to init */
|
||||
ulint mtype, /* in: main data type */
|
||||
ulint prtype, /* in: precise type */
|
||||
ulint len, /* in: length of type */
|
||||
ulint prec) /* in: precision of type */
|
||||
{
|
||||
ut_ad(type);
|
||||
ut_ad(mtype <= DATA_MTYPE_MAX);
|
||||
|
||||
type->mtype = mtype;
|
||||
type->prtype = prtype;
|
||||
type->len = len;
|
||||
type->prec = prec;
|
||||
|
||||
ut_ad(dtype_validate(type));
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Copies a data type structure. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dtype_copy(
|
||||
/*=======*/
|
||||
dtype_t* type1, /* in: type struct to copy to */
|
||||
dtype_t* type2) /* in: type struct to copy from */
|
||||
{
|
||||
*type1 = *type2;
|
||||
|
||||
ut_ad(dtype_validate(type1));
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Gets the SQL main data type. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_mtype(
|
||||
/*============*/
|
||||
dtype_t* type)
|
||||
{
|
||||
ut_ad(type);
|
||||
|
||||
return(type->mtype);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Gets the precise data type. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_prtype(
|
||||
/*=============*/
|
||||
dtype_t* type)
|
||||
{
|
||||
ut_ad(type);
|
||||
|
||||
return(type->prtype);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Gets the type length. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_len(
|
||||
/*==========*/
|
||||
dtype_t* type)
|
||||
{
|
||||
ut_ad(type);
|
||||
|
||||
return(type->len);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Gets the type precision. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_prec(
|
||||
/*===========*/
|
||||
dtype_t* type)
|
||||
{
|
||||
ut_ad(type);
|
||||
|
||||
return(type->prec);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Gets the padding character code for the type. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_pad_char(
|
||||
/*===============*/
|
||||
/* out: padding character code, or
|
||||
ULINT_UNDEFINED if no padding specified */
|
||||
dtype_t* type) /* in: type */
|
||||
{
|
||||
if (type->mtype == DATA_CHAR) {
|
||||
/* space is the padding character for all char strings */
|
||||
|
||||
return((ulint)' ');
|
||||
}
|
||||
|
||||
ut_ad((type->mtype == DATA_BINARY) || (type->mtype == DATA_VARCHAR));
|
||||
|
||||
/* No padding specified */
|
||||
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Transforms the character code so that it is ordered appropriately for the
|
||||
language. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_collate(
|
||||
/*==========*/
|
||||
/* out: collation order position */
|
||||
dtype_t* type, /* in: type */
|
||||
ulint code) /* in: character code stored in database
|
||||
record */
|
||||
{
|
||||
ut_ad((type->mtype == DATA_CHAR) || (type->mtype == DATA_VARCHAR));
|
||||
|
||||
return(toupper(code));
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
Stores to a type the information which determines its alphabetical
|
||||
ordering. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dtype_store_for_order_and_null_size(
|
||||
/*================================*/
|
||||
byte* buf, /* in: buffer for DATA_ORDER_NULL_TYPE_BUF_SIZE
|
||||
bytes */
|
||||
dtype_t* type) /* in: type struct */
|
||||
{
|
||||
ut_ad(4 == DATA_ORDER_NULL_TYPE_BUF_SIZE);
|
||||
ut_ad(type->prtype < 256);
|
||||
|
||||
buf[0] = (byte)(type->mtype & 0xFF);
|
||||
buf[1] = (byte)(type->prtype & 0xFF);
|
||||
|
||||
mach_write_to_2(buf + 2, type->len & 0xFFFF);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
Reads of a type the stored information which determines its alphabetical
|
||||
ordering. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dtype_read_for_order_and_null_size(
|
||||
/*===============================*/
|
||||
dtype_t* type, /* in: type struct */
|
||||
byte* buf) /* in: buffer for type order info */
|
||||
{
|
||||
ut_ad(4 == DATA_ORDER_NULL_TYPE_BUF_SIZE);
|
||||
|
||||
type->mtype = buf[0];
|
||||
type->prtype = buf[1];
|
||||
|
||||
type->len = mach_read_from_2(buf + 2);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Returns the size of a fixed size data type, 0 if not a fixed size type. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_fixed_size(
|
||||
/*=================*/
|
||||
/* out: fixed size, or 0 */
|
||||
dtype_t* type) /* in: type */
|
||||
{
|
||||
ulint mtype;
|
||||
|
||||
mtype = dtype_get_mtype(type);
|
||||
|
||||
switch (mtype) {
|
||||
case DATA_CHAR:
|
||||
case DATA_FIXBINARY:
|
||||
case DATA_INT:
|
||||
case DATA_FLOAT:
|
||||
case DATA_DOUBLE:
|
||||
case DATA_MYSQL:
|
||||
return(dtype_get_len(type));
|
||||
|
||||
case DATA_SYS: if (type->prtype == DATA_ROW_ID) {
|
||||
return(DATA_ROW_ID_LEN);
|
||||
} else {
|
||||
return(0);
|
||||
}
|
||||
case DATA_VARCHAR:
|
||||
case DATA_BINARY:
|
||||
case DATA_DECIMAL:
|
||||
case DATA_VARMYSQL:
|
||||
case DATA_BLOB:
|
||||
return(0);
|
||||
default: ut_a(0);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Returns a stored SQL NULL size for a type. For fixed length types it is
|
||||
the fixed length of the type, otherwise 0. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_sql_null_size(
|
||||
/*====================*/
|
||||
/* out: SQL null storage size */
|
||||
dtype_t* type) /* in: type */
|
||||
{
|
||||
return(dtype_get_fixed_size(type));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Returns TRUE if a type is of a fixed size. */
|
||||
UNIV_INLINE
|
||||
ibool
|
||||
dtype_is_fixed_size(
|
||||
/*================*/
|
||||
/* out: TRUE if fixed size */
|
||||
dtype_t* type) /* in: type */
|
||||
{
|
||||
ulint size;
|
||||
|
||||
size = dtype_get_fixed_size(type);
|
||||
|
||||
if (size) {
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
return(FALSE);
|
||||
}
|
Reference in New Issue
Block a user