📄 page0page.h
字号:
page_rec_set_next(/*==============*/ rec_t* rec, /* in: pointer to record, must not be page supremum */ rec_t* next); /* in: pointer to next record, must not be page infimum *//****************************************************************Gets the pointer to the previous record. */UNIV_INLINErec_t*page_rec_get_prev(/*==============*/ /* out: pointer to previous record */ rec_t* rec); /* in: pointer to record, must not be page infimum *//****************************************************************TRUE if the record is a user record on the page. */UNIV_INLINEiboolpage_rec_is_user_rec_low(/*=====================*/ /* out: TRUE if a user record */ ulint offset);/* in: record offset on page *//****************************************************************TRUE if the record is the supremum record on a page. */UNIV_INLINEiboolpage_rec_is_supremum_low(/*=====================*/ /* out: TRUE if the supremum record */ ulint offset);/* in: record offset on page *//****************************************************************TRUE if the record is the infimum record on a page. */UNIV_INLINEiboolpage_rec_is_infimum_low(/*=====================*/ /* out: TRUE if the infimum record */ ulint offset);/* in: record offset on page *//****************************************************************TRUE if the record is a user record on the page. */UNIV_INLINEiboolpage_rec_is_user_rec(/*=================*/ /* out: TRUE if a user record */ const rec_t* rec); /* in: record *//****************************************************************TRUE if the record is the supremum record on a page. */UNIV_INLINEiboolpage_rec_is_supremum(/*=================*/ /* out: TRUE if the supremum record */ const rec_t* rec); /* in: record *//****************************************************************TRUE if the record is the infimum record on a page. */UNIV_INLINEiboolpage_rec_is_infimum(/*================*/ /* out: TRUE if the infimum record */ const rec_t* rec); /* in: record *//*******************************************************************Looks for the record which owns the given record. */UNIV_INLINErec_t*page_rec_find_owner_rec(/*====================*/ /* out: the owner record */ rec_t* rec); /* in: the physical record *//***************************************************************************This is a low-level operation which is used in a database index creationto update the page number of a created B-tree to a data dictionaryrecord. */voidpage_rec_write_index_page_no(/*=========================*/ rec_t* rec, /* in: record to update */ ulint i, /* in: index of the field to update */ ulint page_no,/* in: value to write */ mtr_t* mtr); /* in: mtr *//****************************************************************Returns the maximum combined size of records which can be inserted on topof record heap. */UNIV_INLINEulintpage_get_max_insert_size(/*=====================*/ /* out: maximum combined size for inserted records */ page_t* page, /* in: index page */ ulint n_recs); /* in: number of records *//****************************************************************Returns the maximum combined size of records which can be inserted on topof record heap if page is first reorganized. */UNIV_INLINEulintpage_get_max_insert_size_after_reorganize(/*======================================*/ /* out: maximum combined size for inserted records */ page_t* page, /* in: index page */ ulint n_recs);/* in: number of records *//*****************************************************************Calculates free space if a page is emptied. */UNIV_INLINEulintpage_get_free_space_of_empty(/*=========================*/ /* out: free space */ ulint comp) /* in: nonzero=compact page format */ __attribute__((const));/****************************************************************Returns the sum of the sizes of the records in the record listexcluding the infimum and supremum records. */UNIV_INLINEulintpage_get_data_size(/*===============*/ /* out: data in bytes */ page_t* page); /* in: index page *//****************************************************************Allocates a block of memory from an index page. */byte*page_mem_alloc(/*===========*/ /* out: pointer to start of allocated buffer, or NULL if allocation fails */ page_t* page, /* in: index page */ ulint need, /* in: number of bytes needed */ dict_index_t* index, /* in: record descriptor */ ulint* heap_no);/* out: this contains the heap number of the allocated record if allocation succeeds *//****************************************************************Puts a record to free list. */UNIV_INLINEvoidpage_mem_free(/*==========*/ page_t* page, /* in: index page */ rec_t* rec, /* in: pointer to the (origin of) record */ const ulint* offsets);/* in: array returned by rec_get_offsets() *//**************************************************************The index page creation function. */page_t* page_create(/*========*/ /* out: pointer to the page */ buf_frame_t* frame, /* in: a buffer frame where the page is created */ mtr_t* mtr, /* in: mini-transaction handle */ ulint comp); /* in: nonzero=compact page format *//*****************************************************************Differs from page_copy_rec_list_end, because this function does nottouch the lock table and max trx id on page. */voidpage_copy_rec_list_end_no_locks(/*============================*/ page_t* new_page, /* in: index page to copy to */ page_t* page, /* in: index page */ rec_t* rec, /* in: record on page */ dict_index_t* index, /* in: record descriptor */ mtr_t* mtr); /* in: mtr *//*****************************************************************Copies records from page to new_page, from the given record onward,including that record. Infimum and supremum records are not copied.The records are copied to the start of the record list on new_page. */voidpage_copy_rec_list_end(/*===================*/ page_t* new_page, /* in: index page to copy to */ page_t* page, /* in: index page */ rec_t* rec, /* in: record on page */ dict_index_t* index, /* in: record descriptor */ mtr_t* mtr); /* in: mtr *//*****************************************************************Copies records from page to new_page, up to the given record, NOTincluding that record. Infimum and supremum records are not copied.The records are copied to the end of the record list on new_page. */voidpage_copy_rec_list_start(/*=====================*/ page_t* new_page, /* in: index page to copy to */ page_t* page, /* in: index page */ rec_t* rec, /* in: record on page */ dict_index_t* index, /* in: record descriptor */ mtr_t* mtr); /* in: mtr *//*****************************************************************Deletes records from a page from a given record onward, including that record.The infimum and supremum records are not deleted. */voidpage_delete_rec_list_end(/*=====================*/ page_t* page, /* in: index page */ rec_t* rec, /* in: record on page */ dict_index_t* index, /* in: record descriptor */ ulint n_recs, /* in: number of records to delete, or ULINT_UNDEFINED if not known */ ulint size, /* in: the sum of the sizes of the records in the end of the chain to delete, or ULINT_UNDEFINED if not known */ mtr_t* mtr); /* in: mtr *//*****************************************************************Deletes records from page, up to the given record, NOT includingthat record. Infimum and supremum records are not deleted. */voidpage_delete_rec_list_start(/*=======================*/ page_t* page, /* in: index page */ rec_t* rec, /* in: record on page */ dict_index_t* index, /* in: record descriptor */ mtr_t* mtr); /* in: mtr *//*****************************************************************Moves record list end to another page. Moved records includesplit_rec. */voidpage_move_rec_list_end(/*===================*/ page_t* new_page, /* in: index page where to move */ page_t* page, /* in: index page */ rec_t* split_rec, /* in: first record to move */ dict_index_t* index, /* in: record descriptor */ mtr_t* mtr); /* in: mtr *//*****************************************************************Moves record list start to another page. Moved records do not includesplit_rec. */voidpage_move_rec_list_start(/*=====================*/ page_t* new_page, /* in: index page where to move */ page_t* page, /* in: index page */ rec_t* split_rec, /* in: first record not to move */ dict_index_t* index, /* in: record descriptor */ mtr_t* mtr); /* in: mtr *//********************************************************************Splits a directory slot which owns too many records. */voidpage_dir_split_slot(/*================*/ page_t* page, /* in: the index page in question */ ulint slot_no); /* in: the directory slot *//*****************************************************************Tries to balance the given directory slot with too few recordswith the upper neighbor, so that there are at least the minimum number of records owned by the slot; this may result in the merging of two slots. */voidpage_dir_balance_slot(/*==================*/ page_t* page, /* in: index page */ ulint slot_no); /* in: the directory slot *//**************************************************************Parses a log record of a record list end or start deletion. */byte*page_parse_delete_rec_list(/*=======================*/ /* out: end of log record or NULL */ byte type, /* in: MLOG_LIST_END_DELETE, MLOG_LIST_START_DELETE, MLOG_COMP_LIST_END_DELETE or MLOG_COMP_LIST_START_DELETE */ byte* ptr, /* in: buffer */ byte* end_ptr,/* in: buffer end */ dict_index_t* index, /* in: record descriptor */ page_t* page, /* in: page or NULL */ mtr_t* mtr); /* in: mtr or NULL *//***************************************************************Parses a redo log record of creating a page. */byte*page_parse_create(/*==============*/ /* out: end of log record or NULL */ byte* ptr, /* in: buffer */ byte* end_ptr,/* in: buffer end */ ulint comp, /* in: nonzero=compact page format */ page_t* page, /* in: page or NULL */ mtr_t* mtr); /* in: mtr or NULL *//****************************************************************Prints record contents including the data relevant only inthe index page context. */ voidpage_rec_print(/*===========*/ rec_t* rec, /* in: physical record */ const ulint* offsets);/* in: record descriptor *//*******************************************************************This is used to print the contents of the directory fordebugging purposes. */voidpage_dir_print(/*===========*/ page_t* page, /* in: index page */ ulint pr_n); /* in: print n first and n last entries *//*******************************************************************This is used to print the contents of the page record list fordebugging purposes. */voidpage_print_list(/*============*/ page_t* page, /* in: index page */ dict_index_t* index, /* in: dictionary index of the page */ ulint pr_n); /* in: print n first and n last entries *//*******************************************************************Prints the info in a page header. */voidpage_header_print(/*==============*/ page_t* page);/*******************************************************************This is used to print the contents of the page fordebugging purposes. */voidpage_print(/*======*/ page_t* page, /* in: index page */ dict_index_t* index, /* in: dictionary index of the page */ ulint dn, /* in: print dn first and last entries in directory */ ulint rn); /* in: print rn first and last records in directory *//*******************************************************************The following is used to validate a record on a page. This functiondiffers from rec_validate as it can also check the n_owned field andthe heap_no field. */iboolpage_rec_validate(/*==============*/ /* out: TRUE if ok */ rec_t* rec, /* in: physical record */ const ulint* offsets);/* in: array returned by rec_get_offsets() *//*******************************************************************Checks that the first directory slot points to the infimum record andthe last to the supremum. This function is intended to track if thebug fixed in 4.0.14 has caused corruption to users' databases. */voidpage_check_dir(/*===========*/ page_t* page); /* in: index page *//*******************************************************************This function checks the consistency of an index page when we do notknow the index. This is also resilient so that this should never crasheven if the page is total garbage. */iboolpage_simple_validate(/*=================*/ /* out: TRUE if ok */ page_t* page); /* in: index page *//*******************************************************************This function checks the consistency of an index page. */iboolpage_validate(/*==========*/ /* out: TRUE if ok */ page_t* page, /* in: index page */ dict_index_t* index); /* in: data dictionary index containing the page record type definition *//*******************************************************************Looks in the page record list for a record with the given heap number. */rec_t*page_find_rec_with_heap_no(/*=======================*/ /* out: record, NULL if not found */ page_t* page, /* in: index page */ ulint heap_no);/* in: heap number */#ifdef UNIV_MATERIALIZE#undef UNIV_INLINE#define UNIV_INLINE UNIV_INLINE_ORIGINAL#endif#ifndef UNIV_NONINL#include "page0page.ic"#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -