Merge mysql-5.1 to mysql-5.5.
This commit is contained in:
commit
dfed175c40
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1997, 2013, 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
|
||||||
@ -128,11 +128,10 @@ row_undo_mod_clust_low(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************//**
|
/***********************************************************//**
|
||||||
Removes a clustered index record after undo if possible.
|
Purges a clustered index record after undo if possible.
|
||||||
This is attempted when the record was inserted by updating a
|
This is attempted when the record was inserted by updating a
|
||||||
delete-marked record and there no longer exist transactions
|
delete-marked record and there no longer exist transactions
|
||||||
that would see the delete-marked record. In other words, we
|
that would see the delete-marked record.
|
||||||
roll back the insert by purging the record.
|
|
||||||
@return DB_SUCCESS, DB_FAIL, or error code: we may run out of file space */
|
@return DB_SUCCESS, DB_FAIL, or error code: we may run out of file space */
|
||||||
static
|
static
|
||||||
ulint
|
ulint
|
||||||
@ -140,11 +139,12 @@ row_undo_mod_remove_clust_low(
|
|||||||
/*==========================*/
|
/*==========================*/
|
||||||
undo_node_t* node, /*!< in: row undo node */
|
undo_node_t* node, /*!< in: row undo node */
|
||||||
que_thr_t* thr, /*!< in: query thread */
|
que_thr_t* thr, /*!< in: query thread */
|
||||||
mtr_t* mtr, /*!< in: mtr */
|
mtr_t* mtr, /*!< in/out: mini-transaction */
|
||||||
ulint mode) /*!< in: BTR_MODIFY_LEAF or BTR_MODIFY_TREE */
|
ulint mode) /*!< in: BTR_MODIFY_LEAF or BTR_MODIFY_TREE */
|
||||||
{
|
{
|
||||||
btr_cur_t* btr_cur;
|
btr_cur_t* btr_cur;
|
||||||
ulint err;
|
ulint err;
|
||||||
|
ulint trx_id_offset;
|
||||||
|
|
||||||
ut_ad(node->rec_type == TRX_UNDO_UPD_DEL_REC);
|
ut_ad(node->rec_type == TRX_UNDO_UPD_DEL_REC);
|
||||||
|
|
||||||
@ -159,6 +159,42 @@ row_undo_mod_remove_clust_low(
|
|||||||
|
|
||||||
btr_cur = btr_pcur_get_btr_cur(&node->pcur);
|
btr_cur = btr_pcur_get_btr_cur(&node->pcur);
|
||||||
|
|
||||||
|
trx_id_offset = btr_cur_get_index(btr_cur)->trx_id_offset;
|
||||||
|
|
||||||
|
if (!trx_id_offset) {
|
||||||
|
mem_heap_t* heap = NULL;
|
||||||
|
ulint trx_id_col;
|
||||||
|
ulint* offsets;
|
||||||
|
ulint len;
|
||||||
|
|
||||||
|
trx_id_col = dict_index_get_sys_col_pos(
|
||||||
|
btr_cur_get_index(btr_cur), DATA_TRX_ID);
|
||||||
|
ut_ad(trx_id_col > 0);
|
||||||
|
ut_ad(trx_id_col != ULINT_UNDEFINED);
|
||||||
|
|
||||||
|
offsets = rec_get_offsets(
|
||||||
|
btr_cur_get_rec(btr_cur), btr_cur_get_index(btr_cur),
|
||||||
|
NULL, trx_id_col + 1, &heap);
|
||||||
|
|
||||||
|
trx_id_offset = rec_get_nth_field_offs(
|
||||||
|
offsets, trx_id_col, &len);
|
||||||
|
ut_ad(len == DATA_TRX_ID_LEN);
|
||||||
|
mem_heap_free(heap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trx_read_trx_id(btr_cur_get_rec(btr_cur) + trx_id_offset)
|
||||||
|
!= node->new_trx_id) {
|
||||||
|
/* The record must have been purged and then replaced
|
||||||
|
with a different one. */
|
||||||
|
return(DB_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We are about to remove an old, delete-marked version of the
|
||||||
|
record that may have been delete-marked by a different transaction
|
||||||
|
than the rolling-back one. */
|
||||||
|
ut_ad(rec_get_deleted_flag(btr_cur_get_rec(btr_cur),
|
||||||
|
dict_table_is_comp(node->table)));
|
||||||
|
|
||||||
if (mode == BTR_MODIFY_LEAF) {
|
if (mode == BTR_MODIFY_LEAF) {
|
||||||
err = btr_cur_optimistic_delete(btr_cur, mtr)
|
err = btr_cur_optimistic_delete(btr_cur, mtr)
|
||||||
? DB_SUCCESS
|
? DB_SUCCESS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user