InnoDB Plugin
1.0
|
#include "univ.i"
#include "buf0types.h"
#include "page0page.h"
#include "rem0rec.h"
#include "data0data.h"
#include "mtr0mtr.h"
#include "page0cur.ic"
Go to the source code of this file.
Data Structures | |
struct | page_cur_t |
Macros | |
#define | PAGE_CUR_ADAPT |
#define | PAGE_CUR_UNSUPP 0 |
#define | PAGE_CUR_G 1 |
#define | PAGE_CUR_GE 2 |
#define | PAGE_CUR_L 3 |
#define | PAGE_CUR_LE 4 |
Functions | |
UNIV_INLINE page_t * | page_cur_get_page (page_cur_t *cur) |
UNIV_INLINE buf_block_t * | page_cur_get_block (page_cur_t *cur) |
UNIV_INLINE page_zip_des_t * | page_cur_get_page_zip (page_cur_t *cur) |
UNIV_INLINE rec_t * | page_cur_get_rec (page_cur_t *cur) |
UNIV_INLINE void | page_cur_set_before_first (const buf_block_t *block, page_cur_t *cur) |
UNIV_INLINE void | page_cur_set_after_last (const buf_block_t *block, page_cur_t *cur) |
UNIV_INLINE ibool | page_cur_is_before_first (const page_cur_t *cur) |
UNIV_INLINE ibool | page_cur_is_after_last (const page_cur_t *cur) |
UNIV_INLINE void | page_cur_position (const rec_t *rec, const buf_block_t *block, page_cur_t *cur) |
UNIV_INLINE void | page_cur_invalidate (page_cur_t *cur) |
UNIV_INLINE void | page_cur_move_to_next (page_cur_t *cur) |
UNIV_INLINE void | page_cur_move_to_prev (page_cur_t *cur) |
UNIV_INLINE rec_t * | page_cur_tuple_insert (page_cur_t *cursor, const dtuple_t *tuple, dict_index_t *index, ulint **offsets, mem_heap_t **heap, ulint n_ext, mtr_t *mtr) |
UNIV_INLINE rec_t * | page_cur_rec_insert (page_cur_t *cursor, const rec_t *rec, dict_index_t *index, ulint *offsets, mtr_t *mtr) |
UNIV_INTERN rec_t * | page_cur_insert_rec_low (rec_t *current_rec, dict_index_t *index, const rec_t *rec, ulint *offsets, mtr_t *mtr) |
UNIV_INTERN rec_t * | page_cur_insert_rec_zip (page_cur_t *cursor, dict_index_t *index, const rec_t *rec, ulint *offsets, mtr_t *mtr) |
UNIV_INTERN void | page_copy_rec_list_end_to_created_page (page_t *new_page, rec_t *rec, dict_index_t *index, mtr_t *mtr) |
UNIV_INTERN void | page_cur_delete_rec (page_cur_t *cursor, const dict_index_t *index, const ulint *offsets, mtr_t *mtr) |
UNIV_INLINE ulint | page_cur_search (const buf_block_t *block, const dict_index_t *index, const dtuple_t *tuple, ulint mode, page_cur_t *cursor) |
UNIV_INTERN void | page_cur_search_with_match (const buf_block_t *block, const dict_index_t *index, const dtuple_t *tuple, ulint mode, ulint *iup_matched_fields, ulint *iup_matched_bytes, ulint *ilow_matched_fields, ulint *ilow_matched_bytes, page_cur_t *cursor) |
UNIV_INTERN void | page_cur_open_on_rnd_user_rec (buf_block_t *block, page_cur_t *cursor) |
UNIV_INTERN byte * | page_cur_parse_insert_rec (ibool is_short, byte *ptr, byte *end_ptr, buf_block_t *block, dict_index_t *index, mtr_t *mtr) |
UNIV_INTERN 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) |
UNIV_INTERN byte * | page_cur_parse_delete_rec (byte *ptr, byte *end_ptr, buf_block_t *block, dict_index_t *index, mtr_t *mtr) |
UNIV_INTERN bool | page_delete_rec (const dict_index_t *index, page_cur_t *pcur, page_zip_des_t *page_zip, const ulint *offsets) |
Variables | |
UNIV_INLINE rec_t | warn_unused_result |
The page cursor
Created 10/4/1994 Heikki Tuuri
UNIV_INTERN 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(). in: mtr
new_page | in/out: index page to copy to |
rec | in: first record to copy |
index | in: record descriptor |
UNIV_INTERN 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. in: mini-transaction handle
cursor | in/out: a page cursor |
index | in: record descriptor |
offsets | in: rec_get_offsets( cursor->rec, index) |
UNIV_INLINE buf_block_t* page_cur_get_block | ( | page_cur_t * | cur | ) |
Gets pointer to the buffer block where the cursor is positioned.
Gets pointer to the buffer block where the cursor is positioned.
cur | in: page cursor |
UNIV_INLINE page_t* page_cur_get_page | ( | page_cur_t * | cur | ) |
Gets pointer to the page frame where the cursor is positioned.
Gets pointer to the page frame where the cursor is positioned.
cur | in: page cursor |
UNIV_INLINE page_zip_des_t* page_cur_get_page_zip | ( | page_cur_t * | cur | ) |
Gets pointer to the page frame where the cursor is positioned.
Gets pointer to the page frame where the cursor is positioned.
cur | in: page cursor |
UNIV_INLINE rec_t* page_cur_get_rec | ( | page_cur_t * | cur | ) |
Gets the record where the cursor is positioned.
Gets the record where the cursor is positioned.
cur | in: page cursor |
UNIV_INTERN 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.
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 |
UNIV_INTERN 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().
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 |
UNIV_INLINE void page_cur_invalidate | ( | page_cur_t * | cur | ) |
Invalidates a page cursor by setting the record pointer NULL. out: page cursor
Invalidates a page cursor by setting the record pointer NULL.
cur | out: page cursor |
UNIV_INLINE ibool page_cur_is_after_last | ( | const page_cur_t * | cur | ) |
Returns TRUE if the cursor is after last user record.
Returns TRUE if the cursor is after last user record.
cur | in: cursor |
UNIV_INLINE ibool page_cur_is_before_first | ( | const page_cur_t * | cur | ) |
Returns TRUE if the cursor is before first user record on page.
Returns TRUE if the cursor is before first user record on page.
cur | in: cursor |
UNIV_INLINE void page_cur_move_to_next | ( | page_cur_t * | cur | ) |
Moves the cursor to the next record on page. in/out: cursor; must not be after last
Moves the cursor to the next record on page.
cur | in/out: cursor; must not be after last |
UNIV_INLINE void page_cur_move_to_prev | ( | page_cur_t * | cur | ) |
Moves the cursor to the previous record on page. in/out: cursor; not before first
Moves the cursor to the previous record on page.
cur | in/out: page cursor, not before first |
UNIV_INTERN 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. out: page cursor
block | in: page |
UNIV_INTERN 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 |
UNIV_INTERN byte* page_cur_parse_insert_rec | ( | ibool | is_short, |
byte * | ptr, | ||
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 |
UNIV_INLINE void page_cur_position | ( | const rec_t * | rec, |
const buf_block_t * | block, | ||
page_cur_t * | cur | ||
) |
Positions the cursor on the given record. out: page cursor
Positions the cursor on the given record.
rec | in: record on a page |
block | in: buffer block containing the record |
cur | out: page cursor |
UNIV_INLINE rec_t* page_cur_rec_insert | ( | page_cur_t * | cursor, |
const rec_t * | rec, | ||
dict_index_t * | index, | ||
ulint * | offsets, | ||
mtr_t * | mtr | ||
) |
Inserts a record next to page cursor. Returns pointer to inserted record if succeed, i.e., enough space available, NULL otherwise. The cursor stays at the same logical position, but the physical position may change if it is pointing to a compressed page that was reorganized.
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().
Inserts a record next to page cursor. Returns pointer to inserted record if succeed, i.e., enough space available, NULL otherwise. The cursor stays at the same logical position, but the physical position may change if it is pointing to a compressed page that was reorganized.
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().
cursor | in/out: a page cursor |
rec | in: record to insert |
index | in: record descriptor |
offsets | in/out: rec_get_offsets(rec, index) |
mtr | in: mini-transaction handle, or NULL |
UNIV_INLINE ulint page_cur_search | ( | const buf_block_t * | block, |
const dict_index_t * | index, | ||
const dtuple_t * | tuple, | ||
ulint | mode, | ||
page_cur_t * | cursor | ||
) |
Searches the right position for a page cursor.
Searches the right position for a page cursor.
block | in: buffer block |
index | in: record descriptor |
tuple | in: data tuple |
mode | in: PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G, or PAGE_CUR_GE |
cursor | out: page cursor |
UNIV_INTERN void page_cur_search_with_match | ( | const buf_block_t * | block, |
const dict_index_t * | index, | ||
const dtuple_t * | tuple, | ||
ulint | mode, | ||
ulint * | iup_matched_fields, | ||
ulint * | iup_matched_bytes, | ||
ulint * | ilow_matched_fields, | ||
ulint * | ilow_matched_bytes, | ||
page_cur_t * | cursor | ||
) |
Searches the right position for a page cursor. out: page cursor
block | in: buffer block |
index | in: record descriptor |
tuple | in: data tuple |
mode | in: PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G, or PAGE_CUR_GE |
iup_matched_fields | in/out: already matched fields in upper limit record |
iup_matched_bytes | in/out: already matched bytes in a field not yet completely matched |
ilow_matched_fields | in/out: already matched fields in lower limit record |
ilow_matched_bytes | in/out: already matched bytes in a field not yet completely matched |
UNIV_INLINE void page_cur_set_after_last | ( | const buf_block_t * | block, |
page_cur_t * | cur | ||
) |
Sets the cursor object to point after the last user record on the page. in: cursor
Sets the cursor object to point after the last user record on the page.
block | in: index page |
cur | in: cursor |
UNIV_INLINE void page_cur_set_before_first | ( | const buf_block_t * | block, |
page_cur_t * | cur | ||
) |
Sets the cursor object to point before the first user record on the page. in: cursor
Sets the cursor object to point before the first user record on the page.
block | in: index page |
cur | in: cursor |
UNIV_INLINE rec_t* page_cur_tuple_insert | ( | page_cur_t * | cursor, |
const dtuple_t * | tuple, | ||
dict_index_t * | index, | ||
ulint ** | offsets, | ||
mem_heap_t ** | heap, | ||
ulint | n_ext, | ||
mtr_t * | mtr | ||
) |
Inserts a record next to page cursor. Returns pointer to inserted record if succeed, i.e., enough space available, NULL otherwise. The cursor stays at the same logical position, but the physical position may change if it is pointing to a compressed page that was reorganized.
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().
cursor | in/out: a page cursor |
tuple | in: pointer to a data tuple |
index | in: record descriptor |
offsets | out: offsets on *rec |
heap | in/out: pointer to memory heap, or NULL |
n_ext | in: number of externally stored columns |
mtr | in: mini-transaction handle, or NULL |
UNIV_INTERN bool page_delete_rec | ( | const dict_index_t * | index, |
page_cur_t * | pcur, | ||
page_zip_des_t * | page_zip, | ||
const ulint * | offsets | ||
) |
Removes the record from a leaf page. This function does not log any changes. It is used by the IMPORT tablespace functions.
index | in: The index that the record belongs to |
pcur | in/out: page cursor on record to delete |
page_zip | in: compressed page descriptor |
UNIV_INTERN 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 |