mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
ffa8c4cfcc
support ha_innodb.so as a dynamic plugin. * remove obsolete *,innodb_plugin.rdiff files * s/--plugin-load=/--plugin-load-add=/ * MYSQL_PLUGIN_IMPORT glob_hostname[] * use my_error instead of push_warning_printf(ER_DEFAULT) * don't use tdc_size and tc_size in a module update test cases (XtraDB is 5.6.14, InnoDB is 5.6.10) * copy new tests over * disable some tests for (old) InnoDB * delete XtraDB tests that no longer apply small compatibility changes: * s/HTON_EXTENDED_KEYS/HTON_SUPPORTS_EXTENDED_KEYS/ * revert unnecessary InnoDB changes to make it a bit closer to the upstream fix XtraDB to compile on Windows (both as a static and a dynamic plugin) disable XtraDB on Windows (deadlocks) and where no atomic ops are available (e.g. CentOS 5) storage/innobase/handler/ha_innodb.cc: revert few unnecessary changes to make it a bit closer to the original InnoDB storage/innobase/include/univ.i: correct the version to match what it was merged from
238 lines
8.2 KiB
C
238 lines
8.2 KiB
C
/*****************************************************************************
|
|
|
|
Copyright (c) 2011, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
|
|
|
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
|
|
Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
|
|
|
*****************************************************************************/
|
|
|
|
/**************************************************//**
|
|
@file include/row0log.h
|
|
Modification log for online index creation and online table rebuild
|
|
|
|
Created 2011-05-26 Marko Makela
|
|
*******************************************************/
|
|
|
|
#ifndef row0log_h
|
|
#define row0log_h
|
|
|
|
#include "univ.i"
|
|
#include "mtr0types.h"
|
|
#include "row0types.h"
|
|
#include "rem0types.h"
|
|
#include "data0types.h"
|
|
#include "dict0types.h"
|
|
#include "trx0types.h"
|
|
#include "que0types.h"
|
|
|
|
/******************************************************//**
|
|
Allocate the row log for an index and flag the index
|
|
for online creation.
|
|
@retval true if success, false if not */
|
|
UNIV_INTERN
|
|
bool
|
|
row_log_allocate(
|
|
/*=============*/
|
|
dict_index_t* index, /*!< in/out: index */
|
|
dict_table_t* table, /*!< in/out: new table being rebuilt,
|
|
or NULL when creating a secondary index */
|
|
bool same_pk,/*!< in: whether the definition of the
|
|
PRIMARY KEY has remained the same */
|
|
const dtuple_t* add_cols,
|
|
/*!< in: default values of
|
|
added columns, or NULL */
|
|
const ulint* col_map)/*!< in: mapping of old column
|
|
numbers to new ones, or NULL if !table */
|
|
__attribute__((nonnull(1), warn_unused_result));
|
|
|
|
/******************************************************//**
|
|
Free the row log for an index that was being created online. */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_free(
|
|
/*=========*/
|
|
row_log_t*& log) /*!< in,own: row log */
|
|
__attribute__((nonnull));
|
|
|
|
/******************************************************//**
|
|
Free the row log for an index on which online creation was aborted. */
|
|
UNIV_INLINE
|
|
void
|
|
row_log_abort_sec(
|
|
/*==============*/
|
|
dict_index_t* index) /*!< in/out: index (x-latched) */
|
|
__attribute__((nonnull));
|
|
|
|
/******************************************************//**
|
|
Try to log an operation to a secondary index that is
|
|
(or was) being created.
|
|
@retval true if the operation was logged or can be ignored
|
|
@retval false if online index creation is not taking place */
|
|
UNIV_INLINE
|
|
bool
|
|
row_log_online_op_try(
|
|
/*==================*/
|
|
dict_index_t* index, /*!< in/out: index, S or X latched */
|
|
const dtuple_t* tuple, /*!< in: index tuple */
|
|
trx_id_t trx_id) /*!< in: transaction ID for insert,
|
|
or 0 for delete */
|
|
__attribute__((nonnull, warn_unused_result));
|
|
/******************************************************//**
|
|
Logs an operation to a secondary index that is (or was) being created. */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_online_op(
|
|
/*==============*/
|
|
dict_index_t* index, /*!< in/out: index, S or X latched */
|
|
const dtuple_t* tuple, /*!< in: index tuple */
|
|
trx_id_t trx_id) /*!< in: transaction ID for insert,
|
|
or 0 for delete */
|
|
UNIV_COLD __attribute__((nonnull));
|
|
|
|
/******************************************************//**
|
|
Gets the error status of the online index rebuild log.
|
|
@return DB_SUCCESS or error code */
|
|
UNIV_INTERN
|
|
dberr_t
|
|
row_log_table_get_error(
|
|
/*====================*/
|
|
const dict_index_t* index) /*!< in: clustered index of a table
|
|
that is being rebuilt online */
|
|
__attribute__((nonnull, warn_unused_result));
|
|
|
|
/******************************************************//**
|
|
Logs a delete operation to a table that is being rebuilt.
|
|
This will be merged in row_log_table_apply_delete(). */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_table_delete(
|
|
/*=================*/
|
|
const rec_t* rec, /*!< in: clustered index leaf page record,
|
|
page X-latched */
|
|
dict_index_t* index, /*!< in/out: clustered index, S-latched
|
|
or X-latched */
|
|
const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */
|
|
bool purge, /*!< in: true=purging BLOBs */
|
|
trx_id_t trx_id) /*!< in: DB_TRX_ID of the record before
|
|
it was deleted */
|
|
UNIV_COLD __attribute__((nonnull));
|
|
|
|
/******************************************************//**
|
|
Logs an update operation to a table that is being rebuilt.
|
|
This will be merged in row_log_table_apply_update(). */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_table_update(
|
|
/*=================*/
|
|
const rec_t* rec, /*!< in: clustered index leaf page record,
|
|
page X-latched */
|
|
dict_index_t* index, /*!< in/out: clustered index, S-latched
|
|
or X-latched */
|
|
const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */
|
|
const dtuple_t* old_pk) /*!< in: row_log_table_get_pk()
|
|
before the update */
|
|
UNIV_COLD __attribute__((nonnull(1,2,3)));
|
|
|
|
/******************************************************//**
|
|
Constructs the old PRIMARY KEY and DB_TRX_ID,DB_ROLL_PTR
|
|
of a table that is being rebuilt.
|
|
@return tuple of PRIMARY KEY,DB_TRX_ID,DB_ROLL_PTR in the rebuilt table,
|
|
or NULL if the PRIMARY KEY definition does not change */
|
|
UNIV_INTERN
|
|
const dtuple_t*
|
|
row_log_table_get_pk(
|
|
/*=================*/
|
|
const rec_t* rec, /*!< in: clustered index leaf page record,
|
|
page X-latched */
|
|
dict_index_t* index, /*!< in/out: clustered index, S-latched
|
|
or X-latched */
|
|
const ulint* offsets,/*!< in: rec_get_offsets(rec,index),
|
|
or NULL */
|
|
mem_heap_t** heap) /*!< in/out: memory heap where allocated */
|
|
UNIV_COLD __attribute__((nonnull(1,2,4), warn_unused_result));
|
|
|
|
/******************************************************//**
|
|
Logs an insert to a table that is being rebuilt.
|
|
This will be merged in row_log_table_apply_insert(). */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_table_insert(
|
|
/*=================*/
|
|
const rec_t* rec, /*!< in: clustered index leaf page record,
|
|
page X-latched */
|
|
dict_index_t* index, /*!< in/out: clustered index, S-latched
|
|
or X-latched */
|
|
const ulint* offsets)/*!< in: rec_get_offsets(rec,index) */
|
|
UNIV_COLD __attribute__((nonnull));
|
|
/******************************************************//**
|
|
Notes that a BLOB is being freed during online ALTER TABLE. */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_table_blob_free(
|
|
/*====================*/
|
|
dict_index_t* index, /*!< in/out: clustered index, X-latched */
|
|
ulint page_no)/*!< in: starting page number of the BLOB */
|
|
UNIV_COLD __attribute__((nonnull));
|
|
/******************************************************//**
|
|
Notes that a BLOB is being allocated during online ALTER TABLE. */
|
|
UNIV_INTERN
|
|
void
|
|
row_log_table_blob_alloc(
|
|
/*=====================*/
|
|
dict_index_t* index, /*!< in/out: clustered index, X-latched */
|
|
ulint page_no)/*!< in: starting page number of the BLOB */
|
|
UNIV_COLD __attribute__((nonnull));
|
|
/******************************************************//**
|
|
Apply the row_log_table log to a table upon completing rebuild.
|
|
@return DB_SUCCESS, or error code on failure */
|
|
UNIV_INTERN
|
|
dberr_t
|
|
row_log_table_apply(
|
|
/*================*/
|
|
que_thr_t* thr, /*!< in: query graph */
|
|
dict_table_t* old_table,
|
|
/*!< in: old table */
|
|
struct TABLE* table) /*!< in/out: MySQL table
|
|
(for reporting duplicates) */
|
|
__attribute__((nonnull, warn_unused_result));
|
|
|
|
/******************************************************//**
|
|
Get the latest transaction ID that has invoked row_log_online_op()
|
|
during online creation.
|
|
@return latest transaction ID, or 0 if nothing was logged */
|
|
UNIV_INTERN
|
|
trx_id_t
|
|
row_log_get_max_trx(
|
|
/*================*/
|
|
dict_index_t* index) /*!< in: index, must be locked */
|
|
__attribute__((nonnull, warn_unused_result));
|
|
|
|
/******************************************************//**
|
|
Merge the row log to the index upon completing index creation.
|
|
@return DB_SUCCESS, or error code on failure */
|
|
UNIV_INTERN
|
|
dberr_t
|
|
row_log_apply(
|
|
/*==========*/
|
|
trx_t* trx, /*!< in: transaction (for checking if
|
|
the operation was interrupted) */
|
|
dict_index_t* index, /*!< in/out: secondary index */
|
|
struct TABLE* table) /*!< in/out: MySQL table
|
|
(for reporting duplicates) */
|
|
__attribute__((nonnull, warn_unused_result));
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "row0log.ic"
|
|
#endif
|
|
|
|
#endif /* row0log.h */
|