summaryrefslogtreecommitdiff
path: root/src/btree/btree.src
blob: 08e5a206e845194ca55ab9d06c5dd03767ae4824 (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
/*-
 * See the file LICENSE for redistribution information.
 *
 * Copyright (c) 1996, 2012 Oracle and/or its affiliates.  All rights reserved.
 *
 * $Id$
 */

DBPRIVATE
PREFIX	__bam

INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/crypto.h"
INCLUDE #include "dbinc/db_page.h"
INCLUDE #include "dbinc/db_am.h"
INCLUDE #include "dbinc/btree.h"
INCLUDE #include "dbinc/txn.h"
INCLUDE

/*
 * 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).
 * pgno:	the parent page number
 * plsn:	the parent page's original LSN.
 * pg:		the split page's contents before the split.
 * opflags:	SPL_NRECS: if splitting a tree that maintains a record count.
 * pindx:	index of new record in parent page.
 */
BEGIN split		50	62
DB	fileid		int32_t		ld
OP	opflags		u_int32_t	lu
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	ppgno		db_pgno_t	lu
POINTER	plsn		DB_LSN *	lu
ARG	pindx		u_int32_t	lu
PGDBT	pg		DBT		s
HDR	pentry		DBT		s
HDR	rentry		DBT		s
END

BEGIN_COMPAT split		48	62
DB	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	ppgno		db_pgno_t	lu
POINTER	plsn		DB_LSN *	lu
ARG	pindx		u_int32_t	lu
PGDBT	pg		DBT		s
DBT	pentry		DBT		s
DBT	rentry		DBT		s
ARG	opflags		u_int32_t	lu
END

BEGIN_COMPAT split	42	62
DB	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
PGDBT	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.
 * 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		42	63
DB	fileid		int32_t		ld
ARG	pgno		db_pgno_t	lu
PGDBT	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		42	55
DB	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		42	56
DB	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		42	57
DB	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.
 * indx:	the index to be replaced.
 * isdeleted:	set if the record was previously deleted.
 * orig:	the original data.
 * repl:	the replacement data.
 * prefix:	the prefix of the replacement that matches the original.
 * suffix:	the suffix of the replacement that matches the original.
 */
BEGIN repl		42	58
DB	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-irep: used to log the replacement of an item on an internal page.
 *
 * pgno:	the page modified.
 * lsn:		the page's original lsn.
 * indx:	the index to be replaced.
 * ptype:	type of the page.
 * hdr:		header of the record.
 * data:	data of the record.
 */
BEGIN irep		50	67
DB	fileid		int32_t		ld
ARG	pgno		db_pgno_t	lu
POINTER	lsn		DB_LSN *	lu
ARG	indx		u_int32_t	lu
OP	ptype		u_int32_t	lu
HDR	hdr		DBT		s
DATA	data		DBT		s
HDR	old		DBT		s
END

/*
 * BTREE-root: log the assignment of a root btree page.
 */
BEGIN root		42	59
DB	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		42	64
/* Fileid of db affected. */
DB	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	42	65
/* Fileid of db affected. */
DB	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	lu
END

/*
 * BTREE-relink -- Handles relinking around a deleted leaf page.
 * Current routine moved to __db_relink.
 *
 */
BEGIN_COMPAT relink		43	147
/* Fileid of db affected. */
DB	fileid		int32_t		ld
/* The page being removed. */
ARG	pgno		db_pgno_t	lu
/* The page's original lsn. */
POINTER	lsn		DB_LSN *	lu
/* The previous page. */
ARG	prev		db_pgno_t	lu
/* The previous page's original lsn. */
POINTER	lsn_prev	DB_LSN *	lu
/* The next page. */
ARG	next		db_pgno_t	lu
/* The previous page's original lsn. */
POINTER	lsn_next	DB_LSN *	lu
END

/*
 * BTREE-merge -- Handles merging of pages during a compaction.
 * Current routine moved to __db_merge.
 */
BEGIN_COMPAT merge		44	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
DBT	hdr		DBT		s
DBT	data		DBT		s
DBT	ind		DBT		s
END