mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 11:27:39 +02:00
Merge remote-tracking branch '5.5' into 10.0
This commit is contained in:
commit
d833bb65d5
153 changed files with 1984 additions and 677 deletions
|
|
@ -1,6 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2018, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -181,18 +182,7 @@ store the charset-collation number; one byte is left unused, though */
|
|||
#define DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE 6
|
||||
|
||||
/* Maximum multi-byte character length in bytes, plus 1 */
|
||||
#define DATA_MBMAX 5
|
||||
|
||||
/* Pack mbminlen, mbmaxlen to mbminmaxlen. */
|
||||
#define DATA_MBMINMAXLEN(mbminlen, mbmaxlen) \
|
||||
((mbmaxlen) * DATA_MBMAX + (mbminlen))
|
||||
/* Get mbminlen from mbminmaxlen. Cast the result of UNIV_EXPECT to ulint
|
||||
because in GCC it returns a long. */
|
||||
#define DATA_MBMINLEN(mbminmaxlen) ((ulint) \
|
||||
UNIV_EXPECT(((mbminmaxlen) % DATA_MBMAX), \
|
||||
1))
|
||||
/* Get mbmaxlen from mbminmaxlen. */
|
||||
#define DATA_MBMAXLEN(mbminmaxlen) ((ulint) ((mbminmaxlen) / DATA_MBMAX))
|
||||
#define DATA_MBMAX 8
|
||||
|
||||
/* We now support 15 bits (up to 32767) collation number */
|
||||
#define MAX_CHAR_COLL_NUM 32767
|
||||
|
|
@ -219,8 +209,10 @@ ulint
|
|||
dtype_get_at_most_n_mbchars(
|
||||
/*========================*/
|
||||
ulint prtype, /*!< in: precise type */
|
||||
ulint mbminmaxlen, /*!< in: minimum and maximum length of
|
||||
a multi-byte character */
|
||||
ulint mbminlen, /*!< in: minimum length of
|
||||
a multi-byte character, in bytes */
|
||||
ulint mbmaxlen, /*!< in: maximum length of
|
||||
a multi-byte character, in bytes */
|
||||
ulint prefix_len, /*!< in: length of the requested
|
||||
prefix, in characters, multiplied by
|
||||
dtype_get_mbmaxlen(dtype) */
|
||||
|
|
@ -365,19 +357,6 @@ dtype_get_mbmaxlen(
|
|||
/*===============*/
|
||||
const dtype_t* type); /*!< in: type */
|
||||
/*********************************************************************//**
|
||||
Sets the minimum and maximum length of a character, in bytes. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dtype_set_mbminmaxlen(
|
||||
/*==================*/
|
||||
dtype_t* type, /*!< in/out: type */
|
||||
ulint mbminlen, /*!< in: minimum length of a char,
|
||||
in bytes, or 0 if this is not
|
||||
a character type */
|
||||
ulint mbmaxlen); /*!< in: maximum length of a char,
|
||||
in bytes, or 0 if this is not
|
||||
a character type */
|
||||
/*********************************************************************//**
|
||||
Gets the padding character code for the type.
|
||||
@return padding character code, or ULINT_UNDEFINED if no padding specified */
|
||||
UNIV_INLINE
|
||||
|
|
@ -397,7 +376,9 @@ dtype_get_fixed_size_low(
|
|||
ulint mtype, /*!< in: main type */
|
||||
ulint prtype, /*!< in: precise type */
|
||||
ulint len, /*!< in: length */
|
||||
ulint mbminmaxlen, /*!< in: minimum and maximum length of a
|
||||
ulint mbminlen, /*!< in: minimum length of a
|
||||
multibyte character, in bytes */
|
||||
ulint mbmaxlen, /*!< in: maximum length of a
|
||||
multibyte character, in bytes */
|
||||
ulint comp); /*!< in: nonzero=ROW_FORMAT=COMPACT */
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
|
|
@ -411,8 +392,8 @@ dtype_get_min_size_low(
|
|||
ulint mtype, /*!< in: main type */
|
||||
ulint prtype, /*!< in: precise type */
|
||||
ulint len, /*!< in: length */
|
||||
ulint mbminmaxlen); /*!< in: minimum and maximum length of a
|
||||
multibyte character */
|
||||
ulint mbminlen, /*!< in: minimum length of a character */
|
||||
ulint mbmaxlen); /*!< in: maximum length of a character */
|
||||
/***********************************************************************//**
|
||||
Returns the maximum size of a data type. Note: types in system tables may be
|
||||
incomplete and return incorrect information.
|
||||
|
|
@ -529,11 +510,10 @@ struct dtype_t{
|
|||
the string, MySQL uses 1 or 2
|
||||
bytes to store the string length) */
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
unsigned mbminmaxlen:5; /*!< minimum and maximum length of a
|
||||
character, in bytes;
|
||||
DATA_MBMINMAXLEN(mbminlen,mbmaxlen);
|
||||
mbminlen=DATA_MBMINLEN(mbminmaxlen);
|
||||
mbmaxlen=DATA_MBMINLEN(mbminmaxlen) */
|
||||
unsigned mbminlen:3; /*!< minimum length of a character,
|
||||
in bytes */
|
||||
unsigned mbmaxlen:3; /*!< maximum length of a character,
|
||||
in bytes */
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2017, MariaDB Corporation.
|
||||
Copyright (c) 2017, 2018, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -103,27 +103,6 @@ dtype_get_mblen(
|
|||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Sets the minimum and maximum length of a character, in bytes. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dtype_set_mbminmaxlen(
|
||||
/*==================*/
|
||||
dtype_t* type, /*!< in/out: type */
|
||||
ulint mbminlen, /*!< in: minimum length of a char,
|
||||
in bytes, or 0 if this is not
|
||||
a character type */
|
||||
ulint mbmaxlen) /*!< in: maximum length of a char,
|
||||
in bytes, or 0 if this is not
|
||||
a character type */
|
||||
{
|
||||
ut_ad(mbminlen < DATA_MBMAX);
|
||||
ut_ad(mbmaxlen < DATA_MBMAX);
|
||||
ut_ad(mbminlen <= mbmaxlen);
|
||||
|
||||
type->mbminmaxlen = DATA_MBMINMAXLEN(mbminlen, mbmaxlen);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Compute the mbminlen and mbmaxlen members of a data type structure. */
|
||||
UNIV_INLINE
|
||||
|
|
@ -136,7 +115,8 @@ dtype_set_mblen(
|
|||
ulint mbmaxlen;
|
||||
|
||||
dtype_get_mblen(type->mtype, type->prtype, &mbminlen, &mbmaxlen);
|
||||
dtype_set_mbminmaxlen(type, mbminlen, mbmaxlen);
|
||||
type->mbminlen = mbminlen;
|
||||
type->mbmaxlen = mbmaxlen;
|
||||
|
||||
ut_ad(dtype_validate(type));
|
||||
}
|
||||
|
|
@ -232,8 +212,7 @@ dtype_get_mbminlen(
|
|||
/*===============*/
|
||||
const dtype_t* type) /*!< in: type */
|
||||
{
|
||||
ut_ad(type);
|
||||
return(DATA_MBMINLEN(type->mbminmaxlen));
|
||||
return type->mbminlen;
|
||||
}
|
||||
/*********************************************************************//**
|
||||
Gets the maximum length of a character, in bytes.
|
||||
|
|
@ -245,8 +224,7 @@ dtype_get_mbmaxlen(
|
|||
/*===============*/
|
||||
const dtype_t* type) /*!< in: type */
|
||||
{
|
||||
ut_ad(type);
|
||||
return(DATA_MBMAXLEN(type->mbminmaxlen));
|
||||
return type->mbmaxlen;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
|
|
@ -522,8 +500,10 @@ dtype_get_fixed_size_low(
|
|||
ulint mtype, /*!< in: main type */
|
||||
ulint prtype, /*!< in: precise type */
|
||||
ulint len, /*!< in: length */
|
||||
ulint mbminmaxlen, /*!< in: minimum and maximum length of
|
||||
a multibyte character, in bytes */
|
||||
ulint mbminlen, /*!< in: minimum length of a
|
||||
multibyte character, in bytes */
|
||||
ulint mbmaxlen, /*!< in: maximum length of a
|
||||
multibyte character, in bytes */
|
||||
ulint comp) /*!< in: nonzero=ROW_FORMAT=COMPACT */
|
||||
{
|
||||
switch (mtype) {
|
||||
|
|
@ -564,11 +544,10 @@ dtype_get_fixed_size_low(
|
|||
dtype_get_charset_coll(prtype),
|
||||
&i_mbminlen, &i_mbmaxlen);
|
||||
|
||||
ut_ad(DATA_MBMINMAXLEN(i_mbminlen, i_mbmaxlen)
|
||||
== mbminmaxlen);
|
||||
ut_ad(i_mbminlen == mbminlen);
|
||||
ut_ad(i_mbmaxlen == mbmaxlen);
|
||||
#endif /* UNIV_DEBUG */
|
||||
if (DATA_MBMINLEN(mbminmaxlen)
|
||||
== DATA_MBMAXLEN(mbminmaxlen)) {
|
||||
if (mbminlen == mbmaxlen) {
|
||||
return(len);
|
||||
}
|
||||
}
|
||||
|
|
@ -601,8 +580,8 @@ dtype_get_min_size_low(
|
|||
ulint mtype, /*!< in: main type */
|
||||
ulint prtype, /*!< in: precise type */
|
||||
ulint len, /*!< in: length */
|
||||
ulint mbminmaxlen) /*!< in: minimum and maximum length of a
|
||||
multi-byte character */
|
||||
ulint mbminlen, /*!< in: minimum length of a character */
|
||||
ulint mbmaxlen) /*!< in: maximum length of a character */
|
||||
{
|
||||
switch (mtype) {
|
||||
case DATA_SYS:
|
||||
|
|
@ -632,9 +611,6 @@ dtype_get_min_size_low(
|
|||
if (prtype & DATA_BINARY_TYPE) {
|
||||
return(len);
|
||||
} else {
|
||||
ulint mbminlen = DATA_MBMINLEN(mbminmaxlen);
|
||||
ulint mbmaxlen = DATA_MBMAXLEN(mbminmaxlen);
|
||||
|
||||
if (mbminlen == mbmaxlen) {
|
||||
return(len);
|
||||
}
|
||||
|
|
@ -705,9 +681,9 @@ dtype_get_sql_null_size(
|
|||
{
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
return(dtype_get_fixed_size_low(type->mtype, type->prtype, type->len,
|
||||
type->mbminmaxlen, comp));
|
||||
type->mbminlen, type->mbmaxlen, comp));
|
||||
#else /* !UNIV_HOTBACKUP */
|
||||
return(dtype_get_fixed_size_low(type->mtype, type->prtype, type->len,
|
||||
0, 0));
|
||||
0, 0, 0));
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2012, Facebook Inc.
|
||||
Copyright (c) 2014, 2015, MariaDB Corporation.
|
||||
Copyright (c) 2014, 2018, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -182,18 +182,6 @@ dict_col_get_mbmaxlen(
|
|||
const dict_col_t* col) /*!< in: column */
|
||||
MY_ATTRIBUTE((nonnull, warn_unused_result));
|
||||
/*********************************************************************//**
|
||||
Sets the minimum and maximum number of bytes per character. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dict_col_set_mbminmaxlen(
|
||||
/*=====================*/
|
||||
dict_col_t* col, /*!< in/out: column */
|
||||
ulint mbminlen, /*!< in: minimum multi-byte
|
||||
character size, in bytes */
|
||||
ulint mbmaxlen) /*!< in: minimum multi-byte
|
||||
character size, in bytes */
|
||||
MY_ATTRIBUTE((nonnull));
|
||||
/*********************************************************************//**
|
||||
Gets the column data type. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2018, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -40,7 +41,7 @@ dict_col_get_mbminlen(
|
|||
/*==================*/
|
||||
const dict_col_t* col) /*!< in: column */
|
||||
{
|
||||
return(DATA_MBMINLEN(col->mbminmaxlen));
|
||||
return col->mbminlen;
|
||||
}
|
||||
/*********************************************************************//**
|
||||
Gets the maximum number of bytes per character.
|
||||
|
|
@ -51,25 +52,7 @@ dict_col_get_mbmaxlen(
|
|||
/*==================*/
|
||||
const dict_col_t* col) /*!< in: column */
|
||||
{
|
||||
return(DATA_MBMAXLEN(col->mbminmaxlen));
|
||||
}
|
||||
/*********************************************************************//**
|
||||
Sets the minimum and maximum number of bytes per character. */
|
||||
UNIV_INLINE
|
||||
void
|
||||
dict_col_set_mbminmaxlen(
|
||||
/*=====================*/
|
||||
dict_col_t* col, /*!< in/out: column */
|
||||
ulint mbminlen, /*!< in: minimum multi-byte
|
||||
character size, in bytes */
|
||||
ulint mbmaxlen) /*!< in: minimum multi-byte
|
||||
character size, in bytes */
|
||||
{
|
||||
ut_ad(mbminlen < DATA_MBMAX);
|
||||
ut_ad(mbmaxlen < DATA_MBMAX);
|
||||
ut_ad(mbminlen <= mbmaxlen);
|
||||
|
||||
col->mbminmaxlen = DATA_MBMINMAXLEN(mbminlen, mbmaxlen);
|
||||
return col->mbmaxlen;
|
||||
}
|
||||
/*********************************************************************//**
|
||||
Gets the column data type. */
|
||||
|
|
@ -86,7 +69,8 @@ dict_col_copy_type(
|
|||
type->mtype = col->mtype;
|
||||
type->prtype = col->prtype;
|
||||
type->len = col->len;
|
||||
type->mbminmaxlen = col->mbminmaxlen;
|
||||
type->mbminlen = col->mbminlen;
|
||||
type->mbmaxlen = col->mbmaxlen;
|
||||
}
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
|
||||
|
|
@ -108,7 +92,8 @@ dict_col_type_assert_equal(
|
|||
ut_ad(col->prtype == type->prtype);
|
||||
//ut_ad(col->len == type->len);
|
||||
# ifndef UNIV_HOTBACKUP
|
||||
ut_ad(col->mbminmaxlen == type->mbminmaxlen);
|
||||
ut_ad(col->mbminlen == type->mbminlen);
|
||||
ut_ad(col->mbmaxlen == type->mbmaxlen);
|
||||
# endif /* !UNIV_HOTBACKUP */
|
||||
|
||||
return(TRUE);
|
||||
|
|
@ -126,7 +111,7 @@ dict_col_get_min_size(
|
|||
const dict_col_t* col) /*!< in: column */
|
||||
{
|
||||
return(dtype_get_min_size_low(col->mtype, col->prtype, col->len,
|
||||
col->mbminmaxlen));
|
||||
col->mbminlen, col->mbmaxlen));
|
||||
}
|
||||
/***********************************************************************//**
|
||||
Returns the maximum size of the column.
|
||||
|
|
@ -151,7 +136,7 @@ dict_col_get_fixed_size(
|
|||
ulint comp) /*!< in: nonzero=ROW_FORMAT=COMPACT */
|
||||
{
|
||||
return(dtype_get_fixed_size_low(col->mtype, col->prtype, col->len,
|
||||
col->mbminmaxlen, comp));
|
||||
col->mbminlen, col->mbmaxlen, comp));
|
||||
}
|
||||
/***********************************************************************//**
|
||||
Returns the ROW_FORMAT=REDUNDANT stored SQL NULL size of a column.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2012, Facebook Inc.
|
||||
Copyright (c) 2015, 2016, MariaDB Corporation.
|
||||
Copyright (c) 2015, 2018, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -445,11 +445,10 @@ struct dict_col_t{
|
|||
the string, MySQL uses 1 or 2
|
||||
bytes to store the string length) */
|
||||
|
||||
unsigned mbminmaxlen:5; /*!< minimum and maximum length of a
|
||||
character, in bytes;
|
||||
DATA_MBMINMAXLEN(mbminlen,mbmaxlen);
|
||||
mbminlen=DATA_MBMINLEN(mbminmaxlen);
|
||||
mbmaxlen=DATA_MBMINLEN(mbminmaxlen) */
|
||||
unsigned mbminlen:3; /*!< minimum length of a
|
||||
character, in bytes */
|
||||
unsigned mbmaxlen:3; /*!< maximum length of a
|
||||
character, in bytes */
|
||||
/*----------------------*/
|
||||
/* End of definitions copied from dtype_t */
|
||||
/* @} */
|
||||
|
|
|
|||
|
|
@ -305,8 +305,8 @@ mem_heap_free_heap_top(
|
|||
mem_block_set_free(block, old_top - (byte*) block);
|
||||
|
||||
ut_ad(mem_block_get_start(block) <= mem_block_get_free(block));
|
||||
UNIV_MEM_ASSERT_W(old_top, (byte*) block + block->len - old_top);
|
||||
#if defined UNIV_MEM_DEBUG
|
||||
UNIV_MEM_ALLOC(old_top, (byte*)block + block->len - old_top);
|
||||
/* In the debug version erase block from top up */
|
||||
mem_erase_buf(old_top, (byte*) block + block->len - old_top);
|
||||
|
||||
|
|
@ -315,7 +315,7 @@ mem_heap_free_heap_top(
|
|||
mem_current_allocated_memory -= (total_size - size);
|
||||
mutex_exit(&mem_hash_mutex);
|
||||
#endif /* UNIV_MEM_DEBUG */
|
||||
UNIV_MEM_ALLOC(old_top, (byte*) block + block->len - old_top);
|
||||
UNIV_MEM_FREE(old_top, (byte*)block + block->len - old_top);
|
||||
|
||||
/* If free == start, we may free the block if it is not the first
|
||||
one */
|
||||
|
|
@ -396,11 +396,11 @@ mem_heap_free_top(
|
|||
/* Subtract the free field of block */
|
||||
mem_block_set_free(block, mem_block_get_free(block)
|
||||
- MEM_SPACE_NEEDED(n));
|
||||
UNIV_MEM_ASSERT_W((byte*) block + mem_block_get_free(block), n);
|
||||
#ifdef UNIV_MEM_DEBUG
|
||||
|
||||
ut_ad(mem_block_get_start(block) <= mem_block_get_free(block));
|
||||
|
||||
UNIV_MEM_ALLOC((byte*) block + mem_block_get_free(block), n);
|
||||
/* In the debug version check the consistency, and erase field */
|
||||
mem_field_erase((byte*) block + mem_block_get_free(block), n);
|
||||
#endif
|
||||
|
|
@ -412,11 +412,7 @@ mem_heap_free_top(
|
|||
== mem_block_get_start(block))) {
|
||||
mem_heap_block_free(heap, block);
|
||||
} else {
|
||||
/* Avoid a bogus UNIV_MEM_ASSERT_W() warning in a
|
||||
subsequent invocation of mem_heap_free_top().
|
||||
Originally, this was UNIV_MEM_FREE(), to catch writes
|
||||
to freed memory. */
|
||||
UNIV_MEM_ALLOC((byte*) block + mem_block_get_free(block), n);
|
||||
UNIV_MEM_FREE((byte*) block + mem_block_get_free(block), n);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2018, MariaDB Corporation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
|
|
@ -922,7 +923,7 @@ rec_offs_set_n_alloc(
|
|||
{
|
||||
ut_ad(offsets);
|
||||
ut_ad(n_alloc > REC_OFFS_HEADER_SIZE);
|
||||
UNIV_MEM_ASSERT_AND_ALLOC(offsets, n_alloc * sizeof *offsets);
|
||||
UNIV_MEM_ALLOC(offsets, n_alloc * sizeof *offsets);
|
||||
offsets[0] = n_alloc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -636,14 +636,6 @@ typedef void* os_thread_ret_t;
|
|||
# define UNIV_MEM_ASSERT_W(addr, size) do {} while(0)
|
||||
# define UNIV_MEM_TRASH(addr, c, size) do {} while(0)
|
||||
#endif
|
||||
#define UNIV_MEM_ASSERT_AND_FREE(addr, size) do { \
|
||||
UNIV_MEM_ASSERT_W(addr, size); \
|
||||
UNIV_MEM_FREE(addr, size); \
|
||||
} while (0)
|
||||
#define UNIV_MEM_ASSERT_AND_ALLOC(addr, size) do { \
|
||||
UNIV_MEM_ASSERT_W(addr, size); \
|
||||
UNIV_MEM_ALLOC(addr, size); \
|
||||
} while (0)
|
||||
|
||||
extern ulong srv_page_size_shift;
|
||||
extern ulong srv_page_size;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue