Introduce UNIV_BLOB_NULL_DEBUG for temporarily hiding Bug#12650861.
Some ut_a(!rec_offs_any_null_extern()) assertion failures are indicating genuine BLOB bugs, others are bogus failures when rolling back incomplete transactions at crash recovery. This needs more work, and until I get a chance to work on it, other testing must not be disrupted by this.
This commit is contained in:
parent
c0fcd9e0b6
commit
2a48b14270
@ -1592,9 +1592,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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
if (btr_cur_print_record_ops && thr) {
|
if (btr_cur_print_record_ops && thr) {
|
||||||
|
@ -339,7 +339,7 @@ rec_offs_any_extern(
|
|||||||
/*================*/
|
/*================*/
|
||||||
/* out: TRUE if a field is stored externally */
|
/* out: TRUE if a field is stored externally */
|
||||||
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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
/********************************************************
|
/********************************************************
|
||||||
Determine if the offsets are for a record containing null BLOB pointers. */
|
Determine if the offsets are for a record containing null BLOB pointers. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
@ -351,7 +351,7 @@ rec_offs_any_null_extern(
|
|||||||
or NULL if none found */
|
or NULL if none found */
|
||||||
rec_t* rec, /*!< in: record */
|
rec_t* rec, /*!< in: record */
|
||||||
const ulint* offsets); /*!< in: rec_get_offsets(rec) */
|
const ulint* offsets); /*!< in: rec_get_offsets(rec) */
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
Sets the value of the ith field extern storage bit. */
|
Sets the value of the ith field extern storage bit. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
|
@ -1021,7 +1021,7 @@ rec_offs_any_extern(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
/********************************************************
|
/********************************************************
|
||||||
Determine if the offsets are for a record containing null BLOB pointers. */
|
Determine if the offsets are for a record containing null BLOB pointers. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
@ -1055,7 +1055,7 @@ rec_offs_any_null_extern(
|
|||||||
|
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
Sets the value of the ith field extern storage bit. */
|
Sets the value of the ith field extern storage bit. */
|
||||||
|
@ -88,8 +88,8 @@ memory is read outside the allocated blocks. */
|
|||||||
#if 0
|
#if 0
|
||||||
#define UNIV_DEBUG_VALGRIND /* Enable extra
|
#define UNIV_DEBUG_VALGRIND /* Enable extra
|
||||||
Valgrind instrumentation */
|
Valgrind instrumentation */
|
||||||
#define UNIV_BLOB_LIGHT_DEBUG /* Enable off-page column
|
#define UNIV_BLOB_NULL_DEBUG /* Enable deep off-page
|
||||||
debugging without UNIV_DEBUG */
|
column debugging */
|
||||||
#define UNIV_DEBUG /* Enable ut_ad() assertions */
|
#define UNIV_DEBUG /* Enable ut_ad() assertions */
|
||||||
#define UNIV_LIST_DEBUG /* debug UT_LIST_ macros */
|
#define UNIV_LIST_DEBUG /* debug UT_LIST_ macros */
|
||||||
#define UNIV_MEM_DEBUG /* detect memory leaks etc */
|
#define UNIV_MEM_DEBUG /* detect memory leaks etc */
|
||||||
|
@ -210,13 +210,13 @@ row_build(
|
|||||||
ut_ad(rec_offs_validate(rec, index, offsets));
|
ut_ad(rec_offs_validate(rec, index, offsets));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0/* defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG*/
|
#if 0 && defined UNIV_BLOB_NULL_DEBUG
|
||||||
/* This one can fail in trx_rollback_or_clean_all_without_sess()
|
/* This one can fail in trx_rollback_or_clean_all_without_sess()
|
||||||
if the server crashed during an insert before the
|
if the server crashed during an insert before the
|
||||||
btr_store_big_rec_extern_fields() did mtr_commit()
|
btr_store_big_rec_extern_fields() did mtr_commit()
|
||||||
all BLOB pointers to the clustered index record. */
|
all BLOB pointers to the clustered index record. */
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* 0 && UNIV_BLOB_NULL_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 */
|
||||||
@ -310,10 +310,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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
} else {
|
} else {
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
}
|
}
|
||||||
|
|
||||||
rec_len = rec_offs_n_fields(offsets);
|
rec_len = rec_offs_n_fields(offsets);
|
||||||
|
@ -473,10 +473,10 @@ 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
|
#if defined UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(
|
ut_a(!rec_offs_any_null_extern(
|
||||||
version, *offsets));
|
version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
buf = mem_heap_alloc(in_heap,
|
buf = mem_heap_alloc(in_heap,
|
||||||
rec_offs_size(*offsets));
|
rec_offs_size(*offsets));
|
||||||
@ -511,9 +511,9 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(prev_version, *offsets));
|
ut_a(!rec_offs_any_null_extern(prev_version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
trx_id = row_get_rec_trx_id(prev_version, index, *offsets);
|
trx_id = row_get_rec_trx_id(prev_version, index, *offsets);
|
||||||
|
|
||||||
@ -615,9 +615,9 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
if (rec == version) {
|
if (rec == version) {
|
||||||
*old_vers = rec;
|
*old_vers = rec;
|
||||||
@ -676,9 +676,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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
}/* for (;;) */
|
}/* for (;;) */
|
||||||
|
|
||||||
if (heap) {
|
if (heap) {
|
||||||
|
@ -1397,9 +1397,9 @@ trx_undo_prev_version_build(
|
|||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
# if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
# ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
# endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
# endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
if (row_upd_changes_field_size_or_external(index, offsets, update)) {
|
if (row_upd_changes_field_size_or_external(index, offsets, update)) {
|
||||||
ulint* ext_vect;
|
ulint* ext_vect;
|
||||||
|
@ -1871,9 +1871,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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
if (btr_cur_print_record_ops && thr) {
|
if (btr_cur_print_record_ops && thr) {
|
||||||
|
@ -480,7 +480,7 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
/******************************************************//**
|
/******************************************************//**
|
||||||
Determine if the offsets are for a record containing null BLOB pointers.
|
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 */
|
@return first field containing a null BLOB pointer, or NULL if none found */
|
||||||
@ -491,7 +491,7 @@ rec_offs_any_null_extern(
|
|||||||
const rec_t* rec, /*!< in: record */
|
const rec_t* rec, /*!< in: record */
|
||||||
const ulint* offsets) /*!< in: rec_get_offsets(rec) */
|
const ulint* offsets) /*!< in: rec_get_offsets(rec) */
|
||||||
__attribute__((nonnull, warn_unused_result));
|
__attribute__((nonnull, warn_unused_result));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_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 */
|
||||||
|
@ -1088,7 +1088,7 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
/******************************************************//**
|
/******************************************************//**
|
||||||
Determine if the offsets are for a record containing null BLOB pointers.
|
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 */
|
@return first field containing a null BLOB pointer, or NULL if none found */
|
||||||
@ -1124,7 +1124,7 @@ rec_offs_any_null_extern(
|
|||||||
|
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_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.
|
||||||
|
@ -179,6 +179,8 @@ command. Not tested on Windows. */
|
|||||||
debugging without UNIV_DEBUG */
|
debugging without UNIV_DEBUG */
|
||||||
#define UNIV_BLOB_LIGHT_DEBUG /* Enable off-page column
|
#define UNIV_BLOB_LIGHT_DEBUG /* Enable off-page column
|
||||||
debugging without UNIV_DEBUG */
|
debugging without UNIV_DEBUG */
|
||||||
|
#define UNIV_BLOB_NULL_DEBUG /* Enable deep off-page
|
||||||
|
column debugging */
|
||||||
#define UNIV_DEBUG /* Enable ut_ad() assertions
|
#define UNIV_DEBUG /* Enable ut_ad() assertions
|
||||||
and disable UNIV_INLINE */
|
and disable UNIV_INLINE */
|
||||||
#define UNIV_DEBUG_LOCK_VALIDATE /* Enable
|
#define UNIV_DEBUG_LOCK_VALIDATE /* Enable
|
||||||
|
@ -231,13 +231,13 @@ row_build(
|
|||||||
ut_ad(rec_offs_validate(rec, index, offsets));
|
ut_ad(rec_offs_validate(rec, index, offsets));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /* defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG */
|
#if 0 && defined UNIV_BLOB_NULL_DEBUG
|
||||||
/* This one can fail in trx_rollback_active() if
|
/* This one can fail in trx_rollback_active() if
|
||||||
the server crashed during an insert before the
|
the server crashed during an insert before the
|
||||||
btr_store_big_rec_extern_fields() did mtr_commit()
|
btr_store_big_rec_extern_fields() did mtr_commit()
|
||||||
all BLOB pointers to the clustered index record. */
|
all BLOB pointers to the clustered index record. */
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* 0 && UNIV_BLOB_NULL_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 */
|
||||||
@ -423,10 +423,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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
} else {
|
} else {
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_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);
|
||||||
|
@ -550,10 +550,10 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(
|
ut_a(!rec_offs_any_null_extern(
|
||||||
version, *offsets));
|
version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
buf = mem_heap_alloc(in_heap,
|
buf = mem_heap_alloc(in_heap,
|
||||||
rec_offs_size(*offsets));
|
rec_offs_size(*offsets));
|
||||||
@ -588,9 +588,9 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(prev_version, *offsets));
|
ut_a(!rec_offs_any_null_extern(prev_version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
trx_id = row_get_rec_trx_id(prev_version, index, *offsets);
|
trx_id = row_get_rec_trx_id(prev_version, index, *offsets);
|
||||||
|
|
||||||
@ -691,9 +691,9 @@ 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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
|
|
||||||
if (rec == version) {
|
if (rec == version) {
|
||||||
*old_vers = rec;
|
*old_vers = rec;
|
||||||
@ -752,9 +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
|
#ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
ut_a(!rec_offs_any_null_extern(version, *offsets));
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_BLOB_NULL_DEBUG */
|
||||||
}/* for (;;) */
|
}/* for (;;) */
|
||||||
|
|
||||||
if (heap) {
|
if (heap) {
|
||||||
|
@ -1577,9 +1577,9 @@ trx_undo_prev_version_build(
|
|||||||
return(DB_ERROR);
|
return(DB_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
# if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
# ifdef UNIV_BLOB_NULL_DEBUG
|
||||||
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
ut_a(!rec_offs_any_null_extern(rec, offsets));
|
||||||
# endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
# endif /* UNIV_BLOB_NULL_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