mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
2662b59306
Docs/manual.texi: Added Innobase documentation configure.in: Incremented version include/my_base.h: Added option for Innobase myisam/mi_check.c: cleanup mysql-test/t/bdb.test: cleanup mysql-test/t/innobase.test: Extended with new tests from bdb.test mysql-test/t/merge.test: Added test of SHOW create mysys/my_init.c: Fix for UNIXWARE 7 scripts/mysql_install_db.sh: Always write how to start mysqld scripts/safe_mysqld.sh: Fixed type sql/ha_innobase.cc: Update to new version sql/ha_innobase.h: Update to new version sql/handler.h: Added 'update_table_comment()' and 'append_create_info()' sql/sql_delete.cc: Fixes for Innobase sql/sql_select.cc: Fixes for Innobase sql/sql_show.cc: Append create information (for MERGE tables) sql/sql_update.cc: Fixes for Innobase
83 lines
2.3 KiB
Text
83 lines
2.3 KiB
Text
/******************************************************
|
|
Row versions
|
|
|
|
(c) 1997 Innobase Oy
|
|
|
|
Created 2/6/1997 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#include "row0row.h"
|
|
#include "dict0dict.h"
|
|
#include "read0read.h"
|
|
#include "page0page.h"
|
|
#include "log0recv.h"
|
|
|
|
/*************************************************************************
|
|
Fetches the trx id of a clustered index record or version. */
|
|
UNIV_INLINE
|
|
dulint
|
|
row_vers_get_trx_id(
|
|
/*================*/
|
|
/* out: trx id or ut_dulint_zero if the
|
|
clustered index record not found */
|
|
rec_t* rec, /* in: clustered index record, or an old
|
|
version of it */
|
|
dict_table_t* table) /* in: table */
|
|
{
|
|
return(row_get_rec_trx_id(rec, dict_table_get_first_index(table)));
|
|
}
|
|
|
|
/*************************************************************************
|
|
Checks if a consistent read can be performed immediately on the index
|
|
record, or if an older version is needed. */
|
|
UNIV_INLINE
|
|
ibool
|
|
row_vers_clust_rec_sees_older(
|
|
/*==========================*/
|
|
/* out: FALSE if can read immediately */
|
|
rec_t* rec, /* in: record which should be read or passed
|
|
over by a read cursor */
|
|
dict_index_t* index, /* in: clustered index */
|
|
read_view_t* view) /* in: read view */
|
|
{
|
|
ut_ad(index->type & DICT_CLUSTERED);
|
|
|
|
if (read_view_sees_trx_id(view, row_get_rec_trx_id(rec, index))) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
/*************************************************************************
|
|
Checks if a secondary index record can be read immediately by a consistent
|
|
read, or if an older version may be needed. To be sure, we will have to
|
|
look in the clustered index. */
|
|
UNIV_INLINE
|
|
ibool
|
|
row_vers_sec_rec_may_see_older(
|
|
/*===========================*/
|
|
/* out: FALSE if can be read immediately */
|
|
rec_t* rec, /* in: record which should be read or passed */
|
|
dict_index_t* index, /* in: secondary index */
|
|
read_view_t* view) /* in: read view */
|
|
{
|
|
page_t* page;
|
|
|
|
ut_ad(!(index->type & DICT_CLUSTERED));
|
|
|
|
page = buf_frame_align(rec);
|
|
|
|
if ((ut_dulint_cmp(page_get_max_trx_id(page), view->up_limit_id) >= 0)
|
|
|| recv_recovery_is_on()) {
|
|
|
|
/* It may be that the record was inserted or modified by a
|
|
transaction the view should not see: we have to look in the
|
|
clustered index */
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
return(FALSE);
|
|
}
|