![]()  | 
  
    MySQL 8.0.44
    
   Source Code Documentation 
   | 
 
Index page routines. More...
#include "mach0data.h"#include "log0recv.h"#include "rem0cmp.h"#include "mtr0log.h"#include "page0zip.h"Functions | |
| static page_t * | page_align (const void *ptr) | 
| Gets the start of a page.  More... | |
| static ulint | page_offset (const void *ptr) | 
| Gets the offset within a page.  More... | |
| static trx_id_t | page_get_max_trx_id (const page_t *page) | 
| Returns the max trx id field value.  More... | |
| static void | page_update_max_trx_id (buf_block_t *block, page_zip_des_t *page_zip, trx_id_t trx_id, mtr_t *mtr) | 
| Sets the max trx id field value if trx_id is bigger than the previous value.  More... | |
| static node_seq_t | page_get_ssn_id (const page_t *page) | 
| Returns the RTREE SPLIT SEQUENCE NUMBER (FIL_RTREE_SPLIT_SEQ_NUM).  More... | |
| static void | page_set_ssn_id (buf_block_t *block, page_zip_des_t *page_zip, node_seq_t ssn_id, mtr_t *mtr) | 
| Sets the RTREE SPLIT SEQUENCE NUMBER field value.  More... | |
| static void | page_header_set_field (page_t *page, page_zip_des_t *page_zip, ulint field, ulint val) | 
| Sets the given header field.  More... | |
| static ulint | page_header_get_offs (const page_t *page, ulint field) | 
| static void | page_header_set_ptr (page_t *page, page_zip_des_t *page_zip, ulint field, const byte *ptr) | 
| Sets the pointer stored in the given header field.  More... | |
| static void | page_header_reset_last_insert (page_t *page, page_zip_des_t *page_zip, mtr_t *mtr) | 
| Resets the last insert info field in the page header.  More... | |
| static bool | page_is_comp (const page_t *page) | 
| Determine whether the page is in new-style compact format.  More... | |
| static bool | page_rec_is_comp (const rec_t *rec) | 
| true if the record is on a page in compact format.  More... | |
| static ulint | page_rec_get_heap_no (const rec_t *rec) | 
| Returns the heap number of a record.  More... | |
| static bool | page_is_leaf (const page_t *page) | 
| Determine whether the page is a B-tree leaf.  More... | |
| static bool | page_is_empty (const page_t *page) | 
| Determine whether the page is empty.  More... | |
| static bool | page_is_root (const page_t *page) | 
| Determine whether a page is an index root page.  More... | |
| static bool | page_has_garbage (const page_t *page) | 
| Determine whether the page contains garbage.  More... | |
| static ulint | page_get_infimum_offset (const page_t *page) | 
| Gets the offset of the first record on the page.  More... | |
| static ulint | page_get_supremum_offset (const page_t *page) | 
| Gets the offset of the last record on the page.  More... | |
| static bool | page_rec_is_user_rec_low (ulint offset) | 
| true if the record is a user record on the page.  More... | |
| static bool | page_rec_is_supremum_low (ulint offset) | 
| true if the record is the supremum record on a page.  More... | |
| static bool | page_rec_is_infimum_low (ulint offset) | 
| true if the record is the infimum record on a page.  More... | |
| static bool | page_rec_is_user_rec (const rec_t *rec) | 
| true if the record is a user record on the page.  More... | |
| static bool | page_rec_is_supremum (const rec_t *rec) | 
| true if the record is the supremum record on a page.  More... | |
| static bool | page_rec_is_infimum (const rec_t *rec) | 
| true if the record is the infimum record on a page.  More... | |
| static bool | page_rec_is_first (const rec_t *rec, const page_t *page) | 
| static bool | page_rec_is_second (const rec_t *rec, const page_t *page) | 
| static bool | page_rec_is_last (const rec_t *rec, const page_t *page) | 
| static bool | page_rec_distance_is_at_most (const rec_t *left_rec, const rec_t *right_rec, ulint val) | 
| static bool | page_rec_is_second_last (const rec_t *rec, const page_t *page) | 
| static rec_t * | page_rec_get_nth (page_t *page, ulint nth) | 
| Returns the nth record of the record list.  More... | |
| static rec_t * | page_get_middle_rec (page_t *page) | 
| Returns the middle record of the records on the page.  More... | |
| static page_no_t | page_get_page_no (const page_t *page) | 
| Gets the page number.  More... | |
| static space_id_t | page_get_space_id (const page_t *page) | 
| Gets the tablespace identifier.  More... | |
| static page_id_t | page_get_page_id (const page_t *page) | 
| static ulint | page_get_n_recs (const page_t *page) | 
| Gets the number of user records on page (infimum and supremum records are not user records).  More... | |
| static ulint | page_dir_get_n_slots (const page_t *page) | 
| Gets the number of dir slots in directory.  More... | |
| static void | page_dir_set_n_slots (page_t *page, page_zip_des_t *page_zip, ulint n_slots) | 
| Sets the number of dir slots in directory.  More... | |
| static void | page_dir_set_n_heap (page_t *page, page_zip_des_t *page_zip, ulint n_heap) | 
| Sets the number of records in the heap.  More... | |
| static page_dir_slot_t * | page_dir_get_nth_slot (const page_t *page, ulint n) | 
| Gets pointer to nth directory slot.  More... | |
| static bool | page_rec_check (const rec_t *rec) | 
| Used to check the consistency of a record on a page.  More... | |
| static const rec_t * | page_dir_slot_get_rec (const page_dir_slot_t *slot) | 
| Gets the record pointed to by a directory slot.  More... | |
| static void | page_dir_slot_set_rec (page_dir_slot_t *slot, rec_t *rec) | 
| This is used to set the record offset in a directory slot.  More... | |
| static ulint | page_dir_slot_get_n_owned (const page_dir_slot_t *slot) | 
| Gets the number of records owned by a directory slot.  More... | |
| static void | page_dir_slot_set_n_owned (page_dir_slot_t *slot, page_zip_des_t *page_zip, ulint n) | 
| This is used to set the owned records field of a directory slot.  More... | |
| static ulint | page_dir_calc_reserved_space (ulint n_recs) | 
| Calculates the space reserved for directory slots of a given number of records.  More... | |
| static const rec_t * | page_rec_get_next_low (const rec_t *rec, ulint comp) | 
| Gets the pointer to the next record on the page.  More... | |
| static rec_t * | page_rec_get_next (rec_t *rec) | 
| Gets the pointer to the next record on the page.  More... | |
| static const rec_t * | page_rec_get_next_const (const rec_t *rec) | 
| Gets the pointer to the next record on the page.  More... | |
| static const rec_t * | page_rec_get_next_non_del_marked (const rec_t *rec) | 
| Gets the pointer to the next non delete-marked record on the page.  More... | |
| static void | page_rec_set_next (rec_t *rec, const rec_t *next) | 
| Sets the pointer to the next record on the page.  More... | |
| static const rec_t * | page_rec_get_prev_const (const rec_t *rec) | 
| Gets the pointer to the previous record.  More... | |
| static rec_t * | page_rec_get_prev (rec_t *rec) | 
| Gets the pointer to the previous record.  More... | |
| static rec_t * | page_rec_find_owner_rec (rec_t *rec) | 
| Looks for the record which owns the given record.  More... | |
| static ulint | page_rec_get_base_extra_size (const rec_t *rec) | 
| Returns the base extra size of a physical record.  More... | |
| static ulint | page_get_data_size (const page_t *page) | 
| Returns the sum of the sizes of the records in the record list, excluding the infimum and supremum records.  More... | |
| static void | page_mem_alloc_free (page_t *page, page_zip_des_t *page_zip, rec_t *next_rec, ulint need) | 
| Allocates a block of memory from the free list of an index page.  More... | |
| static ulint | page_get_free_space_of_empty (bool comp) | 
| Calculates free space if a page is emptied.  More... | |
| static ulint | page_get_max_insert_size (const page_t *page, ulint n_recs) | 
| Each user record on a page, and also the deleted user records in the heap takes its size plus the fraction of the dir cell size / PAGE_DIR_SLOT_MIN_N_OWNED bytes for it.  More... | |
| static ulint | page_get_max_insert_size_after_reorganize (const page_t *page, ulint n_recs) | 
| Returns the maximum combined size of records which can be inserted on top of the record heap if a page is first reorganized.  More... | |
| static void | page_mem_free (page_t *page, page_zip_des_t *page_zip, rec_t *rec, const dict_index_t *index, const ulint *offsets) | 
| Puts a record to free list.  More... | |
| ulong | page_size_validate (ulong page_size) | 
| Check that a page_size is correct for InnoDB.  More... | |
Index page routines.
Created 2/2/1994 Heikki Tuuri
      
  | 
  inlinestatic | 
Gets the start of a page.
| ptr | in: pointer to page frame | 
Calculates the space reserved for directory slots of a given number of records.
The exact value is a fraction number n * PAGE_DIR_SLOT_SIZE / PAGE_DIR_SLOT_MIN_N_OWNED, and it is rounded upwards to an integer.
| n_recs | in: number of records | 
Gets the number of dir slots in directory.
| page | in: index page | 
      
  | 
  inlinestatic | 
Gets pointer to nth directory slot.
| page | in: index page | 
| n | in: position | 
      
  | 
  inlinestatic | 
Sets the number of records in the heap.
| page | in/out: index page | 
| page_zip | in/out: compressed page whose uncompressed part will be updated, or NULL. Note that the size of the dense page directory in the compressed page trailer is n_heap * PAGE_ZIP_DIR_SLOT_SIZE. | 
| n_heap | in: number of records | 
      
  | 
  inlinestatic | 
Sets the number of dir slots in directory.
| page | in/out: page | 
| page_zip | in/out: compressed page whose uncompressed part will be updated, or NULL | 
| n_slots | in: number of slots | 
      
  | 
  inlinestatic | 
Gets the number of records owned by a directory slot.
| slot | in: page directory slot | 
      
  | 
  inlinestatic | 
Gets the record pointed to by a directory slot.
| slot | in: directory slot | 
      
  | 
  inlinestatic | 
This is used to set the owned records field of a directory slot.
| slot | in/out: directory slot | 
| page_zip | in/out: compressed page, or NULL | 
| n | in: number of records owned by the slot | 
      
  | 
  inlinestatic | 
This is used to set the record offset in a directory slot.
| slot | in: directory slot | 
| rec | in: record on the page | 
Returns the sum of the sizes of the records in the record list, excluding the infimum and supremum records.
| page | in: index page | 
      
  | 
  inlinestatic | 
Calculates free space if a page is emptied.
| comp | in: nonzero=compact page layout | 
Gets the offset of the first record on the page.
| page | in: page which must have record(s) | 
Each user record on a page, and also the deleted user records in the heap takes its size plus the fraction of the dir cell size / PAGE_DIR_SLOT_MIN_N_OWNED bytes for it.
If the sum of these exceeds the value of page_get_free_space_of_empty, the insert is impossible, otherwise it is allowed. This function returns the maximum combined size of records which can be inserted on top of the record heap.
| page | in: index page | 
| n_recs | in: number of records | 
      
  | 
  inlinestatic | 
Returns the maximum combined size of records which can be inserted on top of the record heap if a page is first reorganized.
| page | in: index page | 
| n_recs | in: number of records | 
Returns the max trx id field value.
| page | in: page | 
Returns the middle record of the records on the page.
If there is an even number of records in the list, returns the first record of the upper half-list.
| page | in: page | 
Gets the number of user records on page (infimum and supremum records are not user records).
| page | in: index page | 
Gets the page number.
| page | in: page | 
      
  | 
  inlinestatic | 
Gets the tablespace identifier.
| page | in: page | 
      
  | 
  inlinestatic | 
Returns the RTREE SPLIT SEQUENCE NUMBER (FIL_RTREE_SPLIT_SEQ_NUM).
| [in] | page | page | 
Gets the offset of the last record on the page.
| page | in: page which must have record(s) | 
      
  | 
  inlinestatic | 
Determine whether the page contains garbage.
| page | in: page | 
      
  | 
  inlinestatic | 
Resets the last insert info field in the page header.
Writes to mlog about this operation.
| page | in/out: page | 
| page_zip | in/out: compressed page whose uncompressed part will be updated, or NULL | 
| mtr | in: mtr | 
      
  | 
  inlinestatic | 
Sets the given header field.
| page | in/out: page | 
| page_zip | in/out: compressed page whose uncompressed part will be updated, or NULL | 
| field | in: PAGE_N_DIR_SLOTS, ... | 
| val | in: value | 
      
  | 
  inlinestatic | 
