bdb-fork-grimen
Version:
Berkeley DB(5.X) bindings for node
432 lines (403 loc) • 11.2 kB
Plain Text
/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1996, 2010 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
DBPRIVATE
PREFIX __db
INCLUDE
INCLUDE
INCLUDE
INCLUDE
INCLUDE
INCLUDE
INCLUDE
/*
* addrem -- Add or remove an entry from a duplicate page.
*
* opcode: identifies if this is an add or delete.
* fileid: file identifier of the file being modified.
* pgno: duplicate page number.
* indx: location at which to insert or delete.
* nbytes: number of bytes added/removed to/from the page.
* hdr: header for the data item.
* dbt: data that is deleted or is to be added.
* pagelsn: former lsn of the page.
*
* If the hdr was NULL then, the dbt is a regular B_KEYDATA.
* If the dbt was NULL then the hdr is a complete item to be
* pasted on the page.
*/
BEGIN addrem 50 41
OP opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
ARG nbytes u_int32_t lu
HDR hdr DBT s
DBT dbt DBT s
POINTER pagelsn DB_LSN * lu
END
BEGIN_COMPAT addrem 42 41
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
ARG nbytes u_int32_t lu
DBT hdr DBT s
DBT dbt DBT s
POINTER pagelsn DB_LSN * lu
END
/*
* big -- Handles addition and deletion of big key/data items.
*
* opcode: identifies get/put.
* fileid: file identifier of the file being modified.
* pgno: page onto which data is being added/removed.
* prev_pgno: the page before the one we are logging.
* next_pgno: the page after the one we are logging.
* dbt: data being written onto the page.
* pagelsn: former lsn of the orig_page.
* prevlsn: former lsn of the prev_pgno.
* nextlsn: former lsn of the next_pgno. This is not currently used, but
* may be used later if we actually do overwrites of big key/
* data items in place.
*/
BEGIN big 50 43
OP opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG prev_pgno db_pgno_t lu
ARG next_pgno db_pgno_t lu
HDR dbt DBT s
POINTER pagelsn DB_LSN * lu
POINTER prevlsn DB_LSN * lu
POINTER nextlsn DB_LSN * lu
END
BEGIN_COMPAT big 42 43
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG prev_pgno db_pgno_t lu
ARG next_pgno db_pgno_t lu
DBT dbt DBT s
POINTER pagelsn DB_LSN * lu
POINTER prevlsn DB_LSN * lu
POINTER nextlsn DB_LSN * lu
END
/*
* ovref -- Handles increment/decrement of overflow page reference count.
*
* fileid: identifies the file being modified.
* pgno: page number whose ref count is being incremented/decremented.
* adjust: the adjustment being made.
* lsn: the page's original lsn.
*/
BEGIN ovref 42 44
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG adjust int32_t ld
POINTER lsn DB_LSN * lu
END
/*
* relink -- Handles relinking around a page.
*
* opcode: indicates if this is an addpage or delete page
* pgno: the page being changed.
* lsn the page's original lsn.
* prev: the previous page.
* lsn_prev: the previous page's original lsn.
* next: the next page.
* lsn_next: the previous page's original lsn.
*/
BEGIN_COMPAT relink 42 45
ARG opcode u_int32_t lu
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG prev db_pgno_t lu
POINTER lsn_prev DB_LSN * lu
ARG next db_pgno_t lu
POINTER lsn_next DB_LSN * lu
END
/*
* Debug -- log an operation upon entering an access method.
* op: Operation (cursor, c_close, c_get, c_put, c_del,
* get, put, delete).
* fileid: identifies the file being acted upon.
* key: key paramater
* data: data parameter
* flags: flags parameter
*/
BEGIN debug 42 47
DBT op DBT s
ARG fileid int32_t ld
DBT key DBT s
DBT data DBT s
ARG arg_flags u_int32_t lu
END
/*
* noop -- do nothing, but get an LSN.
*/
BEGIN noop 42 48
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER prevlsn DB_LSN * lu
END
/*
* pg_alloc: used to record allocating a new page.
*
* meta_lsn: the original lsn of the page reference by meta_pgno.
* meta_pgno the page pointing at the allocated page in the free list.
* If the list is unsorted this is the metadata page.
* page_lsn: the allocated page's original lsn.
* pgno: the page allocated.
* ptype: the type of the page allocated.
* next: the next page on the free list.
* last_pgno: the last page in the file after this op (4.3+).
*/
BEGIN_COMPAT pg_alloc 42 49
DB fileid int32_t ld
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t 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
BEGIN pg_alloc 43 49
DB fileid int32_t ld
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t 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
ARG last_pgno db_pgno_t lu
END
/*
* pg_free: used to record freeing a page.
* If we are maintaining a sorted free list (during compact) meta_pgno
* will be non-zero and refer to the page that preceeds the one we are freeing
* in the free list. Meta_lsn will then be the lsn of that page.
*
* pgno: the page being freed.
* meta_lsn: the meta-data page's original lsn.
* meta_pgno: the meta-data page number.
* header: the header from the free'd page.
* next: the previous next pointer on the metadata page.
* last_pgno: the last page in the file before this op (4.3+).
*/
BEGIN_COMPAT pg_free 42 50
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t lu
PGDBT header DBT s
ARG next db_pgno_t lu
END
BEGIN pg_free 43 50
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t lu
PGDBT header DBT s
ARG next db_pgno_t lu
ARG last_pgno db_pgno_t lu
END
/*
* cksum --
* This log record is written when we're unable to checksum a page,
* before returning DB_RUNRECOVERY. This log record causes normal
* recovery to itself return DB_RUNRECOVERY, as only catastrophic
* recovery can fix things.
*/
BEGIN cksum 42 51
END
/*
* pg_freedata: used to record freeing a page with data on it.
*
* pgno: the page being freed.
* meta_lsn: the meta-data page's original lsn.
* meta_pgno: the meta-data page number.
* header: the header and index entries from the free'd page.
* data: the data from the free'd page.
* next: the previous next pointer on the metadata page.
* last_pgno: the last page in the file before this op (4.3+).
*/
BEGIN_COMPAT pg_freedata 42 52
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t lu
PGDBT header DBT s
ARG next db_pgno_t lu
PGDDBT data DBT s
END
BEGIN pg_freedata 43 52
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
ARG meta_pgno db_pgno_t lu
PGDBT header DBT s
ARG next db_pgno_t lu
ARG last_pgno db_pgno_t lu
PGDDBT data DBT s
END
/*
* pg_prepare: used to record an aborted page in a prepared transaction.
*
* pgno: the page being freed.
*/
X BEGIN pg_prepare 42 53
X DB fileid int32_t ld
X ARG pgno db_pgno_t lu
X END
/*
* pg_new: used to record a new page put on the free list.
*
* pgno: the page being freed.
* meta_lsn: the meta-data page's original lsn.
* meta_pgno: the meta-data page number.
* header: the header from the free'd page.
* next: the previous next pointer on the metadata page.
*/
X BEGIN pg_new 42 54
X DB fileid int32_t ld
X ARG pgno db_pgno_t lu
X POINTER meta_lsn DB_LSN * lu
X ARG meta_pgno db_pgno_t lu
X PGDBT header DBT s
X ARG next db_pgno_t lu
X END
/*
* pg_init: used to reinitialize a page during truncate.
*
* pgno: the page being initialized.
* header: the header from the page.
* data: data that used to be on the page.
*/
BEGIN pg_init 43 60
DB fileid int32_t ld
ARG pgno db_pgno_t lu
PGDBT header DBT s
PGDDBT data DBT s
END
/*
* pg_sort: sort the free list
*
* meta: meta page number
* meta_lsn: lsn on meta page.
* last_free: page number of new last free page.
* last_lsn; lsn of last free page.
* last_pgno: current last page number.
* list: list of pages and lsns to sort.
*/
BEGIN_COMPAT pg_sort 44 61
DB fileid int32_t ld
ARG meta db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
ARG last_free db_pgno_t lu
POINTER last_lsn DB_LSN * lu
ARG last_pgno db_pgno_t lu
DBT list DBT s
END
/*
* pg_truc: truncate the free list
*
* meta: meta page number
* meta_lsn: lsn on meta page.
* last_free: page number of new last free page.
* last_lsn; lsn of last free page.
* last_pgno: current last page number.
* list: list of pages and lsns on free list.
*/
BEGIN pg_trunc 50 66
DB fileid int32_t ld
ARG meta db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
ARG last_free db_pgno_t lu
POINTER last_lsn DB_LSN * lu
ARG next_free db_pgno_t lu
ARG last_pgno db_pgno_t lu
PGLIST list DBT s
END
/*
* realloc: allocate a range of pages from the free list
* prev_pgno: page number of the page preceeding the set of pages to
* be allocated
* prev_lsn LSN from the prev_pgno page
* next_free page number of the page immediately following the set
* of pages to be allocated
* ptype The type of page being allocated
* list: pairs of page numbers and LSNs corresponding to the pages on
* the free list that are being reallocated
*/
BEGIN realloc 50 36
DB fileid int32_t ld
ARG prev_pgno db_pgno_t lu
POINTER page_lsn DB_LSN * lu
ARG next_free db_pgno_t lu
ARG ptype u_int32_t lu
PGLIST list DBT s
END
/*
* relink: relink next and previous page pointers
* NOTE: moved from btree so its number is from that range.
* pgno: The page being removed.
* new_pgno: The new page number, if any.
* prev_pgno: The previous page, if any.
* lsn_prev: The previous page's original lsn.
* next_pgno: The next page, if any.
* lsn_next: The previous page's original lsn.
*/
BEGIN relink 44 147
DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG new_pgno db_pgno_t lu
ARG prev_pgno db_pgno_t lu
POINTER lsn_prev DB_LSN * lu
ARG next_pgno db_pgno_t lu
POINTER lsn_next DB_LSN * lu
END
/*
* Merge: merge two pages.
* NOTE: moved from btree so its number is from that range.
* pgno: The page number of the target page.
* lsn: Orignial LSN of the page.
* npgno: The page number of the next, or merged, page.
* nlsn: The LSN of hte next page.
* hdr: The page header of the next page.
* data: The data from the next page.
* pg_copy: If 1, then the whole page was copied.
*/
BEGIN merge 47 148
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG npgno db_pgno_t lu
POINTER nlsn DB_LSN * lu
PGDBT hdr DBT s
PGDDBT data DBT s
ARG pg_copy int32_t lu
END
/*
* pgno -- Handles replacing a page number in a record
* reference on pgno by indx.
* NOTE: moved from btree so its number is from that range.
* pgno: The page that is being updated.
* lsn: The LSN of the page.
* indx: The index of the record being updated.
* opgno: Old page number.
* npgno: New page number.
*/
BEGIN pgno 44 149
DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG indx u_int32_t lu
ARG opgno db_pgno_t lu
ARG npgno db_pgno_t lu
END