![]() |
MySQL 8.0.43
Source Code Documentation
|
The page cursor. More...
#include "page0cur.h"#include "btr0btr.h"#include "ha_prototypes.h"#include "log0recv.h"#include "mtr0log.h"#include <algorithm>#include "page0zip.h"#include "gis0rtree.h"#include "rem0cmp.h"Functions | |
| static bool | page_cur_has_null (const rec_t *rec, const dict_index_t *index) |
| Check if rec has at least one NULL value among the columns for which rec_cache.offsets was cached, which means rec_cache.offsets should not be used for this rec as it has a different layout of fields than the cached version. More... | |
| void | page_cur_search_with_match (const buf_block_t *block, const dict_index_t *index, const dtuple_t *tuple, page_cur_mode_t mode, ulint *iup_matched_fields, ulint *ilow_matched_fields, page_cur_t *cursor, rtr_info_t *rtr_info) |
| Searches the right position for a page cursor. More... | |
| void | page_cur_search_with_match_bytes (const buf_block_t *block, const dict_index_t *index, const dtuple_t *tuple, page_cur_mode_t mode, ulint *iup_matched_fields, ulint *iup_matched_bytes, ulint *ilow_matched_fields, ulint *ilow_matched_bytes, page_cur_t *cursor) |
| Search the right position for a page cursor. More... | |
| void | page_cur_open_on_rnd_user_rec (buf_block_t *block, page_cur_t *cursor) |
| Positions a page cursor on a randomly chosen user record on a page. More... | |
| static void | page_cur_insert_rec_write_log (rec_t *insert_rec, ulint rec_size, rec_t *cursor_rec, dict_index_t *index, mtr_t *mtr) |
| Writes the log record of a record insert on a page. More... | |
| byte * | page_cur_parse_insert_rec (bool is_short, const byte *ptr, const byte *end_ptr, buf_block_t *block, dict_index_t *index, mtr_t *mtr) |
| Parses a log record of a record insert on a page. More... | |
| rec_t * | page_cur_insert_rec_low (rec_t *current_rec, dict_index_t *index, const rec_t *rec, ulint *offsets, mtr_t *mtr) |
| Inserts a record next to page cursor on an uncompressed page. More... | |
| rec_t * | page_cur_direct_insert_rec_low (rec_t *current_rec, dict_index_t *index, const dtuple_t *tuple, mtr_t *mtr, ulint rec_size) |
| Inserts a record next to page cursor on an uncompressed page. More... | |
| rec_t * | page_cur_insert_rec_zip (page_cur_t *cursor, dict_index_t *index, const rec_t *rec, ulint *offsets, mtr_t *mtr) |
| Inserts a record next to page cursor on a compressed and uncompressed page. More... | |
| static bool | page_copy_rec_list_to_created_page_write_log (page_t *page, dict_index_t *index, mtr_t *mtr, byte *&log_ptr) |
| Writes a log record of copying a record list end to a new created page. More... | |
| byte * | page_parse_copy_rec_list_to_created_page (byte *ptr, byte *end_ptr, buf_block_t *block, dict_index_t *index, mtr_t *mtr) |
| Parses a log record of copying a record list end to a new created page. More... | |
| void | page_copy_rec_list_end_to_created_page (page_t *new_page, rec_t *rec, dict_index_t *index, mtr_t *mtr) |
| Copies records from page to a newly created page, from a given record onward, including that record. More... | |
| static void | page_cur_delete_rec_write_log (rec_t *rec, const dict_index_t *index, mtr_t *mtr) |
| Writes log record of a record delete on a page. More... | |
| byte * | page_cur_parse_delete_rec (byte *ptr, byte *end_ptr, buf_block_t *block, dict_index_t *index, mtr_t *mtr) |
| Parses log record of a record delete on a page. More... | |
| void | page_cur_delete_rec (page_cur_t *cursor, const dict_index_t *index, const ulint *offsets, mtr_t *mtr) |
| Deletes a record at the page cursor. More... | |
The page cursor.
Created 10/4/1994 Heikki Tuuri
| void page_copy_rec_list_end_to_created_page | ( | page_t * | new_page, |
| rec_t * | rec, | ||
| dict_index_t * | index, | ||
| mtr_t * | mtr | ||
| ) |
Copies records from page to a newly created page, from a given record onward, including that record.
Infimum and supremum records are not copied.
IMPORTANT: The caller will have to update IBUF_BITMAP_FREE if this is a compressed leaf page in a secondary index. This has to be done either within the same mini-transaction, or by invoking ibuf_reset_free_bits() before mtr_commit().
| new_page | in/out: index page to copy to |
| rec | in: first record to copy |
| index | in: record descriptor |
| mtr | in: mtr |
|
inlinestatic |
Writes a log record of copying a record list end to a new created page.
| [in,out] | page | Index page |
| [in,out] | index | Record descriptor |
| [in,out] | mtr | Mini-transaction |
| [out] | log_ptr | 4-byte field where to write the log data length |
| true | if mtr log is opened successfully. |
| false | if mtr log is not opened. One case is when redo is disabled. |
| void page_cur_delete_rec | ( | page_cur_t * | cursor, |
| const dict_index_t * | index, | ||
| const ulint * | offsets, | ||
| mtr_t * | mtr | ||
| ) |
Deletes a record at the page cursor.
The cursor is moved to the next record after the deleted one.
| cursor | in/out: a page cursor |
| index | in: record descriptor |
| offsets | in: rec_get_offsets( cursor->rec, index) |
| mtr | in: mini-transaction handle or NULL |
|
inlinestatic |
Writes log record of a record delete on a page.
| rec | in: record to be deleted |
| index | in: record descriptor |
| mtr | in: mini-transaction handle |
| rec_t * page_cur_direct_insert_rec_low | ( | rec_t * | current_rec, |
| dict_index_t * | index, | ||
| const dtuple_t * | tuple, | ||
| mtr_t * | mtr, | ||
| ulint | rec_size | ||
| ) |
Inserts a record next to page cursor on an uncompressed page.
| [in] | current_rec | Pointer to current record after which the new record is inserted. |
| [in] | index | Record descriptor |
| [in] | tuple | Pointer to a data tuple |
| [in] | mtr | Mini-transaction handle, or NULL |
| [in] | rec_size | The size of new record |
< the relevant page
< cursor position at previous insert
< a free record that was reused, or NULL
< inserted record
< heap number of the inserted record
|
static |
Check if rec has at least one NULL value among the columns for which rec_cache.offsets was cached, which means rec_cache.offsets should not be used for this rec as it has a different layout of fields than the cached version.
| [in] | rec | B-Tree record |
| [in] | index | The index from which the rec was taken |
| rec_t * page_cur_insert_rec_low | ( | rec_t * | current_rec, |
| dict_index_t * | index, | ||
| const rec_t * | rec, | ||
| ulint * | offsets, | ||
| mtr_t * | mtr | ||
| ) |
Inserts a record next to page cursor on an uncompressed page.
Returns pointer to inserted record if succeed, i.e., enough space available, NULL otherwise. The cursor stays at the same position.
< the relevant page
< cursor position at previous insert
< a free record that was reused, or NULL
< inserted record
< heap number of the inserted record
| current_rec | in: pointer to current record after which the new record is inserted |
| index | in: record descriptor |
| rec | in: pointer to a physical record |
| offsets | in/out: rec_get_offsets(rec, index) |
| mtr | in: mini-transaction handle, or NULL |
|
static |
Writes the log record of a record insert on a page.
| insert_rec | in: inserted physical record |
| rec_size | in: insert_rec size |
| cursor_rec | in: record the cursor is pointing to |
| index | in: record descriptor |
| mtr | in: mini-transaction handle |
| rec_t * page_cur_insert_rec_zip | ( | page_cur_t * | cursor, |
| dict_index_t * | index, | ||
| const rec_t * | rec, | ||
| ulint * | offsets, | ||
| mtr_t * | mtr | ||
| ) |
Inserts a record next to page cursor on a compressed and uncompressed page.
Returns pointer to inserted record if succeed, i.e., enough space available, NULL otherwise. The cursor stays at the same position.
IMPORTANT: The caller will have to update IBUF_BITMAP_FREE if this is a compressed leaf page in a secondary index. This has to be done either within the same mini-transaction, or by invoking ibuf_reset_free_bits() before mtr_commit().
< the relevant page
< cursor position at previous insert
< a free record that was reused, or NULL
< inserted record
< heap number of the inserted record
| cursor | in/out: page cursor |
| index | in: record descriptor |
| rec | in: pointer to a physical record |
| offsets | in/out: rec_get_offsets(rec, index) |
| mtr | in: mini-transaction handle, or NULL |
| void page_cur_open_on_rnd_user_rec | ( | buf_block_t * | block, |
| page_cur_t * | cursor | ||
| ) |
Positions a page cursor on a randomly chosen user record on a page.
If there are no user records, sets the cursor on the infimum record.
| block | in: page |
| cursor | out: page cursor |
| byte * page_cur_parse_delete_rec | ( | byte * | ptr, |
| byte * | end_ptr, | ||
| buf_block_t * | block, | ||
| dict_index_t * | index, | ||
| mtr_t * | mtr | ||
| ) |
Parses log record of a record delete on a page.
| ptr | in: buffer |
| end_ptr | in: buffer end |
| block | in: page or NULL |
| index | in: record descriptor |
| mtr | in: mtr or NULL |
| byte * page_cur_parse_insert_rec | ( | bool | is_short, |
| const byte * | ptr, | ||
| const byte * | end_ptr, | ||
| buf_block_t * | block, | ||
| dict_index_t * | index, | ||
| mtr_t * | mtr | ||
| ) |
Parses a log record of a record insert on a page.
| is_short | in: true if short inserts |
| ptr | in: buffer |
| end_ptr | in: buffer end |
| block | in: page or NULL |
| index | in: record descriptor |
| mtr | in: mtr or NULL |
| void page_cur_search_with_match | ( | const buf_block_t * | block, |
| const dict_index_t * | index, | ||
| const dtuple_t * | tuple, | ||
| page_cur_mode_t | mode, | ||
| ulint * | iup_matched_fields, | ||
| ulint * | ilow_matched_fields, | ||
| page_cur_t * | cursor, | ||
| rtr_info_t * | rtr_info | ||
| ) |
Searches the right position for a page cursor.
| [in] | block | Buffer block |
| [in] | index | Record descriptor |
| [in] | tuple | Data tuple |
| [in] | mode | PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G, or PAGE_CUR_GE |
| [in,out] | iup_matched_fields | Already matched fields in upper limit record |
| [in,out] | ilow_matched_fields | Already matched fields in lower limit record |
| [out] | cursor | Page cursor |
| [in,out] | rtr_info | Rtree search stack |
| void page_cur_search_with_match_bytes | ( | const buf_block_t * | block, |
| const dict_index_t * | index, | ||
| const dtuple_t * | tuple, | ||
| page_cur_mode_t | mode, | ||
| ulint * | iup_matched_fields, | ||
| ulint * | iup_matched_bytes, | ||
| ulint * | ilow_matched_fields, | ||
| ulint * | ilow_matched_bytes, | ||
| page_cur_t * | cursor | ||
| ) |
Search the right position for a page cursor.
| [in] | block | buffer block |
| [in] | index | index tree |
| [in] | tuple | key to be searched for |
| [in] | mode | search mode |
| [in,out] | iup_matched_fields | already matched fields in the upper limit record |
| [in,out] | iup_matched_bytes | already matched bytes in the first partially matched field in the upper limit record |
| [in,out] | ilow_matched_fields | already matched fields in the lower limit record |
| [in,out] | ilow_matched_bytes | already matched bytes in the first partially matched field in the lower limit record |
| [out] | cursor | page cursor |
| byte * page_parse_copy_rec_list_to_created_page | ( | byte * | ptr, |
| byte * | end_ptr, | ||
| buf_block_t * | block, | ||
| dict_index_t * | index, | ||
| mtr_t * | mtr | ||
| ) |
Parses a log record of copying a record list end to a new created page.
| ptr | in: buffer |
| end_ptr | in: buffer end |
| block | in: page or NULL |
| index | in: record descriptor |
| mtr | in: mtr or NULL |