Sets the pointer stored in the given header field.
| page | in: page | 
| page_zip | in/out: compressed page whose uncompressed part will be updated, or NULL | 
| field | in: PAGE_FREE, ... | 
| ptr | in: pointer or NULL | 
      
  | 
  inlinestatic | 
Determine whether the page is in new-style compact format.
| page | in: index page | 
      
  | 
  inlinestatic | 
Determine whether the page is empty.
| page | in: page | 
      
  | 
  inlinestatic | 
Determine whether the page is a B-tree leaf.
| page | in: page | 
      
  | 
  inlinestatic | 
Determine whether a page is an index root page.
| [in] | page | page frame | 
      
  | 
  inlinestatic | 
Allocates a block of memory from the free list of an index page.
| page | in/out: index page | 
| page_zip | in/out: compressed page with enough space available for inserting the record, or NULL | 
| next_rec | in: pointer to the new head of the free record list | 
| need | in: number of bytes allocated | 
      
  | 
  inlinestatic | 
Puts a record to free list.
| page | in/out: index page | 
| page_zip | in/out: compressed page, or NULL | 
| rec | in: pointer to the (origin of) record | 
| index | in: index of rec | 
| offsets | in: array returned by rec_get_offsets() | 
      
  | 
  inlinestatic | 
Gets the offset within a page.
| ptr | in: pointer to page frame | 
      
  | 
  inlinestatic | 
Used to check the consistency of a record on a page.
| rec | in: record | 
      
  | 
  inlinestatic | 
Looks for the record which owns the given record.
| rec | in: the physical record | 
Returns the base extra size of a physical record.
This is the size of the fixed header, independent of the record size.
| rec | in: physical record | 
Returns the heap number of a record.
| rec | in: the physical record | 
Gets the pointer to the next record on the page.
| rec | in: pointer to record | 
Gets the pointer to the next record on the page.
| rec | in: pointer to record | 
Gets the pointer to the next record on the page.
| rec | in: pointer to record | 
| comp | in: nonzero=compact page layout | 
Gets the pointer to the next non delete-marked record on the page.
If all subsequent records are delete-marked, then this function will return the supremum record.
| rec | in: pointer to record | 
Returns the nth record of the record list.
This is the inverse function of page_rec_get_n_recs_before().
| page | in: page | 
| nth | in: nth record | 
Gets the pointer to the previous record.
| rec | in: pointer to record, must not be page infimum | 
Gets the pointer to the previous record.
| rec | in: pointer to record, must not be page infimum | 
      
  | 
  inlinestatic | 
true if the record is on a page in compact format.
| rec | in: record | 
      
  | 
  inlinestatic | 
true if the record is the infimum record on a page.
| rec | in: record | 
      
  | 
  inlinestatic | 
true if the record is the infimum record on a page.
| offset | in: record offset on page | 
      
  | 
  inlinestatic | 
true if the record is the supremum record on a page.
| rec | in: record | 
      
  | 
  inlinestatic | 
true if the record is the supremum record on a page.
| offset | in: record offset on page | 
      
  | 
  inlinestatic | 
true if the record is a user record on the page.
| rec | in: record | 
      
  | 
  inlinestatic | 
true if the record is a user record on the page.
| offset | in: record offset on page | 
Sets the pointer to the next record on the page.
| rec | in: pointer to record, must not be page supremum | 
| next | in: pointer to next record, must not be page infimum | 
      
  | 
  inlinestatic | 
Sets the RTREE SPLIT SEQUENCE NUMBER field value.
| [in,out] | block | Page | 
| [in,out] | page_zip | Compressed page whose uncompressed part will be updated, or NULL | 
| [in] | ssn_id | Transaction id | 
| [in,out] | mtr | Mini-transaction | 
      
  | 
  inline | 
Check that a page_size is correct for InnoDB.
If correct, set the associated page_size_shift which is the power of 2 for this page size.
| [in] | page_size | Page Size to evaluate | 
      
  | 
  inlinestatic | 
Sets the max trx id field value if trx_id is bigger than the previous value.
| block | in/out: page | 
| page_zip | in/out: compressed page whose uncompressed part will be updated, or NULL | 
| trx_id | in: transaction id | 
| mtr | in/out: mini-transaction |