1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 1996,2008 Oracle.  All rights reserved.
5 *
6 * $Id: db_upgrade.h,v 12.7 2008/01/08 20:58:18 bostic Exp $
7 */
8
9#ifndef _DB_UPGRADE_H_
10#define	_DB_UPGRADE_H_
11
12#if defined(__cplusplus)
13extern "C" {
14#endif
15
16/*
17 * This file defines the metadata pages from the previous release.
18 * These structures are only used to upgrade old versions of databases.
19 */
20
21/* Structures from the 3.1 release */
22typedef struct _dbmeta31 {
23	DB_LSN	  lsn;		/* 00-07: LSN. */
24	db_pgno_t pgno;		/* 08-11: Current page number. */
25	u_int32_t magic;	/* 12-15: Magic number. */
26	u_int32_t version;	/* 16-19: Version. */
27	u_int32_t pagesize;	/* 20-23: Pagesize. */
28	u_int8_t  unused1[1];	/*    24: Unused. */
29	u_int8_t  type;		/*    25: Page type. */
30	u_int8_t  unused2[2];	/* 26-27: Unused. */
31	u_int32_t free;		/* 28-31: Free list page number. */
32	DB_LSN    unused3;	/* 36-39: Unused. */
33	u_int32_t key_count;	/* 40-43: Cached key count. */
34	u_int32_t record_count;	/* 44-47: Cached record count. */
35	u_int32_t flags;	/* 48-51: Flags: unique to each AM. */
36				/* 52-71: Unique file ID. */
37	u_int8_t  uid[DB_FILE_ID_LEN];
38} DBMETA31;
39
40typedef struct _btmeta31 {
41	DBMETA31  dbmeta;		/* 00-71: Generic meta-data header. */
42
43	u_int32_t maxkey;	/* 72-75: Btree: Maxkey. */
44	u_int32_t minkey;	/* 76-79: Btree: Minkey. */
45	u_int32_t re_len;	/* 80-83: Recno: fixed-length record length. */
46	u_int32_t re_pad;	/* 84-87: Recno: fixed-length record pad. */
47	u_int32_t root;		/* 88-92: Root page. */
48
49	/*
50	 * Minimum page size is 128.
51	 */
52} BTMETA31;
53
54/************************************************************************
55 HASH METADATA PAGE LAYOUT
56 ************************************************************************/
57typedef struct _hashmeta31 {
58	DBMETA31 dbmeta;	/* 00-71: Generic meta-data page header. */
59
60	u_int32_t max_bucket;	/* 72-75: ID of Maximum bucket in use */
61	u_int32_t high_mask;	/* 76-79: Modulo mask into table */
62	u_int32_t low_mask;	/* 80-83: Modulo mask into table lower half */
63	u_int32_t ffactor;	/* 84-87: Fill factor */
64	u_int32_t nelem;	/* 88-91: Number of keys in hash table */
65	u_int32_t h_charkey;	/* 92-95: Value of hash(CHARKEY) */
66#define	NCACHED	32		/* number of spare points */
67				/* 96-223: Spare pages for overflow */
68	u_int32_t spares[NCACHED];
69
70	/*
71	 * Minimum page size is 256.
72	 */
73} HMETA31;
74
75/*
76 * QAM Meta data page structure
77 *
78 */
79typedef struct _qmeta31 {
80	DBMETA31 dbmeta;	/* 00-71: Generic meta-data header. */
81
82	u_int32_t start;	/* 72-75: Start offset. */
83	u_int32_t first_recno;	/* 76-79: First not deleted record. */
84	u_int32_t cur_recno;	/* 80-83: Last recno allocated. */
85	u_int32_t re_len;	/* 84-87: Fixed-length record length. */
86	u_int32_t re_pad;	/* 88-91: Fixed-length record pad. */
87	u_int32_t rec_page;	/* 92-95: Records Per Page. */
88
89	/*
90	 * Minimum page size is 128.
91	 */
92} QMETA31;
93/* Structures from the 3.2 release */
94typedef struct _qmeta32 {
95	DBMETA31 dbmeta;	/* 00-71: Generic meta-data header. */
96
97	u_int32_t first_recno;	/* 72-75: First not deleted record. */
98	u_int32_t cur_recno;	/* 76-79: Last recno allocated. */
99	u_int32_t re_len;	/* 80-83: Fixed-length record length. */
100	u_int32_t re_pad;	/* 84-87: Fixed-length record pad. */
101	u_int32_t rec_page;	/* 88-91: Records Per Page. */
102	u_int32_t page_ext;	/* 92-95: Pages per extent */
103
104	/*
105	 * Minimum page size is 128.
106	 */
107} QMETA32;
108
109/* Structures from the 3.0 release */
110
111typedef struct _dbmeta30 {
112	DB_LSN	  lsn;		/* 00-07: LSN. */
113	db_pgno_t pgno;		/* 08-11: Current page number. */
114	u_int32_t magic;	/* 12-15: Magic number. */
115	u_int32_t version;	/* 16-19: Version. */
116	u_int32_t pagesize;	/* 20-23: Pagesize. */
117	u_int8_t  unused1[1];	/*    24: Unused. */
118	u_int8_t  type;		/*    25: Page type. */
119	u_int8_t  unused2[2];	/* 26-27: Unused. */
120	u_int32_t free;		/* 28-31: Free list page number. */
121	u_int32_t flags;	/* 32-35: Flags: unique to each AM. */
122				/* 36-55: Unique file ID. */
123	u_int8_t  uid[DB_FILE_ID_LEN];
124} DBMETA30;
125
126/************************************************************************
127 BTREE METADATA PAGE LAYOUT
128 ************************************************************************/
129typedef struct _btmeta30 {
130	DBMETA30	dbmeta;	/* 00-55: Generic meta-data header. */
131
132	u_int32_t maxkey;	/* 56-59: Btree: Maxkey. */
133	u_int32_t minkey;	/* 60-63: Btree: Minkey. */
134	u_int32_t re_len;	/* 64-67: Recno: fixed-length record length. */
135	u_int32_t re_pad;	/* 68-71: Recno: fixed-length record pad. */
136	u_int32_t root;		/* 72-75: Root page. */
137
138	/*
139	 * Minimum page size is 128.
140	 */
141} BTMETA30;
142
143/************************************************************************
144 HASH METADATA PAGE LAYOUT
145 ************************************************************************/
146typedef struct _hashmeta30 {
147	DBMETA30 dbmeta;	/* 00-55: Generic meta-data page header. */
148
149	u_int32_t max_bucket;	/* 56-59: ID of Maximum bucket in use */
150	u_int32_t high_mask;	/* 60-63: Modulo mask into table */
151	u_int32_t low_mask;	/* 64-67: Modulo mask into table lower half */
152	u_int32_t ffactor;	/* 68-71: Fill factor */
153	u_int32_t nelem;	/* 72-75: Number of keys in hash table */
154	u_int32_t h_charkey;	/* 76-79: Value of hash(CHARKEY) */
155#define	NCACHED30	32		/* number of spare points */
156				/* 80-207: Spare pages for overflow */
157	u_int32_t spares[NCACHED30];
158
159	/*
160	 * Minimum page size is 256.
161	 */
162} HMETA30;
163
164/************************************************************************
165 QUEUE METADATA PAGE LAYOUT
166 ************************************************************************/
167/*
168 * QAM Meta data page structure
169 *
170 */
171typedef struct _qmeta30 {
172	DBMETA30    dbmeta;	/* 00-55: Generic meta-data header. */
173
174	u_int32_t start;	/* 56-59: Start offset. */
175	u_int32_t first_recno;	/* 60-63: First not deleted record. */
176	u_int32_t cur_recno;	/* 64-67: Last recno allocated. */
177	u_int32_t re_len;	/* 68-71: Fixed-length record length. */
178	u_int32_t re_pad;	/* 72-75: Fixed-length record pad. */
179	u_int32_t rec_page;	/* 76-79: Records Per Page. */
180
181	/*
182	 * Minimum page size is 128.
183	 */
184} QMETA30;
185
186/* Structures from Release 2.x */
187
188/************************************************************************
189 BTREE METADATA PAGE LAYOUT
190 ************************************************************************/
191
192/*
193 * Btree metadata page layout:
194 */
195typedef struct _btmeta2X {
196	DB_LSN	  lsn;		/* 00-07: LSN. */
197	db_pgno_t pgno;		/* 08-11: Current page number. */
198	u_int32_t magic;	/* 12-15: Magic number. */
199	u_int32_t version;	/* 16-19: Version. */
200	u_int32_t pagesize;	/* 20-23: Pagesize. */
201	u_int32_t maxkey;	/* 24-27: Btree: Maxkey. */
202	u_int32_t minkey;	/* 28-31: Btree: Minkey. */
203	u_int32_t free;		/* 32-35: Free list page number. */
204	u_int32_t flags;	/* 36-39: Flags. */
205	u_int32_t re_len;	/* 40-43: Recno: fixed-length record length. */
206	u_int32_t re_pad;	/* 44-47: Recno: fixed-length record pad. */
207				/* 48-67: Unique file ID. */
208	u_int8_t  uid[DB_FILE_ID_LEN];
209} BTMETA2X;
210
211/************************************************************************
212 HASH METADATA PAGE LAYOUT
213 ************************************************************************/
214
215/*
216 * Hash metadata page layout:
217 */
218/* Hash Table Information */
219typedef struct hashhdr {	/* Disk resident portion */
220	DB_LSN	lsn;		/* 00-07: LSN of the header page */
221	db_pgno_t pgno;		/* 08-11: Page number (btree compatibility). */
222	u_int32_t magic;	/* 12-15: Magic NO for hash tables */
223	u_int32_t version;	/* 16-19: Version ID */
224	u_int32_t pagesize;	/* 20-23: Bucket/Page Size */
225	u_int32_t ovfl_point;	/* 24-27: Overflow page allocation location */
226	u_int32_t last_freed;	/* 28-31: Last freed overflow page pgno */
227	u_int32_t max_bucket;	/* 32-35: ID of Maximum bucket in use */
228	u_int32_t high_mask;	/* 36-39: Modulo mask into table */
229	u_int32_t low_mask;	/* 40-43: Modulo mask into table lower half */
230	u_int32_t ffactor;	/* 44-47: Fill factor */
231	u_int32_t nelem;	/* 48-51: Number of keys in hash table */
232	u_int32_t h_charkey;	/* 52-55: Value of hash(CHARKEY) */
233	u_int32_t flags;	/* 56-59: Allow duplicates. */
234#define	NCACHED2X	32		/* number of spare points */
235				/* 60-187: Spare pages for overflow */
236	u_int32_t spares[NCACHED2X];
237				/* 188-207: Unique file ID. */
238	u_int8_t  uid[DB_FILE_ID_LEN];
239
240	/*
241	 * Minimum page size is 256.
242	 */
243} HASHHDR;
244
245#if defined(__cplusplus)
246}
247#endif
248#endif /* !_DB_UPGRADE_H_ */
249