mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
Merge mysql-5.1-innodb from bk-internal locally
This commit is contained in:
commit
f4e5069f60
9 changed files with 74 additions and 7 deletions
|
|
@ -2000,6 +2000,7 @@ func_start:
|
|||
goto insert_empty;
|
||||
}
|
||||
} else if (UNIV_UNLIKELY(insert_left)) {
|
||||
ut_a(n_iterations > 0);
|
||||
first_rec = page_rec_get_next(page_get_infimum_rec(page));
|
||||
move_limit = page_rec_get_next(btr_cur_get_rec(cursor));
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1393,7 +1393,12 @@ buf_LRU_free_block(
|
|||
ut_ad(buf_page_in_file(bpage));
|
||||
ut_ad(bpage->in_LRU_list);
|
||||
ut_ad(!bpage->in_flush_list == !bpage->oldest_modification);
|
||||
#if UNIV_WORD_SIZE == 4
|
||||
/* On 32-bit systems, there is no padding in buf_page_t. On
|
||||
other systems, Valgrind could complain about uninitialized pad
|
||||
bytes. */
|
||||
UNIV_MEM_ASSERT_RW(bpage, sizeof *bpage);
|
||||
#endif
|
||||
|
||||
if (!buf_page_can_relocate(bpage)) {
|
||||
|
||||
|
|
@ -1688,7 +1693,12 @@ buf_LRU_block_remove_hashed_page(
|
|||
ut_a(buf_page_get_io_fix(bpage) == BUF_IO_NONE);
|
||||
ut_a(bpage->buf_fix_count == 0);
|
||||
|
||||
#if UNIV_WORD_SIZE == 4
|
||||
/* On 32-bit systems, there is no padding in
|
||||
buf_page_t. On other systems, Valgrind could complain
|
||||
about uninitialized pad bytes. */
|
||||
UNIV_MEM_ASSERT_RW(bpage, sizeof *bpage);
|
||||
#endif
|
||||
|
||||
buf_LRU_remove_block(bpage);
|
||||
|
||||
|
|
|
|||
|
|
@ -931,7 +931,12 @@ buf_page_hash_get(
|
|||
ut_a(buf_page_in_file(bpage));
|
||||
ut_ad(bpage->in_page_hash);
|
||||
ut_ad(!bpage->in_zip_hash);
|
||||
#if UNIV_WORD_SIZE == 4
|
||||
/* On 32-bit systems, there is no padding in
|
||||
buf_page_t. On other systems, Valgrind could complain
|
||||
about uninitialized pad bytes. */
|
||||
UNIV_MEM_ASSERT_RW(bpage, sizeof *bpage);
|
||||
#endif
|
||||
}
|
||||
|
||||
return(bpage);
|
||||
|
|
|
|||
|
|
@ -148,7 +148,9 @@ cmp_rec_rec_simple(
|
|||
const rec_t* rec2, /*!< in: physical record */
|
||||
const ulint* offsets1,/*!< in: rec_get_offsets(rec1, ...) */
|
||||
const ulint* offsets2,/*!< in: rec_get_offsets(rec2, ...) */
|
||||
const dict_index_t* index); /*!< in: data dictionary index */
|
||||
const dict_index_t* index, /*!< in: data dictionary index */
|
||||
ibool* null_eq);/*!< out: set to TRUE if
|
||||
found matching null values */
|
||||
/*************************************************************//**
|
||||
This function is used to compare two physical records. Only the common
|
||||
first fields are compared, and if an externally stored field is
|
||||
|
|
|
|||
|
|
@ -571,7 +571,7 @@ page_zip_dir_encode(
|
|||
/* Traverse the list of stored records in the collation order,
|
||||
starting from the first user record. */
|
||||
|
||||
rec = page + PAGE_NEW_INFIMUM, TRUE;
|
||||
rec = page + PAGE_NEW_INFIMUM;
|
||||
|
||||
i = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -706,7 +706,9 @@ cmp_rec_rec_simple(
|
|||
const rec_t* rec2, /*!< in: physical record */
|
||||
const ulint* offsets1,/*!< in: rec_get_offsets(rec1, ...) */
|
||||
const ulint* offsets2,/*!< in: rec_get_offsets(rec2, ...) */
|
||||
const dict_index_t* index) /*!< in: data dictionary index */
|
||||
const dict_index_t* index, /*!< in: data dictionary index */
|
||||
ibool* null_eq)/*!< out: set to TRUE if
|
||||
found matching null values */
|
||||
{
|
||||
ulint rec1_f_len; /*!< length of current field in rec1 */
|
||||
const byte* rec1_b_ptr; /*!< pointer to the current byte
|
||||
|
|
@ -753,6 +755,9 @@ cmp_rec_rec_simple(
|
|||
|| rec2_f_len == UNIV_SQL_NULL) {
|
||||
|
||||
if (rec1_f_len == rec2_f_len) {
|
||||
if (null_eq) {
|
||||
*null_eq = TRUE;
|
||||
}
|
||||
|
||||
goto next_field;
|
||||
|
||||
|
|
|
|||
|
|
@ -1075,11 +1075,14 @@ row_merge_cmp(
|
|||
record to be compared */
|
||||
const ulint* offsets1, /*!< in: first record offsets */
|
||||
const ulint* offsets2, /*!< in: second record offsets */
|
||||
const dict_index_t* index) /*!< in: index */
|
||||
const dict_index_t* index, /*!< in: index */
|
||||
ibool* null_eq) /*!< out: set to TRUE if
|
||||
found matching null values */
|
||||
{
|
||||
int cmp;
|
||||
|
||||
cmp = cmp_rec_rec_simple(mrec1, mrec2, offsets1, offsets2, index);
|
||||
cmp = cmp_rec_rec_simple(mrec1, mrec2, offsets1, offsets2, index,
|
||||
null_eq);
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
if (row_merge_print_cmp) {
|
||||
|
|
@ -1445,11 +1448,13 @@ corrupt:
|
|||
}
|
||||
|
||||
while (mrec0 && mrec1) {
|
||||
ibool null_eq = FALSE;
|
||||
switch (row_merge_cmp(mrec0, mrec1,
|
||||
offsets0, offsets1, index)) {
|
||||
offsets0, offsets1, index,
|
||||
&null_eq)) {
|
||||
case 0:
|
||||
if (UNIV_UNLIKELY
|
||||
(dict_index_is_unique(index))) {
|
||||
(dict_index_is_unique(index) && !null_eq)) {
|
||||
innobase_rec_to_mysql(table, mrec0,
|
||||
index, offsets0);
|
||||
mem_heap_free(heap);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue