📄 row0row.h
字号:
/******************************************************General row routines(c) 1996 Innobase OyCreated 4/20/1996 Heikki Tuuri*******************************************************/#ifndef row0row_h#define row0row_h#include "univ.i"#include "data0data.h"#include "dict0types.h"#include "trx0types.h"#include "que0types.h"#include "mtr0mtr.h" #include "rem0types.h"#include "read0types.h"#include "btr0types.h"/*************************************************************************Reads the trx id field from a clustered index record. */UNIV_INLINEdulintrow_get_rec_trx_id(/*===============*/ /* out: value of the field */ rec_t* rec, /* in: record */ dict_index_t* index, /* in: clustered index */ const ulint* offsets);/* in: rec_get_offsets(rec, index) *//*************************************************************************Reads the roll pointer field from a clustered index record. */UNIV_INLINEdulintrow_get_rec_roll_ptr(/*=================*/ /* out: value of the field */ rec_t* rec, /* in: record */ dict_index_t* index, /* in: clustered index */ const ulint* offsets);/* in: rec_get_offsets(rec, index) *//*************************************************************************Writes the trx id field to a clustered index record. */UNIV_INLINEvoidrow_set_rec_trx_id(/*===============*/ rec_t* rec, /* in: record */ dict_index_t* index, /* in: clustered index */ const ulint* offsets,/* in: rec_get_offsets(rec, index) */ dulint trx_id);/* in: value of the field *//*************************************************************************Sets the roll pointer field in a clustered index record. */UNIV_INLINEvoidrow_set_rec_roll_ptr(/*=================*/ rec_t* rec, /* in: record */ dict_index_t* index, /* in: clustered index */ const ulint* offsets,/* in: rec_get_offsets(rec, index) */ dulint roll_ptr);/* in: value of the field *//*********************************************************************When an insert to a table is performed, this function builds the entry whichhas to be inserted to an index on the table. */dtuple_t*row_build_index_entry(/*==================*/ /* out: index entry which should be inserted */ dtuple_t* row, /* in: row which should be inserted to the table */ dict_index_t* index, /* in: index on the table */ mem_heap_t* heap); /* in: memory heap from which the memory for the index entry is allocated *//***********************************************************************An inverse function to dict_row_build_index_entry. Builds a row from arecord in a clustered index. */dtuple_t*row_build(/*======*/ /* out, own: row built; see the NOTE below! */ ulint type, /* in: ROW_COPY_POINTERS, ROW_COPY_DATA, or ROW_COPY_ALSO_EXTERNALS, the two last copy also the data fields to heap as the first only places pointers to data fields on the index page, and thus is more efficient */ dict_index_t* index, /* in: clustered index */ rec_t* rec, /* in: record in the clustered index; NOTE: in the case ROW_COPY_POINTERS the data fields in the row will point directly into this record, therefore, the buffer page of this record must be at least s-latched and the latch held as long as the row dtuple is used! */ const ulint* offsets,/* in: rec_get_offsets(rec, index) or NULL, in which case this function will invoke rec_get_offsets() */ mem_heap_t* heap); /* in: memory heap from which the memory needed is allocated *//***********************************************************************Converts an index record to a typed data tuple. */dtuple_t*row_rec_to_index_entry(/*===================*/ /* out, own: index entry built; see the NOTE below! */ ulint type, /* in: ROW_COPY_DATA, or ROW_COPY_POINTERS: the former copies also the data fields to heap as the latter only places pointers to data fields on the index page */ dict_index_t* index, /* in: index */ rec_t* rec, /* in: record in the index; NOTE: in the case ROW_COPY_POINTERS the data fields in the row will point directly into this record, therefore, the buffer page of this record must be at least s-latched and the latch held as long as the dtuple is used! */ mem_heap_t* heap); /* in: memory heap from which the memory needed is allocated *//***********************************************************************Builds from a secondary index record a row reference with which we cansearch the clustered index record. */dtuple_t*row_build_row_ref(/*==============*/ /* out, own: row reference built; see the NOTE below! */ ulint type, /* in: ROW_COPY_DATA, or ROW_COPY_POINTERS: the former copies also the data fields to heap, whereas the latter only places pointers to data fields on the index page */ dict_index_t* index, /* in: index */ rec_t* rec, /* in: record in the index; NOTE: in the case ROW_COPY_POINTERS the data fields in the row will point directly into this record, therefore, the buffer page of this record must be at least s-latched and the latch held as long as the row reference is used! */ mem_heap_t* heap); /* in: memory heap from which the memory needed is allocated *//***********************************************************************Builds from a secondary index record a row reference with which we cansearch the clustered index record. */voidrow_build_row_ref_in_tuple(/*=======================*/ dtuple_t* ref, /* in/out: row reference built; see the NOTE below! */ dict_index_t* index, /* in: index */ rec_t* rec, /* in: record in the index; NOTE: the data fields in ref will point directly into this record, therefore, the buffer page of this record must be at least s-latched and the latch held as long as the row reference is used! */ trx_t* trx); /* in: transaction *//***********************************************************************From a row build a row reference with which we can search the clusteredindex record. */voidrow_build_row_ref_from_row(/*=======================*/ dtuple_t* ref, /* in/out: row reference built; see the NOTE below! ref must have the right number of fields! */ dict_table_t* table, /* in: table */ dtuple_t* row); /* in: row NOTE: the data fields in ref will point directly into data of this row *//***********************************************************************Builds from a secondary index record a row reference with which we cansearch the clustered index record. */UNIV_INLINEvoidrow_build_row_ref_fast(/*===================*/ dtuple_t* ref, /* in: typed data tuple where the reference is built */ const ulint* map, /* in: array of field numbers in rec telling how ref should be built from the fields of rec */ rec_t* rec, /* in: record in the index; must be preserved while ref is used, as we do not copy field values to heap */ const ulint* offsets);/* in: array returned by rec_get_offsets() *//*******************************************************************Searches the clustered index record for a row, if we have the rowreference. */iboolrow_search_on_row_ref(/*==================*/ /* out: TRUE if found */ btr_pcur_t* pcur, /* in/out: persistent cursor, which must be closed by the caller */ ulint mode, /* in: BTR_MODIFY_LEAF, ... */ dict_table_t* table, /* in: table */ dtuple_t* ref, /* in: row reference */ mtr_t* mtr); /* in: mtr *//*************************************************************************Fetches the clustered index record for a secondary index record. The latcheson the secondary index record are preserved. */rec_t*row_get_clust_rec(/*==============*/ /* out: record or NULL, if no record found */ ulint mode, /* in: BTR_MODIFY_LEAF, ... */ rec_t* rec, /* in: record in a secondary index */ dict_index_t* index, /* in: secondary index */ dict_index_t** clust_index,/* out: clustered index */ mtr_t* mtr); /* in: mtr *//*******************************************************************Searches an index record. */iboolrow_search_index_entry(/*===================*/ /* out: TRUE if found */ dict_index_t* index, /* in: index */ dtuple_t* entry, /* in: index entry */ ulint mode, /* in: BTR_MODIFY_LEAF, ... */ btr_pcur_t* pcur, /* in/out: persistent cursor, which must be closed by the caller */ mtr_t* mtr); /* in: mtr */ #define ROW_COPY_DATA 1#define ROW_COPY_POINTERS 2#define ROW_COPY_ALSO_EXTERNALS 3/* The allowed latching order of index records is the following:(1) a secondary index record ->(2) the clustered index record ->(3) rollback segment data for the clustered index record.No new latches may be obtained while the kernel mutex is reserved.However, the kernel mutex can be reserved while latches are owned. */#ifndef UNIV_NONINL#include "row0row.ic"#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -