summaryrefslogtreecommitdiff
path: root/bdb/btree/btree.src
blob: a1eba7d7fc7e6edf5ab5c666fbf8eacfef03b9bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
/*-
 * 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