![]() |
MySQL 9.4.0
Source Code Documentation
|
The fragment page. More...
#include <lob0impl.h>
Public Member Functions | |
| z_frag_page_t (buf_block_t *block, mtr_t *mtr, dict_index_t *index) | |
| Constructor. More... | |
| z_frag_page_t (mtr_t *mtr, dict_index_t *index) | |
| Constructor. More... | |
| z_frag_page_t (buf_block_t *block) | |
| Constructor. More... | |
| void | set_space_id_no_redo (space_id_t space_id) |
| Write the space identifier to the page header, without generating redo log records. More... | |
| z_frag_entry_t | get_frag_entry_x () |
| z_frag_entry_t | get_frag_entry_s () |
| void | update_frag_entry () |
| void | set_version_0 () |
| flst_node_t * | addr2ptr_x (fil_addr_t &addr) |
| flst_node_t * | addr2ptr_s (fil_addr_t &addr) |
| void | set_frag_entry (const fil_addr_t &addr) const |
| fil_addr_t | get_frag_entry () const |
| Obtain the file address of the fragment entry that denotes the current fragment page. More... | |
| void | set_frag_entry_null () const |
| ulint | get_n_dir_entries () const |
| void | set_n_dir_entries (ulint n) const |
| bool | is_border_frag (const frag_node_t &node) const |
| byte * | slots_end_ptr () const |
| paddr_t | frag_id_to_addr (ulint frag_id) const |
| ulint | get_nth_dir_entry (ulint frag_id) |
| void | set_nth_dir_entry (ulint frag_id, paddr_t val) |
| ulint | init_last_dir_entry () |
| void | incr_n_dir_entries () const |
| void | decr_n_dir_entries () const |
| ulint | get_page_size () const |
| ulint | space_used_by_dir () const |
| ulint | locate_free_slot () |
| ulint | alloc_frag_id () |
| Allocate a fragment id. More... | |
| std::ostream & | print_frag_id (std::ostream &out) |
| ulint | alloc_dir_entry () |
| Grow the frag directory by one entry. More... | |
| void | set_page_next (page_no_t page_no) |
| Set the next page. More... | |
| void | set_page_prev (page_no_t page_no) |
| Set the prev page. More... | |
| void | set_page_prev (page_no_t page_no, mtr_t *mtr) |
| Set the prev page. More... | |
| page_no_t | get_next_page_no () const |
| Get the next page number. More... | |
| page_no_t | get_prev_page_no (mtr_t *mtr) const |
| Get the prev page number (FIL_PAGE_PREV). More... | |
| page_no_t | get_prev_page_no () const |
| Get the prev page number. More... | |
| buf_block_t * | alloc (z_first_page_t &first, page_no_t hint, bool bulk) |
| Allocate the fragment page. More... | |
| void | dealloc_with_entry (z_first_page_t &first, mtr_t *alloc_mtr) |
| Free the fragment page along with its entry. More... | |
| void | dealloc () |
| Free the fragment page. More... | |
| buf_block_t * | load_x (page_no_t page_no) |
| void | merge_free_frags () |
| void | merge_free_frags (frag_node_t &frag) |
| bool | validate_lists () const |
| void | insert_into_free_list (frag_node_t &frag) |
| void | insert_into_frag_list (frag_node_t &frag) |
| Insert the given fragment node into the fragment list. More... | |
| void | split_free_frag (frag_node_t &free_frag, ulint size) |
| Split one free fragment into two. More... | |
| frag_node_t | get_frag_node (frag_id_t id) const |
| void | dealloc_fragment (ulint frag_id) |
| frag_id_t | alloc_fragment (ulint size, z_frag_entry_t &entry) |
| Allocate a fragment with the given payload. More... | |
| plist_base_node_t | free_list () const |
| plist_base_node_t | frag_list () const |
| void | set_page_type () |
| page_type_t | get_page_type () const |
| const char * | get_page_type_str () const |
| ulint | payload () |
| The maximum free space available in a fragment page. More... | |
| page_no_t | get_page_no () const |
| Get the frag page number. More... | |
| byte * | frame () const |
| std::ostream & | print (std::ostream &out) const |
| ulint | get_total_stored_data () const |
| Get the total amount of stored data in this page. More... | |
| ulint | get_total_free_len () const |
| Get the total cumulative free space in this page. More... | |
| ulint | get_big_free_len () const |
| Get the big free space in this page. More... | |
| ulint | get_n_frags () const |
| Get the number of fragments in this frag page. More... | |
| std::ostream & | print_frags_in_order (std::ostream &out) const |
| std::ostream & | print_free_list (std::ostream &out) const |
| std::ostream & | print_frag_list (std::ostream &out) const |
| std::ostream & | print_page_dir (std::ostream &out) const |
| void | set_mtr (mtr_t *mtr) |
| void | set_index (dict_index_t *index) |
| void | set_block_null () |
| bool | is_last_frag (const frag_node_t &node) const |
| Determine if the given fragment node is the last fragment node adjacent to the directory. More... | |
Static Public Member Functions | |
| static ulint | max_payload (dict_index_t *index) |
| The maximum free space available in a fragment page. More... | |
| static bool | can_data_fit (dict_index_t *index, ulint data_size) |
| Determine if the given length of data can fit into a fragment page. More... | |
Static Public Attributes | |
| static const ulint | OFFSET_VERSION = FIL_PAGE_DATA |
| Version information. More... | |
| static const ulint | OFFSET_FRAG_ENTRY = OFFSET_VERSION + 1 |
| The location of z_frag_entry_t for this page. More... | |
| static const ulint | OFFSET_FREE_LIST = OFFSET_FRAG_ENTRY + FIL_ADDR_SIZE |
| The offset within page where the free space list begins. More... | |
| static const ulint | OFFSET_FRAGS_LIST |
| The offset within page where the fragment list begins. More... | |
| static const ulint | OFFSET_FRAGS_BEGIN |
| The offset within page where the fragments can occupy . More... | |
| static const ulint | OFFSET_PAGE_DIR_ENTRY_COUNT = FIL_PAGE_DATA_END + 2 |
| Offset of number of page directory entries (from end) More... | |
| static const ulint | OFFSET_PAGE_DIR_ENTRY_FIRST |
| Offset of first page directory entry (from end) More... | |
| static const ulint | SIZE_OF_PAGE_DIR_ENTRY = 2 |
Private Member Functions | |
| fil_addr_t | get_frag_entry_addr () const |
| void | dealloc_fragment (frag_node_t &frag) |
| void | dealloc_frag_id () |
| Deallocate all the free slots from the end of the page directory. More... | |
| void | dealloc_frag_id (ulint frag_id) |
| Deallocate the given fragment id. More... | |
Private Attributes | |
| buf_block_t * | m_block |
| mtr_t * | m_mtr |
| dict_index_t * | m_index |
The fragment page.
This page will contain fragments from different zlib streams.
|
inline |
Constructor.
| [in] | block | Buffer block containing the fragment page. |
| [in] | mtr | Mini-transaction context. |
| [in] | index | Clustered index to which LOB belongs. |
|
inline |
Constructor.
| [in] | mtr | Mini-transaction context. |
| [in] | index | Clustered index to which LOB belongs. |
|
inlineexplicit |
Constructor.
| [in] | block | the buffer block containing the fragment page. |
|
inline |
|
inline |
| buf_block_t * lob::z_frag_page_t::alloc | ( | z_first_page_t & | first, |
| page_no_t | hint, | ||
| bool | bulk | ||
| ) |
Allocate the fragment page.
| [in] | first | first page of this LOB. |
| [in] | hint | hint page number for allocation. |
| [in] | bulk | true if bulk operation (OPCODE_INSERT_BULK) false otherwise. |
| ulint lob::z_frag_page_t::alloc_dir_entry | ( | ) |
Grow the frag directory by one entry.
|
inline |
Allocate a fragment id.
| frag_id_t lob::z_frag_page_t::alloc_fragment | ( | ulint | size, |
| z_frag_entry_t & | entry | ||
| ) |
Allocate a fragment with the given payload.
| [in] | size | the payload size. |
| [in] | entry | the index entry of the given frag page. |
|
static |
Determine if the given length of data can fit into a fragment page.
| [in] | index | the clust index into which LOB is inserted. |
| [in] | data_size | The length of data to operate. |
|
inline |
Free the fragment page.
|
private |
Deallocate all the free slots from the end of the page directory.
|
inlineprivate |
Deallocate the given fragment id.
| [in] | frag_id | The fragment that needs to be deallocated. |
|
inlineprivate |
|
inline |
| void lob::z_frag_page_t::dealloc_with_entry | ( | z_first_page_t & | first, |
| mtr_t * | alloc_mtr | ||
| ) |
Free the fragment page along with its entry.
| [in] | first | first page of LOB. |
| [in] | alloc_mtr | mini trx to perform this modification. |
|
inline |
|
inline |
|
inline |
|
inline |
| ulint lob::z_frag_page_t::get_big_free_len | ( | ) | const |
Get the big free space in this page.
|
inline |
Obtain the file address of the fragment entry that denotes the current fragment page.
|
inlineprivate |
| z_frag_entry_t lob::z_frag_page_t::get_frag_entry_s | ( | ) |
| z_frag_entry_t lob::z_frag_page_t::get_frag_entry_x | ( | ) |
|
inline |
|
inline |
|
inline |
Get the number of fragments in this frag page.
|
inline |
Get the next page number.
|
inline |
Get the frag page number.
|
inline |
|
inline |
|
inline |
|
inline |
Get the prev page number.
Get the prev page number (FIL_PAGE_PREV).
| [in] | mtr | Mini-transaction latch context. |
| ulint lob::z_frag_page_t::get_total_free_len | ( | ) | const |
Get the total cumulative free space in this page.
| ulint lob::z_frag_page_t::get_total_stored_data | ( | ) | const |
Get the total amount of stored data in this page.
|
inline |
|
inline |
|
inline |
Insert the given fragment node into the fragment list.
| [in,out] | frag | the fragment node to be inserted. |
|
inline |
|
inline |
|
inline |
Determine if the given fragment node is the last fragment node adjacent to the directory.
|
inline |
|
inline |
|
inlinestatic |
The maximum free space available in a fragment page.
Adjustment needs to be done with the frag_node_t::overhead().
|
inline |
|
inline |
|
inline |
The maximum free space available in a fragment page.
Adjustment needs to be done with the frag_node_t::overhead().
|
inline |
|
inline |
|
inline |
| std::ostream & lob::z_frag_page_t::print_frags_in_order | ( | std::ostream & | out | ) | const |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Set the next page.
|
inline |
Set the prev page.
|
inline |
|
inline |
Write the space identifier to the page header, without generating redo log records.
| [in] | space_id | the space identifier. |
|
inline |
|
inline |
|
inline |
|
inline |
Split one free fragment into two.
This is not splitting a fragment page. This is just splitting one free fragment into two. When we want to allocate one fragment, we identify a big enough free fragment and split it into two - one will be the allocated portion and other will become a free fragment.
| [in] | free_frag | the free fragment that will be split. |
| [in] | size | the payload size in bytes. |
|
inline |
|
inline |
|
private |
|
private |
|
private |
|
static |
The location of z_frag_entry_t for this page.
|
static |
The offset within page where the fragments can occupy .
|
static |
The offset within page where the fragment list begins.
|
static |
The offset within page where the free space list begins.
|
static |
Offset of number of page directory entries (from end)
|
static |
Offset of first page directory entry (from end)
|
static |
Version information.
One byte.
|
static |