mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
d2c4b54540
Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/btr/btr0btr.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/btr/btr0cur.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/btr/btr0pcur.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/btr/btr0sea.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/data/data0data.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/data/data0type.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/dict/dict0boot.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/dict/dict0crea.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/dict/dict0dict.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/dict/dict0load.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/dict/dict0mem.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/fil/fil0fil.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/fsp/fsp0fsp.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/ibuf/ibuf0ibuf.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/btr0btr.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/btr0btr.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/btr0cur.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/btr0cur.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/btr0pcur.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/btr0sea.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/data0type.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/dict0dict.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/dict0dict.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/dict0mem.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/lock0lock.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/lock0lock.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/mtr0log.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/mtr0mtr.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/page0cur.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/page0cur.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/page0page.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/page0page.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/rem0cmp.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/rem0cmp.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/rem0rec.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/rem0rec.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/row0row.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/row0row.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/row0upd.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/row0upd.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/row0vers.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/row0vers.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/srv0srv.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/trx0rec.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/ut0byte.h: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/include/ut0byte.ic: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/lock/lock0lock.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/log/log0recv.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/mtr/mtr0log.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/page/page0cur.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/page/page0page.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/pars/pars0pars.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/rem/rem0cmp.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/rem/rem0rec.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0ins.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0mysql.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0purge.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0row.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0sel.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0umod.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0undo.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0upd.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/row/row0vers.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/srv/srv0srv.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/trx/trx0rec.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. innobase/trx/trx0undo.c: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC. sql/ha_innodb.cc: Implement more compact InnoDB record format. Old format is available as CREATE TABLE ... ROW_FORMAT=DYNAMIC.
280 lines
9.1 KiB
C
280 lines
9.1 KiB
C
/************************************************************************
|
|
The page cursor
|
|
|
|
(c) 1994-1996 Innobase Oy
|
|
|
|
Created 10/4/1994 Heikki Tuuri
|
|
*************************************************************************/
|
|
|
|
#ifndef page0cur_h
|
|
#define page0cur_h
|
|
|
|
#include "univ.i"
|
|
|
|
#include "page0types.h"
|
|
#include "page0page.h"
|
|
#include "rem0rec.h"
|
|
#include "data0data.h"
|
|
#include "mtr0mtr.h"
|
|
|
|
|
|
#define PAGE_CUR_ADAPT
|
|
|
|
/* Page cursor search modes; the values must be in this order! */
|
|
|
|
#define PAGE_CUR_G 1
|
|
#define PAGE_CUR_GE 2
|
|
#define PAGE_CUR_L 3
|
|
#define PAGE_CUR_LE 4
|
|
#define PAGE_CUR_LE_OR_EXTENDS 5 /* This is a search mode used in
|
|
"column LIKE 'abc%' ORDER BY column DESC";
|
|
we have to find strings which are <= 'abc' or
|
|
which extend it */
|
|
#define PAGE_CUR_DBG 6
|
|
|
|
#ifdef PAGE_CUR_ADAPT
|
|
# ifdef UNIV_SEARCH_PERF_STAT
|
|
extern ulint page_cur_short_succ;
|
|
# endif /* UNIV_SEARCH_PERF_STAT */
|
|
#endif /* PAGE_CUR_ADAPT */
|
|
|
|
/*************************************************************
|
|
Gets pointer to the page frame where the cursor is positioned. */
|
|
UNIV_INLINE
|
|
page_t*
|
|
page_cur_get_page(
|
|
/*==============*/
|
|
/* out: page */
|
|
page_cur_t* cur); /* in: page cursor */
|
|
/*************************************************************
|
|
Gets the record where the cursor is positioned. */
|
|
UNIV_INLINE
|
|
rec_t*
|
|
page_cur_get_rec(
|
|
/*=============*/
|
|
/* out: record */
|
|
page_cur_t* cur); /* in: page cursor */
|
|
/*************************************************************
|
|
Sets the cursor object to point before the first user record
|
|
on the page. */
|
|
UNIV_INLINE
|
|
void
|
|
page_cur_set_before_first(
|
|
/*======================*/
|
|
page_t* page, /* in: index page */
|
|
page_cur_t* cur); /* in: cursor */
|
|
/*************************************************************
|
|
Sets the cursor object to point after the last user record on
|
|
the page. */
|
|
UNIV_INLINE
|
|
void
|
|
page_cur_set_after_last(
|
|
/*====================*/
|
|
page_t* page, /* in: index page */
|
|
page_cur_t* cur); /* in: cursor */
|
|
/*************************************************************
|
|
Returns TRUE if the cursor is before first user record on page. */
|
|
UNIV_INLINE
|
|
ibool
|
|
page_cur_is_before_first(
|
|
/*=====================*/
|
|
/* out: TRUE if at start */
|
|
page_cur_t* cur); /* in: cursor */
|
|
/*************************************************************
|
|
Returns TRUE if the cursor is after last user record. */
|
|
UNIV_INLINE
|
|
ibool
|
|
page_cur_is_after_last(
|
|
/*===================*/
|
|
/* out: TRUE if at end */
|
|
page_cur_t* cur); /* in: cursor */
|
|
/**************************************************************
|
|
Positions the cursor on the given record. */
|
|
UNIV_INLINE
|
|
void
|
|
page_cur_position(
|
|
/*==============*/
|
|
rec_t* rec, /* in: record on a page */
|
|
page_cur_t* cur); /* in: page cursor */
|
|
/**************************************************************
|
|
Invalidates a page cursor by setting the record pointer NULL. */
|
|
UNIV_INLINE
|
|
void
|
|
page_cur_invalidate(
|
|
/*================*/
|
|
page_cur_t* cur); /* in: page cursor */
|
|
/**************************************************************
|
|
Moves the cursor to the next record on page. */
|
|
UNIV_INLINE
|
|
void
|
|
page_cur_move_to_next(
|
|
/*==================*/
|
|
page_cur_t* cur); /* in: cursor; must not be after last */
|
|
/**************************************************************
|
|
Moves the cursor to the previous record on page. */
|
|
UNIV_INLINE
|
|
void
|
|
page_cur_move_to_prev(
|
|
/*==================*/
|
|
page_cur_t* cur); /* in: cursor; must not before first */
|
|
/***************************************************************
|
|
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 position. */
|
|
UNIV_INLINE
|
|
rec_t*
|
|
page_cur_tuple_insert(
|
|
/*==================*/
|
|
/* out: pointer to record if succeed, NULL
|
|
otherwise */
|
|
page_cur_t* cursor, /* in: a page cursor */
|
|
dtuple_t* tuple, /* in: pointer to a data tuple */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
mtr_t* mtr); /* in: mini-transaction handle */
|
|
/***************************************************************
|
|
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 position. */
|
|
UNIV_INLINE
|
|
rec_t*
|
|
page_cur_rec_insert(
|
|
/*================*/
|
|
/* out: pointer to record if succeed, NULL
|
|
otherwise */
|
|
page_cur_t* cursor, /* in: a page cursor */
|
|
rec_t* rec, /* in: record to insert */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
mtr_t* mtr); /* in: mini-transaction handle */
|
|
/***************************************************************
|
|
Inserts a record next to page cursor. Returns pointer to inserted record if
|
|
succeed, i.e., enough space available, NULL otherwise. The record to be
|
|
inserted can be in a data tuple or as a physical record. The other parameter
|
|
must then be NULL. The cursor stays at the same position. */
|
|
|
|
rec_t*
|
|
page_cur_insert_rec_low(
|
|
/*====================*/
|
|
/* out: pointer to record if succeed, NULL
|
|
otherwise */
|
|
page_cur_t* cursor, /* in: a page cursor */
|
|
dtuple_t* tuple, /* in: pointer to a data tuple or NULL */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
rec_t* rec, /* in: pointer to a physical record or NULL */
|
|
mtr_t* mtr); /* in: mini-transaction handle */
|
|
/*****************************************************************
|
|
Copies records from page to a newly created page, from a given record onward,
|
|
including that record. Infimum and supremum records are not copied. */
|
|
|
|
void
|
|
page_copy_rec_list_end_to_created_page(
|
|
/*===================================*/
|
|
page_t* new_page, /* in: index page to copy to */
|
|
page_t* page, /* in: index page */
|
|
rec_t* rec, /* in: first record to copy */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
mtr_t* mtr); /* in: mtr */
|
|
/***************************************************************
|
|
Deletes a record at the page cursor. The cursor is moved to the
|
|
next record after the deleted one. */
|
|
|
|
void
|
|
page_cur_delete_rec(
|
|
/*================*/
|
|
page_cur_t* cursor, /* in: a page cursor */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
mtr_t* mtr); /* in: mini-transaction handle */
|
|
/********************************************************************
|
|
Searches the right position for a page cursor. */
|
|
UNIV_INLINE
|
|
ulint
|
|
page_cur_search(
|
|
/*============*/
|
|
/* out: number of matched fields on the left */
|
|
page_t* page, /* in: index page */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
dtuple_t* tuple, /* in: data tuple */
|
|
ulint mode, /* in: PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G,
|
|
or PAGE_CUR_GE */
|
|
page_cur_t* cursor);/* out: page cursor */
|
|
/********************************************************************
|
|
Searches the right position for a page cursor. */
|
|
|
|
void
|
|
page_cur_search_with_match(
|
|
/*=======================*/
|
|
page_t* page, /* in: index page */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
dtuple_t* tuple, /* in: data tuple */
|
|
ulint mode, /* in: PAGE_CUR_L, PAGE_CUR_LE, PAGE_CUR_G,
|
|
or PAGE_CUR_GE */
|
|
ulint* iup_matched_fields,
|
|
/* in/out: already matched fields in upper
|
|
limit record */
|
|
ulint* iup_matched_bytes,
|
|
/* in/out: already matched bytes in a field
|
|
not yet completely matched */
|
|
ulint* ilow_matched_fields,
|
|
/* in/out: already matched fields in lower
|
|
limit record */
|
|
ulint* ilow_matched_bytes,
|
|
/* in/out: already matched bytes in a field
|
|
not yet completely matched */
|
|
page_cur_t* cursor); /* out: page 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. */
|
|
|
|
void
|
|
page_cur_open_on_rnd_user_rec(
|
|
/*==========================*/
|
|
page_t* page, /* in: page */
|
|
page_cur_t* cursor);/* in/out: page cursor */
|
|
/***************************************************************
|
|
Parses a log record of a record insert on a page. */
|
|
|
|
byte*
|
|
page_cur_parse_insert_rec(
|
|
/*======================*/
|
|
/* out: end of log record or NULL */
|
|
ibool is_short,/* in: TRUE if short inserts */
|
|
byte* ptr, /* in: buffer */
|
|
byte* end_ptr,/* in: buffer end */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
page_t* page, /* in: page or NULL */
|
|
mtr_t* mtr); /* in: mtr or NULL */
|
|
/**************************************************************
|
|
Parses a log record of copying a record list end to a new created page. */
|
|
|
|
byte*
|
|
page_parse_copy_rec_list_to_created_page(
|
|
/*=====================================*/
|
|
/* out: end of log record or NULL */
|
|
byte* ptr, /* in: buffer */
|
|
byte* end_ptr,/* in: buffer end */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
page_t* page, /* in: page or NULL */
|
|
mtr_t* mtr); /* in: mtr or NULL */
|
|
/***************************************************************
|
|
Parses log record of a record delete on a page. */
|
|
|
|
byte*
|
|
page_cur_parse_delete_rec(
|
|
/*======================*/
|
|
/* out: pointer to record end or NULL */
|
|
byte* ptr, /* in: buffer */
|
|
byte* end_ptr,/* in: buffer end */
|
|
dict_index_t* index, /* in: record descriptor */
|
|
page_t* page, /* in: page or NULL */
|
|
mtr_t* mtr); /* in: mtr or NULL */
|
|
|
|
/* Index page cursor */
|
|
|
|
struct page_cur_struct{
|
|
byte* rec; /* pointer to a record on page */
|
|
};
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "page0cur.ic"
|
|
#endif
|
|
|
|
#endif
|