MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
row0vers.cc File Reference
#include "row0vers.h"
#include "dict0dict.h"
#include "dict0boot.h"
#include "btr0btr.h"
#include "mach0data.h"
#include "trx0rseg.h"
#include "trx0trx.h"
#include "trx0roll.h"
#include "trx0undo.h"
#include "trx0purge.h"
#include "trx0rec.h"
#include "que0que.h"
#include "row0row.h"
#include "row0upd.h"
#include "rem0cmp.h"
#include "read0read.h"
#include "lock0lock.h"
Include dependency graph for row0vers.cc:

Go to the source code of this file.

Functions

UNIV_INLINE trx_id_t row_vers_impl_x_locked_low (const rec_t *clust_rec, dict_index_t *clust_index, const rec_t *rec, dict_index_t *index, const ulint *offsets, mtr_t *mtr)
UNIV_INTERN trx_id_t row_vers_impl_x_locked (const rec_t *rec, dict_index_t *index, const ulint *offsets)
UNIV_INTERN ibool row_vers_must_preserve_del_marked (trx_id_t trx_id, mtr_t *mtr)
UNIV_INTERN ibool row_vers_old_has_index_entry (ibool also_curr, const rec_t *rec, mtr_t *mtr, dict_index_t *index, const dtuple_t *ientry)
UNIV_INTERN dberr_t row_vers_build_for_consistent_read (const rec_t *rec, mtr_t *mtr, dict_index_t *index, ulint **offsets, read_view_t *view, mem_heap_t **offset_heap, mem_heap_t *in_heap, rec_t **old_vers)
UNIV_INTERN void row_vers_build_for_semi_consistent_read (const rec_t *rec, mtr_t *mtr, dict_index_t *index, ulint **offsets, mem_heap_t **offset_heap, mem_heap_t *in_heap, const rec_t **old_vers)

Detailed Description

Row versions

Created 2/6/1997 Heikki Tuuri

Definition in file row0vers.cc.

Function Documentation

UNIV_INTERN dberr_t row_vers_build_for_consistent_read ( const rec_t *  rec,
mtr_t mtr,
dict_index_t index,
ulint **  offsets,
read_view_t view,
mem_heap_t **  offset_heap,
mem_heap_t in_heap,
rec_t **  old_vers 
)

Constructs the version of a clustered index record which a consistent read should see. We assume that the trx id stored in rec is such that the consistent read should not see rec in its present version.

Returns
DB_SUCCESS or DB_MISSING_HISTORY
Parameters
recin: record in a clustered index; the caller must have a latch on the page; this latch locks the top of the stack of versions of this records
mtrin: mtr holding the latch on rec
indexin: the clustered index
offsetsin/out: offsets returned by rec_get_offsets(rec, index)
viewin: the consistent read view
offset_heapin/out: memory heap from which the offsets are allocated
in_heapin: memory heap from which the memory for *old_vers is allocated; memory for possible intermediate versions is allocated and freed locally within the function
old_versout, own: old version, or NULL if the history is missing or the record does not exist in the view, that is, it was freshly inserted afterwards

Definition at line 477 of file row0vers.cc.

Here is the call graph for this function:

UNIV_INTERN void row_vers_build_for_semi_consistent_read ( const rec_t *  rec,
mtr_t mtr,
dict_index_t index,
ulint **  offsets,
mem_heap_t **  offset_heap,
mem_heap_t in_heap,
const rec_t **  old_vers 
)

Constructs the last committed version of a clustered index record, which should be seen by a semi-consistent read.

Parameters
recin: record in a clustered index; the caller must have a latch on the page; this latch locks the top of the stack of versions of this records
mtrin: mtr holding the latch on rec
indexin: the clustered index
offsetsin/out: offsets returned by rec_get_offsets(rec, index)
offset_heapin/out: memory heap from which the offsets are allocated
in_heapin: memory heap from which the memory for *old_vers is allocated; memory for possible intermediate versions is allocated and freed locally within the function
old_versout: rec, old version, or NULL if the record does not exist in the view, that is, it was freshly inserted afterwards

Definition at line 612 of file row0vers.cc.

Here is the call graph for this function:

UNIV_INTERN trx_id_t row_vers_impl_x_locked ( const rec_t *  rec,
dict_index_t index,
const ulint *  offsets 
)

Finds out if an active transaction has inserted or modified a secondary index record.

Returns
0 if committed, else the active transaction id; NOTE that this function can return false positives but never false negatives. The caller must confirm all positive results by calling trx_is_active() while holding lock_sys->mutex.
Parameters
recin: record in a secondary index
indexin: the secondary index
offsetsin: rec_get_offsets(rec, index)

Definition at line 253 of file row0vers.cc.

Here is the call graph for this function:

UNIV_INLINE trx_id_t row_vers_impl_x_locked_low ( const rec_t *  clust_rec,
dict_index_t clust_index,
const rec_t *  rec,
dict_index_t index,
const ulint *  offsets,
mtr_t mtr 
)

Finds out if an active transaction has inserted or modified a secondary index record.

Returns
0 if committed, else the active transaction id; NOTE that this function can return false positives but never false negatives. The caller must confirm all positive results by calling trx_is_active() while holding lock_sys->mutex.
Parameters
clust_recin: clustered index record
clust_indexin: the clustered index
recin: secondary index record
indexin: the secondary index
offsetsin: rec_get_offsets(rec, index)
mtrin/out: mini-transaction

Definition at line 58 of file row0vers.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

UNIV_INTERN ibool row_vers_must_preserve_del_marked ( trx_id_t  trx_id,
mtr_t mtr 
)

Finds out if we must preserve a delete marked earlier version of a clustered index record, because it is >= the purge view.

Returns
TRUE if earlier version should be preserved
Parameters
trx_idin: transaction id in the version
mtrin: mtr holding the latch on the clustered index record; it will also hold the latch on purge_view

Definition at line 309 of file row0vers.cc.

Here is the call graph for this function:

UNIV_INTERN ibool row_vers_old_has_index_entry ( ibool  also_curr,
const rec_t *  rec,
mtr_t mtr,
dict_index_t index,
const dtuple_t ientry 
)

Finds out if a version of the record, where the version >= the current purge view, should have ientry as its secondary index entry. We check if there is any not delete marked version of the record where the trx id >= purge view, and the secondary index entry and ientry are identified in the alphabetical ordering; exactly in this case we return TRUE.

Returns
TRUE if earlier version should have
Parameters
also_currin: TRUE if also rec is included in the versions to search; otherwise only versions prior to it are searched
recin: record in the clustered index; the caller must have a latch on the page
mtrin: mtr holding the latch on rec; it will also hold the latch on purge_view
indexin: the secondary index
ientryin: the secondary index entry

Definition at line 334 of file row0vers.cc.

Here is the call graph for this function: