mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
296 lines
7.1 KiB
Text
296 lines
7.1 KiB
Text
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 1996, 1997, 1998, 1999, 2000
|
|
* Sleepycat Software. All rights reserved.
|
|
*
|
|
* $Id: btree.src,v 10.26 2000/12/12 17:40:23 bostic Exp $
|
|
*/
|
|
|
|
PREFIX bam
|
|
|
|
INCLUDE #include "db_config.h"
|
|
INCLUDE
|
|
INCLUDE #ifndef NO_SYSTEM_INCLUDES
|
|
INCLUDE #include <sys/types.h>
|
|
INCLUDE
|
|
INCLUDE #include <ctype.h>
|
|
INCLUDE #include <errno.h>
|
|
INCLUDE #include <string.h>
|
|
INCLUDE #endif
|
|
INCLUDE
|
|
INCLUDE #include "db_int.h"
|
|
INCLUDE #include "db_page.h"
|
|
INCLUDE #include "db_dispatch.h"
|
|
INCLUDE #include "db_am.h"
|
|
INCLUDE #include "btree.h"
|
|
INCLUDE #include "txn.h"
|
|
INCLUDE
|
|
|
|
/*
|
|
* BTREE-pg_alloc: used to record allocating a new page.
|
|
*
|
|
* meta_lsn: the meta-data page's original lsn.
|
|
* page_lsn: the allocated page's original lsn.
|
|
* pgno: the page allocated.
|
|
* next: the next page on the free list.
|
|
*/
|
|
BEGIN pg_alloc 51
|
|
ARG fileid int32_t ld
|
|
POINTER meta_lsn DB_LSN * lu
|
|
POINTER page_lsn DB_LSN * lu
|
|
ARG pgno db_pgno_t lu
|
|
ARG ptype u_int32_t lu
|
|
ARG next db_pgno_t lu
|
|
END
|
|
|
|
DEPRECATED pg_alloc1 60
|
|
ARG fileid int32_t ld
|
|
POINTER meta_lsn DB_LSN * lu
|
|
POINTER alloc_lsn DB_LSN * lu
|
|
POINTER page_lsn DB_LSN * lu
|
|
ARG pgno db_pgno_t lu
|
|
ARG ptype u_int32_t lu
|
|
ARG next db_pgno_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-pg_free: used to record freeing a page.
|
|
*
|
|
* pgno: the page being freed.
|
|
* meta_lsn: the meta-data page's original lsn.
|
|
* header: the header from the free'd page.
|
|
* next: the previous next pointer on the metadata page.
|
|
*/
|
|
BEGIN pg_free 52
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
POINTER meta_lsn DB_LSN * lu
|
|
DBT header DBT s
|
|
ARG next db_pgno_t lu
|
|
END
|
|
|
|
DEPRECATED pg_free1 61
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
POINTER meta_lsn DB_LSN * lu
|
|
POINTER alloc_lsn DB_LSN * lu
|
|
DBT header DBT s
|
|
ARG next db_pgno_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-split: used to log a page split.
|
|
*
|
|
* left: the page number for the low-order contents.
|
|
* llsn: the left page's original LSN.
|
|
* right: the page number for the high-order contents.
|
|
* rlsn: the right page's original LSN.
|
|
* indx: the number of entries that went to the left page.
|
|
* npgno: the next page number
|
|
* nlsn: the next page's original LSN (or 0 if no next page).
|
|
* pg: the split page's contents before the split.
|
|
*/
|
|
DEPRECATED split1 53
|
|
ARG fileid int32_t ld
|
|
ARG left db_pgno_t lu
|
|
POINTER llsn DB_LSN * lu
|
|
ARG right db_pgno_t lu
|
|
POINTER rlsn DB_LSN * lu
|
|
ARG indx u_int32_t lu
|
|
ARG npgno db_pgno_t lu
|
|
POINTER nlsn DB_LSN * lu
|
|
DBT pg DBT s
|
|
END
|
|
|
|
/*
|
|
* BTREE-split: used to log a page split.
|
|
*
|
|
* left: the page number for the low-order contents.
|
|
* llsn: the left page's original LSN.
|
|
* right: the page number for the high-order contents.
|
|
* rlsn: the right page's original LSN.
|
|
* indx: the number of entries that went to the left page.
|
|
* npgno: the next page number
|
|
* npgno: the next page number
|
|
* nlsn: the next page's original LSN (or 0 if no next page).
|
|
* root_pgno: the root page number
|
|
* pg: the split page's contents before the split.
|
|
* opflags: SPL_NRECS: if splitting a tree that maintains a record count.
|
|
*/
|
|
BEGIN split 62
|
|
ARG fileid int32_t ld
|
|
ARG left db_pgno_t lu
|
|
POINTER llsn DB_LSN * lu
|
|
ARG right db_pgno_t lu
|
|
POINTER rlsn DB_LSN * lu
|
|
ARG indx u_int32_t lu
|
|
ARG npgno db_pgno_t lu
|
|
POINTER nlsn DB_LSN * lu
|
|
ARG root_pgno db_pgno_t lu
|
|
DBT pg DBT s
|
|
ARG opflags u_int32_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-rsplit: used to log a reverse-split
|
|
*
|
|
* pgno: the page number of the page copied over the root.
|
|
* pgdbt: the page being copied on the root page.
|
|
* nrec: the tree's record count.
|
|
* rootent: last entry on the root page.
|
|
* rootlsn: the root page's original lsn.
|
|
*/
|
|
DEPRECATED rsplit1 54
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
DBT pgdbt DBT s
|
|
ARG nrec db_pgno_t lu
|
|
DBT rootent DBT s
|
|
POINTER rootlsn DB_LSN * lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-rsplit: used to log a reverse-split
|
|
*
|
|
* pgno: the page number of the page copied over the root.
|
|
* pgdbt: the page being copied on the root page.
|
|
* root_pgno: the root page number.
|
|
* nrec: the tree's record count.
|
|
* rootent: last entry on the root page.
|
|
* rootlsn: the root page's original lsn.
|
|
*/
|
|
BEGIN rsplit 63
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
DBT pgdbt DBT s
|
|
ARG root_pgno db_pgno_t lu
|
|
ARG nrec db_pgno_t lu
|
|
DBT rootent DBT s
|
|
POINTER rootlsn DB_LSN * lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-adj: used to log the adjustment of an index.
|
|
*
|
|
* pgno: the page modified.
|
|
* lsn: the page's original lsn.
|
|
* indx: the index adjusted.
|
|
* indx_copy: the index to copy if inserting.
|
|
* is_insert: 0 if a delete, 1 if an insert.
|
|
*/
|
|
BEGIN adj 55
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
POINTER lsn DB_LSN * lu
|
|
ARG indx u_int32_t lu
|
|
ARG indx_copy u_int32_t lu
|
|
ARG is_insert u_int32_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-cadjust: used to adjust the count change in an internal page.
|
|
*
|
|
* pgno: the page modified.
|
|
* lsn: the page's original lsn.
|
|
* indx: the index to be adjusted.
|
|
* adjust: the signed adjustment.
|
|
* opflags: CAD_UPDATEROOT: if root page count was adjusted.
|
|
*/
|
|
BEGIN cadjust 56
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
POINTER lsn DB_LSN * lu
|
|
ARG indx u_int32_t lu
|
|
ARG adjust int32_t ld
|
|
ARG opflags u_int32_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-cdel: used to log the intent-to-delete of a cursor record.
|
|
*
|
|
* pgno: the page modified.
|
|
* lsn: the page's original lsn.
|
|
* indx: the index to be deleted.
|
|
*/
|
|
BEGIN cdel 57
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
POINTER lsn DB_LSN * lu
|
|
ARG indx u_int32_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-repl: used to log the replacement of an item.
|
|
*
|
|
* pgno: the page modified.
|
|
* lsn: the page's original lsn.
|
|
* orig: the original data.
|
|
* new: the replacement data.
|
|
* duplicate: the prefix of the replacement that matches the original.
|
|
*/
|
|
BEGIN repl 58
|
|
ARG fileid int32_t ld
|
|
ARG pgno db_pgno_t lu
|
|
POINTER lsn DB_LSN * lu
|
|
ARG indx u_int32_t lu
|
|
ARG isdeleted u_int32_t lu
|
|
DBT orig DBT s
|
|
DBT repl DBT s
|
|
ARG prefix u_int32_t lu
|
|
ARG suffix u_int32_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-root: log the assignment of a root btree page.
|
|
*/
|
|
BEGIN root 59
|
|
ARG fileid int32_t ld
|
|
ARG meta_pgno db_pgno_t lu
|
|
ARG root_pgno db_pgno_t lu
|
|
POINTER meta_lsn DB_LSN * lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-curadj: undo cursor adjustments on txn abort.
|
|
* Should only be processed during DB_TXN_ABORT.
|
|
* NOTE: the first_indx field gets used to hold
|
|
* signed index adjustment in one case.
|
|
* care should be taken if its size is changed.
|
|
*/
|
|
BEGIN curadj 64
|
|
/* Fileid of db affected. */
|
|
ARG fileid int32_t ld
|
|
/* Which adjustment. */
|
|
ARG mode db_ca_mode ld
|
|
/* Page entry is from. */
|
|
ARG from_pgno db_pgno_t lu
|
|
/* Page entry went to. */
|
|
ARG to_pgno db_pgno_t lu
|
|
/* Left page of root split. */
|
|
ARG left_pgno db_pgno_t lu
|
|
/* First index of dup set. Also used as adjustment. */
|
|
ARG first_indx u_int32_t lu
|
|
/* Index entry is from. */
|
|
ARG from_indx u_int32_t lu
|
|
/* Index where entry went. */
|
|
ARG to_indx u_int32_t lu
|
|
END
|
|
|
|
/*
|
|
* BTREE-rcuradj: undo cursor adjustments on txn abort in
|
|
* renumbering recno trees.
|
|
* Should only be processed during DB_TXN_ABORT.
|
|
*/
|
|
BEGIN rcuradj 65
|
|
/* Fileid of db affected. */
|
|
ARG fileid int32_t ld
|
|
/* Which adjustment. */
|
|
ARG mode ca_recno_arg ld
|
|
/* Root page number. */
|
|
ARG root db_pgno_t ld
|
|
/* Recno of the adjustment. */
|
|
ARG recno db_recno_t ld
|
|
/* Order number of the adjustment. */
|
|
ARG order u_int32_t ld
|
|
END
|