mirror of
https://github.com/MariaDB/server.git
synced 2025-10-27 05:56:07 +03:00
Merge mysql-5.1 to mysql-5.5.
This commit is contained in:
@@ -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
|
||||||
@@ -38,27 +38,16 @@ Created 4/20/1996 Heikki Tuuri
|
|||||||
#include "btr0types.h"
|
#include "btr0types.h"
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Gets the offset of the trx id field, in bytes relative to the origin of
|
Gets the offset of the DB_TRX_ID field, in bytes relative to the origin of
|
||||||
a clustered index record.
|
a clustered index record.
|
||||||
@return offset of DATA_TRX_ID */
|
@return offset of DATA_TRX_ID */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
ulint
|
ulint
|
||||||
row_get_trx_id_offset_func(
|
row_get_trx_id_offset(
|
||||||
/*=======================*/
|
/*==================*/
|
||||||
#ifdef UNIV_DEBUG
|
|
||||||
const rec_t* rec, /*!< in: record */
|
|
||||||
#endif /* UNIV_DEBUG */
|
|
||||||
const dict_index_t* index, /*!< in: clustered index */
|
const dict_index_t* index, /*!< in: clustered index */
|
||||||
const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */
|
const ulint* offsets)/*!< in: record offsets */
|
||||||
__attribute__((nonnull, warn_unused_result));
|
__attribute__((nonnull, warn_unused_result));
|
||||||
#ifdef UNIV_DEBUG
|
|
||||||
# define row_get_trx_id_offset(rec, index, offsets) \
|
|
||||||
row_get_trx_id_offset_func(rec, index, offsets)
|
|
||||||
#else /* UNIV_DEBUG */
|
|
||||||
# define row_get_trx_id_offset(rec, index, offsets) \
|
|
||||||
row_get_trx_id_offset_func(index, offsets)
|
|
||||||
#endif /* UNIV_DEBUG */
|
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Reads the trx id field from a clustered index record.
|
Reads the trx id field from a clustered index record.
|
||||||
@return value of the field */
|
@return value of the field */
|
||||||
@@ -77,9 +66,10 @@ UNIV_INLINE
|
|||||||
roll_ptr_t
|
roll_ptr_t
|
||||||
row_get_rec_roll_ptr(
|
row_get_rec_roll_ptr(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
const rec_t* rec, /*!< in: record */
|
const rec_t* rec, /*!< in: record */
|
||||||
dict_index_t* index, /*!< in: clustered index */
|
const dict_index_t* index, /*!< in: clustered index */
|
||||||
const ulint* offsets);/*!< in: rec_get_offsets(rec, index) */
|
const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */
|
||||||
|
__attribute__((nonnull, warn_unused_result));
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
When an insert or purge to a table is performed, this function builds
|
When an insert or purge to a table is performed, this function builds
|
||||||
the entry to be inserted into or purged from an index on the table.
|
the entry to be inserted into or purged from an index on the table.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, 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
|
||||||
@@ -28,25 +28,22 @@ Created 4/20/1996 Heikki Tuuri
|
|||||||
#include "trx0undo.h"
|
#include "trx0undo.h"
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Gets the offset of trx id field, in bytes relative to the origin of
|
Gets the offset of the DB_TRX_ID field, in bytes relative to the origin of
|
||||||
a clustered index record.
|
a clustered index record.
|
||||||
@return offset of DATA_TRX_ID */
|
@return offset of DATA_TRX_ID */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
ulint
|
ulint
|
||||||
row_get_trx_id_offset_func(
|
row_get_trx_id_offset(
|
||||||
/*=======================*/
|
/*==================*/
|
||||||
#ifdef UNIV_DEBUG
|
|
||||||
const rec_t* rec, /*!< in: record */
|
|
||||||
#endif /* UNIV_DEBUG */
|
|
||||||
const dict_index_t* index, /*!< in: clustered index */
|
const dict_index_t* index, /*!< in: clustered index */
|
||||||
const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */
|
const ulint* offsets)/*!< in: record offsets */
|
||||||
{
|
{
|
||||||
ulint pos;
|
ulint pos;
|
||||||
ulint offset;
|
ulint offset;
|
||||||
ulint len;
|
ulint len;
|
||||||
|
|
||||||
ut_ad(dict_index_is_clust(index));
|
ut_ad(dict_index_is_clust(index));
|
||||||
ut_ad(rec_offs_validate(rec, index, offsets));
|
ut_ad(rec_offs_validate(NULL, index, offsets));
|
||||||
|
|
||||||
pos = dict_index_get_sys_col_pos(index, DATA_TRX_ID);
|
pos = dict_index_get_sys_col_pos(index, DATA_TRX_ID);
|
||||||
|
|
||||||
@@ -76,7 +73,7 @@ row_get_rec_trx_id(
|
|||||||
offset = index->trx_id_offset;
|
offset = index->trx_id_offset;
|
||||||
|
|
||||||
if (!offset) {
|
if (!offset) {
|
||||||
offset = row_get_trx_id_offset(rec, index, offsets);
|
offset = row_get_trx_id_offset(index, offsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(trx_read_trx_id(rec + offset));
|
return(trx_read_trx_id(rec + offset));
|
||||||
@@ -89,9 +86,9 @@ UNIV_INLINE
|
|||||||
roll_ptr_t
|
roll_ptr_t
|
||||||
row_get_rec_roll_ptr(
|
row_get_rec_roll_ptr(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
const rec_t* rec, /*!< in: record */
|
const rec_t* rec, /*!< in: record */
|
||||||
dict_index_t* index, /*!< in: clustered index */
|
const dict_index_t* index, /*!< in: clustered index */
|
||||||
const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */
|
const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */
|
||||||
{
|
{
|
||||||
ulint offset;
|
ulint offset;
|
||||||
|
|
||||||
@@ -101,7 +98,7 @@ row_get_rec_roll_ptr(
|
|||||||
offset = index->trx_id_offset;
|
offset = index->trx_id_offset;
|
||||||
|
|
||||||
if (!offset) {
|
if (!offset) {
|
||||||
offset = row_get_trx_id_offset(rec, index, offsets);
|
offset = row_get_trx_id_offset(index, offsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(trx_read_roll_ptr(rec + offset + DATA_TRX_ID_LEN));
|
return(trx_read_roll_ptr(rec + offset + DATA_TRX_ID_LEN));
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, 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
|
||||||
@@ -171,7 +171,7 @@ row_upd_rec_sys_fields(
|
|||||||
ulint offset = index->trx_id_offset;
|
ulint offset = index->trx_id_offset;
|
||||||
|
|
||||||
if (!offset) {
|
if (!offset) {
|
||||||
offset = row_get_trx_id_offset(rec, index, offsets);
|
offset = row_get_trx_id_offset(index, offsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DATA_TRX_ID + 1 != DATA_ROLL_PTR
|
#if DATA_TRX_ID + 1 != DATA_ROLL_PTR
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2011, 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
|
||||||
@@ -278,6 +278,15 @@ ibool
|
|||||||
trx_in_trx_list(
|
trx_in_trx_list(
|
||||||
/*============*/
|
/*============*/
|
||||||
trx_t* in_trx);/*!< in: trx */
|
trx_t* in_trx);/*!< in: trx */
|
||||||
|
/***********************************************************//**
|
||||||
|
Assert that a transaction has been recovered.
|
||||||
|
@return TRUE */
|
||||||
|
UNIV_INLINE
|
||||||
|
ibool
|
||||||
|
trx_assert_recovered(
|
||||||
|
/*=================*/
|
||||||
|
trx_id_t trx_id) /*!< in: transaction identifier */
|
||||||
|
__attribute__((warn_unused_result));
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
Updates the offset information about the end of the MySQL binlog entry
|
Updates the offset information about the end of the MySQL binlog entry
|
||||||
which corresponds to the transaction just being committed. In a MySQL
|
which corresponds to the transaction just being committed. In a MySQL
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, 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
|
||||||
@@ -277,6 +277,28 @@ trx_get_on_id(
|
|||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
|
/***********************************************************//**
|
||||||
|
Assert that a transaction has been recovered.
|
||||||
|
@return TRUE */
|
||||||
|
UNIV_INLINE
|
||||||
|
ibool
|
||||||
|
trx_assert_recovered(
|
||||||
|
/*=================*/
|
||||||
|
trx_id_t trx_id) /*!< in: transaction identifier */
|
||||||
|
{
|
||||||
|
trx_t* trx;
|
||||||
|
|
||||||
|
mutex_enter(&kernel_mutex);
|
||||||
|
trx = trx_get_on_id(trx_id);
|
||||||
|
ut_a(trx);
|
||||||
|
ut_a(trx->is_recovered);
|
||||||
|
mutex_exit(&kernel_mutex);
|
||||||
|
|
||||||
|
return(TRUE);
|
||||||
|
}
|
||||||
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
Returns the minumum trx id in trx list. This is the smallest id for which
|
Returns the minumum trx id in trx list. This is the smallest id for which
|
||||||
the trx can possibly be active. (But, you must look at the trx->conc_state to
|
the trx can possibly be active. (But, you must look at the trx->conc_state to
|
||||||
|
|||||||
@@ -202,33 +202,19 @@ row_build(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG
|
||||||
if (UNIV_LIKELY_NULL(rec_offs_any_null_extern(rec, offsets))) {
|
/* This condition can occur during crash recovery before
|
||||||
/* This condition can occur during crash recovery before
|
trx_rollback_active() has completed execution.
|
||||||
trx_rollback_active() has completed execution.
|
|
||||||
|
|
||||||
This condition is possible if the server crashed
|
This condition is possible if the server crashed
|
||||||
during an insert or update before
|
during an insert or update before
|
||||||
btr_store_big_rec_extern_fields() did mtr_commit() all
|
btr_store_big_rec_extern_fields() did mtr_commit() all
|
||||||
BLOB pointers to the clustered index record.
|
BLOB pointers to the clustered index record.
|
||||||
|
|
||||||
Look up the transaction that holds the implicit lock
|
If the record contains a null BLOB pointer, look up the
|
||||||
on this record, and assert that it was recovered (and
|
transaction that holds the implicit lock on this record, and
|
||||||
will soon be rolled back). */
|
assert that it was recovered (and will soon be rolled back). */
|
||||||
|
ut_a(!rec_offs_any_null_extern(rec, offsets)
|
||||||
ulint trx_id_pos = dict_index_get_sys_col_pos(
|
|| trx_assert_recovered(row_get_rec_trx_id(rec, index, offsets)));
|
||||||
index, DATA_TRX_ID);
|
|
||||||
ulint len;
|
|
||||||
trx_id_t trx_id = trx_read_trx_id(
|
|
||||||
rec_get_nth_field(rec, offsets, trx_id_pos, &len));
|
|
||||||
trx_t* trx;
|
|
||||||
ut_a(len == 6);
|
|
||||||
|
|
||||||
mutex_enter(&kernel_mutex);
|
|
||||||
trx = trx_get_on_id(trx_id);
|
|
||||||
ut_a(trx);
|
|
||||||
ut_a(trx->is_recovered);
|
|
||||||
mutex_exit(&kernel_mutex);
|
|
||||||
}
|
|
||||||
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */
|
||||||
|
|
||||||
if (type != ROW_COPY_POINTERS) {
|
if (type != ROW_COPY_POINTERS) {
|
||||||
|
|||||||
Reference in New Issue
Block a user