Merge mysql-5.1 to mysql-5.5.
This commit is contained in:
commit
b1fc801ad1
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2010, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2008, Google Inc.
|
Copyright (c) 2008, Google Inc.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
@ -1989,6 +1989,9 @@ btr_cur_optimistic_update(
|
|||||||
|
|
||||||
heap = mem_heap_create(1024);
|
heap = mem_heap_create(1024);
|
||||||
offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap);
|
offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap);
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
if (btr_cur_print_record_ops && thr) {
|
if (btr_cur_print_record_ops && thr) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -480,6 +480,18 @@ ulint
|
|||||||
rec_offs_any_extern(
|
rec_offs_any_extern(
|
||||||
/*================*/
|
/*================*/
|
||||||
const ulint* offsets);/*!< in: array returned by rec_get_offsets() */
|
const ulint* offsets);/*!< in: array returned by rec_get_offsets() */
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
/******************************************************//**
|
||||||
|
Determine if the offsets are for a record containing null BLOB pointers.
|
||||||
|
@return first field containing a null BLOB pointer, or NULL if none found */
|
||||||
|
UNIV_INLINE
|
||||||
|
const byte*
|
||||||
|
rec_offs_any_null_extern(
|
||||||
|
/*=====================*/
|
||||||
|
const rec_t* rec, /*!< in: record */
|
||||||
|
const ulint* offsets) /*!< in: rec_get_offsets(rec) */
|
||||||
|
__attribute__((nonnull, warn_unused_result));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
/******************************************************//**
|
/******************************************************//**
|
||||||
Returns nonzero if the extern bit is set in nth field of rec.
|
Returns nonzero if the extern bit is set in nth field of rec.
|
||||||
@return nonzero if externally stored */
|
@return nonzero if externally stored */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -26,6 +26,7 @@ Created 5/30/1994 Heikki Tuuri
|
|||||||
#include "mach0data.h"
|
#include "mach0data.h"
|
||||||
#include "ut0byte.h"
|
#include "ut0byte.h"
|
||||||
#include "dict0dict.h"
|
#include "dict0dict.h"
|
||||||
|
#include "btr0types.h"
|
||||||
|
|
||||||
/* Compact flag ORed to the extra size returned by rec_get_offsets() */
|
/* Compact flag ORed to the extra size returned by rec_get_offsets() */
|
||||||
#define REC_OFFS_COMPACT ((ulint) 1 << 31)
|
#define REC_OFFS_COMPACT ((ulint) 1 << 31)
|
||||||
@ -1087,6 +1088,44 @@ rec_offs_any_extern(
|
|||||||
return(UNIV_UNLIKELY(*rec_offs_base(offsets) & REC_OFFS_EXTERNAL));
|
return(UNIV_UNLIKELY(*rec_offs_base(offsets) & REC_OFFS_EXTERNAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
/******************************************************//**
|
||||||
|
Determine if the offsets are for a record containing null BLOB pointers.
|
||||||
|
@return first field containing a null BLOB pointer, or NULL if none found */
|
||||||
|
UNIV_INLINE
|
||||||
|
const byte*
|
||||||
|
rec_offs_any_null_extern(
|
||||||
|
/*=====================*/
|
||||||
|
const rec_t* rec, /*!< in: record */
|
||||||
|
const ulint* offsets) /*!< in: rec_get_offsets(rec) */
|
||||||
|
{
|
||||||
|
ulint i;
|
||||||
|
ut_ad(rec_offs_validate(rec, NULL, offsets));
|
||||||
|
|
||||||
|
if (!rec_offs_any_extern(offsets)) {
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < rec_offs_n_fields(offsets); i++) {
|
||||||
|
if (rec_offs_nth_extern(offsets, i)) {
|
||||||
|
ulint len;
|
||||||
|
const byte* field
|
||||||
|
= rec_get_nth_field(rec, offsets, i, &len);
|
||||||
|
|
||||||
|
ut_a(len >= BTR_EXTERN_FIELD_REF_SIZE);
|
||||||
|
if (!memcmp(field + len
|
||||||
|
- BTR_EXTERN_FIELD_REF_SIZE,
|
||||||
|
field_ref_zero,
|
||||||
|
BTR_EXTERN_FIELD_REF_SIZE)) {
|
||||||
|
return(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
/******************************************************//**
|
/******************************************************//**
|
||||||
Returns nonzero if the extern bit is set in nth field of rec.
|
Returns nonzero if the extern bit is set in nth field of rec.
|
||||||
@return nonzero if externally stored */
|
@return nonzero if externally stored */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -200,6 +200,10 @@ row_build(
|
|||||||
ut_ad(rec_offs_validate(rec, index, offsets));
|
ut_ad(rec_offs_validate(rec, index, offsets));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
if (type != ROW_COPY_POINTERS) {
|
if (type != ROW_COPY_POINTERS) {
|
||||||
/* Take a copy of rec to heap */
|
/* Take a copy of rec to heap */
|
||||||
buf = mem_heap_alloc(heap, rec_offs_size(offsets));
|
buf = mem_heap_alloc(heap, rec_offs_size(offsets));
|
||||||
@ -383,6 +387,10 @@ row_rec_to_index_entry(
|
|||||||
rec = rec_copy(buf, rec, offsets);
|
rec = rec_copy(buf, rec, offsets);
|
||||||
/* Avoid a debug assertion in rec_offs_validate(). */
|
/* Avoid a debug assertion in rec_offs_validate(). */
|
||||||
rec_offs_make_valid(rec, index, offsets);
|
rec_offs_make_valid(rec, index, offsets);
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
} else {
|
||||||
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = row_rec_to_index_entry_low(rec, index, offsets, n_ext, heap);
|
entry = row_rec_to_index_entry_low(rec, index, offsets, n_ext, heap);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2009, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1997, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -550,6 +550,11 @@ row_vers_build_for_consistent_read(
|
|||||||
/* The view already sees this version: we can
|
/* The view already sees this version: we can
|
||||||
copy it to in_heap and return */
|
copy it to in_heap and return */
|
||||||
|
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(
|
||||||
|
version, *offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
buf = mem_heap_alloc(in_heap,
|
buf = mem_heap_alloc(in_heap,
|
||||||
rec_offs_size(*offsets));
|
rec_offs_size(*offsets));
|
||||||
*old_vers = rec_copy(buf, version, *offsets);
|
*old_vers = rec_copy(buf, version, *offsets);
|
||||||
@ -583,6 +588,10 @@ row_vers_build_for_consistent_read(
|
|||||||
*offsets = rec_get_offsets(prev_version, index, *offsets,
|
*offsets = rec_get_offsets(prev_version, index, *offsets,
|
||||||
ULINT_UNDEFINED, offset_heap);
|
ULINT_UNDEFINED, offset_heap);
|
||||||
|
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(prev_version, *offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
trx_id = row_get_rec_trx_id(prev_version, index, *offsets);
|
trx_id = row_get_rec_trx_id(prev_version, index, *offsets);
|
||||||
|
|
||||||
if (read_view_sees_trx_id(view, trx_id)) {
|
if (read_view_sees_trx_id(view, trx_id)) {
|
||||||
@ -682,6 +691,10 @@ row_vers_build_for_semi_consistent_read(
|
|||||||
/* We found a version that belongs to a
|
/* We found a version that belongs to a
|
||||||
committed transaction: return it. */
|
committed transaction: return it. */
|
||||||
|
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
if (rec == version) {
|
if (rec == version) {
|
||||||
*old_vers = rec;
|
*old_vers = rec;
|
||||||
err = DB_SUCCESS;
|
err = DB_SUCCESS;
|
||||||
@ -739,6 +752,9 @@ row_vers_build_for_semi_consistent_read(
|
|||||||
version = prev_version;
|
version = prev_version;
|
||||||
*offsets = rec_get_offsets(version, index, *offsets,
|
*offsets = rec_get_offsets(version, index, *offsets,
|
||||||
ULINT_UNDEFINED, offset_heap);
|
ULINT_UNDEFINED, offset_heap);
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
}/* for (;;) */
|
}/* for (;;) */
|
||||||
|
|
||||||
if (heap) {
|
if (heap) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -1593,6 +1593,10 @@ trx_undo_prev_version_build(
|
|||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
|
# endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
if (row_upd_changes_field_size_or_external(index, offsets, update)) {
|
if (row_upd_changes_field_size_or_external(index, offsets, update)) {
|
||||||
ulint n_ext;
|
ulint n_ext;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user