![]()  | 
  
    MySQL 8.0.44
    
   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 |