MySQL 8.0.39
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 |