1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1996-2009 Oracle. All rights reserved. 5 * 6 * $Id$ 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