/**********************************************************************//**
Reads the undo log record number.
@return undo no */ inline undo_no_t trx_undo_rec_get_undo_no(const trx_undo_rec_t *undo_rec)
{ return mach_u64_read_much_compressed(undo_rec + 3);
}
/**********************************************************************//**
Returns the start of the undo record data area. */ #define trx_undo_rec_get_ptr(undo_rec, undo_no) \
((undo_rec) + trx_undo_rec_get_offset(undo_no))
/**********************************************************************//**
Reads from an undo log record the general parameters.
@return remaining part of undo log record after reading these values */ const byte*
trx_undo_rec_get_pars( /*==================*/ const trx_undo_rec_t* undo_rec, /*!< in: undo log record */
byte* type, /*!< out: undo record type:
TRX_UNDO_INSERT_REC, ... */
byte* cmpl_info, /*!< out: compiler info, relevant only
for update type records */ bool* updated_extern, /*!< out: true if we updated an
externally stored fild */
undo_no_t* undo_no, /*!< out: undo log record number */
table_id_t* table_id) /*!< out: table id */
MY_ATTRIBUTE((nonnull));
/*******************************************************************//**
Builds a row reference from an undo log record.
@return pointer to remaining part of undo record */ const byte*
trx_undo_rec_get_row_ref( /*=====================*/ const byte* ptr, /*!< in: remaining part of a copy of an undo log record,atthestartoftherowreference; NOTEthatthiscopyoftheundologrecordmust bepreservedaslongastherowreferenceis used,aswedoNOTcopythedatainthe
record! */
dict_index_t* index, /*!< in: clustered index */ const dtuple_t**ref, /*!< out, own: row reference */
mem_heap_t* heap) /*!< in: memory heap from which the memory
needed is allocated */
MY_ATTRIBUTE((nonnull)); /**********************************************************************//**
Reads from an undo log update record the system field values of the old
version.
@return remaining part of undo log record after reading these values */
byte*
trx_undo_update_rec_get_sys_cols( /*=============================*/ const byte* ptr, /*!< in: remaining part of undo logrecordafterreading
general parameters */
trx_id_t* trx_id, /*!< out: trx id */
roll_ptr_t* roll_ptr, /*!< out: roll ptr */
byte* info_bits); /*!< out: info bits state */ /*******************************************************************//**
Builds an update vector based on a remaining part of an undo log record.
@return remaining part of the record, NULL if an error detected, which
means that the record is corrupted */
byte*
trx_undo_update_rec_get_update( /*===========================*/ const byte* ptr, /*!< in: remaining part in update undo log record,afterreadingtherowreference NOTEthatthiscopyoftheundologrecordmust bepreservedaslongastheupdatevectoris used,aswedoNOTcopythedatainthe
record! */
dict_index_t* index, /*!< in: clustered index */
ulint type, /*!< in: TRX_UNDO_UPD_EXIST_REC, TRX_UNDO_UPD_DEL_REC,or TRX_UNDO_DEL_MARK_REC;inthelastcase, onlytrxidandrollptrfieldsareaddedto
the update vector */
trx_id_t trx_id, /*!< in: transaction id from this undorecord */
roll_ptr_t roll_ptr,/*!< in: roll pointer from this undo record */
byte info_bits,/*!< in: info bits from this undo record */
mem_heap_t* heap, /*!< in: memory heap from which the memory
needed is allocated */
upd_t** upd); /*!< out, own: update vector */ /** Report a RENAME TABLE operation. @param[in,out]trxtransaction @param[in]tabletablethatisbeingrenamed
@return DB_SUCCESS or error code */
dberr_t trx_undo_report_rename(trx_t* trx, const dict_table_t* table)
MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//**
Writes information to an undo log about an insert, update, or a delete marking
of a clustered index record. This information is used in a rollback of the
transaction and in consistent reads that must look to the history of this
transaction.
@return DB_SUCCESS or error code */
dberr_t
trx_undo_report_row_operation( /*==========================*/
que_thr_t* thr, /*!< in: query thread */
dict_index_t* index, /*!< in: clustered index */ const dtuple_t* clust_entry, /*!< in: in the case of an insert, indexentrytoinsertintothe clusteredindex;inupdates, maycontainaclusteredindex recordtuplethatalsocontains virtualcolumnsofthetable;
otherwise, NULL */ const upd_t* update, /*!< in: in the case of an update,
the update vector, otherwise NULL */
ulint cmpl_info, /*!< in: compiler info on secondary
index updates */ const rec_t* rec, /*!< in: case of an update or delete marking,therecordintheclustered
index; NULL if insert */ const rec_offs* offsets, /*!< in: rec_get_offsets(rec) */
roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the
undo log record */
MY_ATTRIBUTE((nonnull(1,2), warn_unused_result));
/** status bit used for trx_undo_prev_version_build() */
/** TRX_UNDO_PREV_IN_PURGE tells trx_undo_prev_version_build() that it isbeingcalledpurgeviewandwewouldliketogetthepurgerecord evenitisinthepurgeview(innormalcase,itwillreturnwithout
fetching the purge record) */ static constexpr ulint TRX_UNDO_PREV_IN_PURGE = 1;
/** This tells trx_undo_prev_version_build() to fetch the old value in
the undo log (which is the after image for an update) */ static constexpr ulint TRX_UNDO_GET_OLD_V_VALUE = 2;
/** indicate a call from row_undo_mod_sec_is_unsafe() */ static constexpr ulint TRX_UNDO_CHECK_PURGEABILITY = 4;
/** indicate a call from row_purge_is_unsafe() */ static constexpr ulint TRX_UNDO_CHECK_PURGE_PAGES = 8;
/** Build a previous version of a clustered index record. The caller mustholdalatchontheindexpageoftheclusteredindexrecord. @paramrecversionofaclusteredindexrecord @paramindexclusteredindex @paramoffsetsrec_get_offsets(rec,index) @paramheapmemoryheapfromwhichthememoryneededisallocated @paramold_verspreviousversion,orNULLifrecisthefirstinserted version,orifhistorydatahasbeendeleted(anerror), orifthepurgecouldhaveremovedtheversionthough ithasnotyetdoneso @parammtrmini-transaction @paramv_statusTRX_UNDO_PREV_IN_PURGE,... @paramv_heapmemoryheapusedtocreatevrowdtupleifitisnotyet created.Thisheapdiffsfrom"heap"aboveinthatitcouldbe prebuilt->old_vers_heapforselection @paramvrowvirtualcolumninfo,ifany @returnerrorcode @retvalDB_SUCCESSifpreviousversionwassuccessfullybuilt, orifitwasaninsertortheundorecordreferstothetablebeforerebuild
@retval DB_MISSING_HISTORY if the history is missing */
dberr_t trx_undo_prev_version_build(const rec_t *rec, dict_index_t *index,
rec_offs *offsets, mem_heap_t *heap,
rec_t **old_vers, mtr_t *mtr,
ulint v_status,
mem_heap_t *v_heap, dtuple_t **vrow);
/** Read from an undo log record a non-virtual column value. @paramptrpointertoremainingpartoftheundorecord @paramfieldstoredfield @paramlenlengthofthefield,orUNIV_SQL_NULL @paramorig_lenoriginallengthofthelocallystoredpart ofanexternallystoredcolumn,or0
@return remaining part of undo log record after reading these values */ const byte *trx_undo_rec_get_col_val(const byte *ptr, const byte **field,
uint32_t *len, uint32_t *orig_len);
/** Read virtual column value from undo log @param[in]tablethetable @param[in]ptrundologpointer @param[in,out]rowthedtupletofill
@param[in] in_purge whether this is called by purge */ void
trx_undo_read_v_cols( const dict_table_t* table, const byte* ptr,
dtuple_t* row, bool in_purge);
/** Read virtual column index from undo log if the undo log contains such info,andverifythecolumnisstillindexed,andoutputitsposition @param[in]tablethetable @param[in]ptrundologpointer @param[in]first_v_colifthisisthefirstvirtualcolumn,which hastheversionmarker @param[in,out]is_undo_loghisfunctionisusedtoparsebothundolog, andonlinelogforvirtualcolumns.So checktoseeifthisisundolog @param[out]field_nothecolumnnumber,orFIL_NULLifnotindexed
@return remaining part of undo log record after reading these values */ const byte*
trx_undo_read_v_idx( const dict_table_t* table, const byte* ptr, bool first_v_col, bool* is_undo_log,
uint32_t* field_no);
/* Types of an undo log record: these have to be smaller than 16, as the compilationinfomultipliedby16isORedtothisvalueinanundolog
record */
/** Undo log records for DDL operations
Note:specialrollbackandpurgetriggersexistforSYS_INDEXESrecords:
@see dict_drop_index_tree() */ enum trx_undo_ddl_type
{ /** RENAME TABLE (logging the old table name).
BecauseSYS_TABLEShasPRIMARYKEY(NAME),therow-levelundologrecords
for SYS_TABLES cannot be distinguished from DROP TABLE, CREATE TABLE. */
TRX_UNDO_RENAME_TABLE= 9, /** insert a metadata pseudo-record for instant ALTER TABLE */
TRX_UNDO_INSERT_METADATA= 10
};
/* DML operations */ #define TRX_UNDO_INSERT_REC 11/* fresh insert into clustered index */ #define TRX_UNDO_UPD_EXIST_REC 12/* update of a non-delete-marked
record */ #define TRX_UNDO_UPD_DEL_REC 13/* update of a delete marked record to anotdeletemarkedrecord;alsothe
fields of the record can change */ #define TRX_UNDO_DEL_MARK_REC 14/* delete marking of a record; fields
do not change */ /** Bulk insert operation. It is written only when the table is underexclusivelockandtheclusteredindexrootpagelatchisbeingheld, andtheclusteredindexisempty.Rollbackwillemptythetableand freetheleafsegmentofallindexes,re-createthenew
leaf segment and re-initialize the root page alone. */ #define TRX_UNDO_EMPTY 15
#define TRX_UNDO_CMPL_INFO_MULT 16U /* compilation info is multiplied by
this and ORed to the type above */ #define TRX_UNDO_UPD_EXTERN 128U /* This bit can be ORed to type_cmpl todenotethatweupdatedexternal storagefields:usedbypurgeto
free the external storage */
/** The search tuple corresponding to TRX_UNDO_INSERT_METADATA */ externconst dtuple_t trx_undo_metadata;
/** Read the table id from an undo log record. @param[in]recUndologrecord
@return table id stored as a part of undo log record */ inline table_id_t trx_undo_rec_get_table_id(const trx_undo_rec_t *rec)
{
rec+= 3;
mach_read_next_much_compressed(&rec); return mach_read_next_much_compressed(&rec);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.