00001 /*- 00002 * See the file LICENSE for redistribution information. 00003 * 00004 * Copyright (c) 1996, 1997, 1998, 1999, 2000 00005 * Sleepycat Software. All rights reserved. 00006 * 00007 * $Id: db__upgrade_8h-source.html,v 1.1 2008/06/08 10:18:22 sebdiaz Exp $ 00008 */ 00009 00010 #ifndef _DB_UPGRADE_H_ 00011 #define _DB_UPGRADE_H_ 00012 00013 /* 00014 * This file defines the metadata pages from the previous release. 00015 * These structures are only used to upgrade old versions of databases. 00016 */ 00017 00018 /* Structures from the 3.0 release */ 00019 00020 typedef struct _dbmeta30 { 00021 DB_LSN lsn; /* 00-07: LSN. */ 00022 db_pgno_t pgno; /* 08-11: Current page number. */ 00023 u_int32_t magic; /* 12-15: Magic number. */ 00024 u_int32_t version; /* 16-19: Version. */ 00025 u_int32_t pagesize; /* 20-23: Pagesize. */ 00026 u_int8_t unused1[1]; /* 24: Unused. */ 00027 u_int8_t type; /* 25: Page type. */ 00028 u_int8_t unused2[2]; /* 26-27: Unused. */ 00029 u_int32_t free; /* 28-31: Free list page number. */ 00030 u_int32_t flags; /* 32-35: Flags: unique to each AM. */ 00031 /* 36-55: Unique file ID. */ 00032 u_int8_t uid[DB_FILE_ID_LEN]; 00033 } DBMETA30; 00034 00035 /************************************************************************ 00036 BTREE METADATA PAGE LAYOUT 00037 ************************************************************************/ 00038 typedef struct _btmeta30 { 00039 DBMETA30 dbmeta; /* 00-55: Generic meta-data header. */ 00040 00041 u_int32_t maxkey; /* 56-59: Btree: Maxkey. */ 00042 u_int32_t minkey; /* 60-63: Btree: Minkey. */ 00043 u_int32_t re_len; /* 64-67: Recno: fixed-length record length. */ 00044 u_int32_t re_pad; /* 68-71: Recno: fixed-length record pad. */ 00045 u_int32_t root; /* 72-75: Root page. */ 00046 00047 /* 00048 * Minimum page size is 128. 00049 */ 00050 } BTMETA30; 00051 00052 /************************************************************************ 00053 HASH METADATA PAGE LAYOUT 00054 ************************************************************************/ 00055 typedef struct _hashmeta30 { 00056 DBMETA30 dbmeta; /* 00-55: Generic meta-data page header. */ 00057 00058 u_int32_t max_bucket; /* 56-59: ID of Maximum bucket in use */ 00059 u_int32_t high_mask; /* 60-63: Modulo mask into table */ 00060 u_int32_t low_mask; /* 64-67: Modulo mask into table lower half */ 00061 u_int32_t ffactor; /* 68-71: Fill factor */ 00062 u_int32_t nelem; /* 72-75: Number of keys in hash table */ 00063 u_int32_t h_charkey; /* 76-79: Value of hash(CHARKEY) */ 00064 #define NCACHED30 32 /* number of spare points */ 00065 /* 80-207: Spare pages for overflow */ 00066 u_int32_t spares[NCACHED30]; 00067 00068 /* 00069 * Minimum page size is 256. 00070 */ 00071 } HMETA30; 00072 00073 /************************************************************************ 00074 QUEUE METADATA PAGE LAYOUT 00075 ************************************************************************/ 00076 /* 00077 * QAM Meta data page structure 00078 * 00079 */ 00080 typedef struct _qmeta30 { 00081 DBMETA30 dbmeta; /* 00-55: Generic meta-data header. */ 00082 00083 u_int32_t start; /* 56-59: Start offset. */ 00084 u_int32_t first_recno; /* 60-63: First not deleted record. */ 00085 u_int32_t cur_recno; /* 64-67: Last recno allocated. */ 00086 u_int32_t re_len; /* 68-71: Fixed-length record length. */ 00087 u_int32_t re_pad; /* 72-75: Fixed-length record pad. */ 00088 u_int32_t rec_page; /* 76-79: Records Per Page. */ 00089 00090 /* 00091 * Minimum page size is 128. 00092 */ 00093 } QMETA30; 00094 00095 /* Structures from Release 2.x */ 00096 00097 /************************************************************************ 00098 BTREE METADATA PAGE LAYOUT 00099 ************************************************************************/ 00100 00101 /* 00102 * Btree metadata page layout: 00103 */ 00104 typedef struct _btmeta2X { 00105 DB_LSN lsn; /* 00-07: LSN. */ 00106 db_pgno_t pgno; /* 08-11: Current page number. */ 00107 u_int32_t magic; /* 12-15: Magic number. */ 00108 u_int32_t version; /* 16-19: Version. */ 00109 u_int32_t pagesize; /* 20-23: Pagesize. */ 00110 u_int32_t maxkey; /* 24-27: Btree: Maxkey. */ 00111 u_int32_t minkey; /* 28-31: Btree: Minkey. */ 00112 u_int32_t free; /* 32-35: Free list page number. */ 00113 u_int32_t flags; /* 36-39: Flags. */ 00114 u_int32_t re_len; /* 40-43: Recno: fixed-length record length. */ 00115 u_int32_t re_pad; /* 44-47: Recno: fixed-length record pad. */ 00116 /* 48-67: Unique file ID. */ 00117 u_int8_t uid[DB_FILE_ID_LEN]; 00118 } BTMETA2X; 00119 00120 /************************************************************************ 00121 HASH METADATA PAGE LAYOUT 00122 ************************************************************************/ 00123 00124 /* 00125 * Hash metadata page layout: 00126 */ 00127 /* Hash Table Information */ 00128 typedef struct hashhdr { /* Disk resident portion */ 00129 DB_LSN lsn; /* 00-07: LSN of the header page */ 00130 db_pgno_t pgno; /* 08-11: Page number (btree compatibility). */ 00131 u_int32_t magic; /* 12-15: Magic NO for hash tables */ 00132 u_int32_t version; /* 16-19: Version ID */ 00133 u_int32_t pagesize; /* 20-23: Bucket/Page Size */ 00134 u_int32_t ovfl_point; /* 24-27: Overflow page allocation location */ 00135 u_int32_t last_freed; /* 28-31: Last freed overflow page pgno */ 00136 u_int32_t max_bucket; /* 32-35: ID of Maximum bucket in use */ 00137 u_int32_t high_mask; /* 36-39: Modulo mask into table */ 00138 u_int32_t low_mask; /* 40-43: Modulo mask into table lower half */ 00139 u_int32_t ffactor; /* 44-47: Fill factor */ 00140 u_int32_t nelem; /* 48-51: Number of keys in hash table */ 00141 u_int32_t h_charkey; /* 52-55: Value of hash(CHARKEY) */ 00142 u_int32_t flags; /* 56-59: Allow duplicates. */ 00143 #define NCACHED2X 32 /* number of spare points */ 00144 /* 60-187: Spare pages for overflow */ 00145 u_int32_t spares[NCACHED2X]; 00146 /* 188-207: Unique file ID. */ 00147 u_int8_t uid[DB_FILE_ID_LEN]; 00148 00149 /* 00150 * Minimum page size is 256. 00151 */ 00152 } HASHHDR; 00153 00154 #endif