acl/lib_dict/bdb/include/db_upgrade.h

243 lines
8.4 KiB
C

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1996-2004
* Sleepycat Software. All rights reserved.
*
* $Id: db_upgrade.h,v 1.12 2004/01/28 03:36:02 bostic Exp $
*/
#ifndef _DB_UPGRADE_H_
#define _DB_UPGRADE_H_
/*
* This file defines the metadata pages from the previous release.
* These structures are only used to upgrade old versions of databases.
*/
/* Structures from the 3.1 release */
typedef struct _dbmeta31 {
DB_LSN lsn; /* 00-07: LSN. */
db_pgno_t pgno; /* 08-11: Current page number. */
u_int32_t magic; /* 12-15: Magic number. */
u_int32_t version; /* 16-19: Version. */
u_int32_t pagesize; /* 20-23: Pagesize. */
u_int8_t unused1[1]; /* 24: Unused. */
u_int8_t type; /* 25: Page type. */
u_int8_t unused2[2]; /* 26-27: Unused. */
u_int32_t free; /* 28-31: Free list page number. */
DB_LSN unused3; /* 36-39: Unused. */
u_int32_t key_count; /* 40-43: Cached key count. */
u_int32_t record_count; /* 44-47: Cached record count. */
u_int32_t flags; /* 48-51: Flags: unique to each AM. */
/* 52-71: Unique file ID. */
u_int8_t uid[DB_FILE_ID_LEN];
} DBMETA31;
typedef struct _btmeta31 {
DBMETA31 dbmeta; /* 00-71: Generic meta-data header. */
u_int32_t maxkey; /* 72-75: Btree: Maxkey. */
u_int32_t minkey; /* 76-79: Btree: Minkey. */
u_int32_t re_len; /* 80-83: Recno: fixed-length record length. */
u_int32_t re_pad; /* 84-87: Recno: fixed-length record pad. */
u_int32_t root; /* 88-92: Root page. */
/*
* Minimum page size is 128.
*/
} BTMETA31;
/************************************************************************
HASH METADATA PAGE LAYOUT
************************************************************************/
typedef struct _hashmeta31 {
DBMETA31 dbmeta; /* 00-71: Generic meta-data page header. */
u_int32_t max_bucket; /* 72-75: ID of Maximum bucket in use */
u_int32_t high_mask; /* 76-79: Modulo mask into table */
u_int32_t low_mask; /* 80-83: Modulo mask into table lower half */
u_int32_t ffactor; /* 84-87: Fill factor */
u_int32_t nelem; /* 88-91: Number of keys in hash table */
u_int32_t h_charkey; /* 92-95: Value of hash(CHARKEY) */
#define NCACHED 32 /* number of spare points */
/* 96-223: Spare pages for overflow */
u_int32_t spares[NCACHED];
/*
* Minimum page size is 256.
*/
} HMETA31;
/*
* QAM Meta data page structure
*
*/
typedef struct _qmeta31 {
DBMETA31 dbmeta; /* 00-71: Generic meta-data header. */
u_int32_t start; /* 72-75: Start offset. */
u_int32_t first_recno; /* 76-79: First not deleted record. */
u_int32_t cur_recno; /* 80-83: Last recno allocated. */
u_int32_t re_len; /* 84-87: Fixed-length record length. */
u_int32_t re_pad; /* 88-91: Fixed-length record pad. */
u_int32_t rec_page; /* 92-95: Records Per Page. */
/*
* Minimum page size is 128.
*/
} QMETA31;
/* Structures from the 3.2 release */
typedef struct _qmeta32 {
DBMETA31 dbmeta; /* 00-71: Generic meta-data header. */
u_int32_t first_recno; /* 72-75: First not deleted record. */
u_int32_t cur_recno; /* 76-79: Last recno allocated. */
u_int32_t re_len; /* 80-83: Fixed-length record length. */
u_int32_t re_pad; /* 84-87: Fixed-length record pad. */
u_int32_t rec_page; /* 88-91: Records Per Page. */
u_int32_t page_ext; /* 92-95: Pages per extent */
/*
* Minimum page size is 128.
*/
} QMETA32;
/* Structures from the 3.0 release */
typedef struct _dbmeta30 {
DB_LSN lsn; /* 00-07: LSN. */
db_pgno_t pgno; /* 08-11: Current page number. */
u_int32_t magic; /* 12-15: Magic number. */
u_int32_t version; /* 16-19: Version. */
u_int32_t pagesize; /* 20-23: Pagesize. */
u_int8_t unused1[1]; /* 24: Unused. */
u_int8_t type; /* 25: Page type. */
u_int8_t unused2[2]; /* 26-27: Unused. */
u_int32_t free; /* 28-31: Free list page number. */
u_int32_t flags; /* 32-35: Flags: unique to each AM. */
/* 36-55: Unique file ID. */
u_int8_t uid[DB_FILE_ID_LEN];
} DBMETA30;
/************************************************************************
BTREE METADATA PAGE LAYOUT
************************************************************************/
typedef struct _btmeta30 {
DBMETA30 dbmeta; /* 00-55: Generic meta-data header. */
u_int32_t maxkey; /* 56-59: Btree: Maxkey. */
u_int32_t minkey; /* 60-63: Btree: Minkey. */
u_int32_t re_len; /* 64-67: Recno: fixed-length record length. */
u_int32_t re_pad; /* 68-71: Recno: fixed-length record pad. */
u_int32_t root; /* 72-75: Root page. */
/*
* Minimum page size is 128.
*/
} BTMETA30;
/************************************************************************
HASH METADATA PAGE LAYOUT
************************************************************************/
typedef struct _hashmeta30 {
DBMETA30 dbmeta; /* 00-55: Generic meta-data page header. */
u_int32_t max_bucket; /* 56-59: ID of Maximum bucket in use */
u_int32_t high_mask; /* 60-63: Modulo mask into table */
u_int32_t low_mask; /* 64-67: Modulo mask into table lower half */
u_int32_t ffactor; /* 68-71: Fill factor */
u_int32_t nelem; /* 72-75: Number of keys in hash table */
u_int32_t h_charkey; /* 76-79: Value of hash(CHARKEY) */
#define NCACHED30 32 /* number of spare points */
/* 80-207: Spare pages for overflow */
u_int32_t spares[NCACHED30];
/*
* Minimum page size is 256.
*/
} HMETA30;
/************************************************************************
QUEUE METADATA PAGE LAYOUT
************************************************************************/
/*
* QAM Meta data page structure
*
*/
typedef struct _qmeta30 {
DBMETA30 dbmeta; /* 00-55: Generic meta-data header. */
u_int32_t start; /* 56-59: Start offset. */
u_int32_t first_recno; /* 60-63: First not deleted record. */
u_int32_t cur_recno; /* 64-67: Last recno allocated. */
u_int32_t re_len; /* 68-71: Fixed-length record length. */
u_int32_t re_pad; /* 72-75: Fixed-length record pad. */
u_int32_t rec_page; /* 76-79: Records Per Page. */
/*
* Minimum page size is 128.
*/
} QMETA30;
/* Structures from Release 2.x */
/************************************************************************
BTREE METADATA PAGE LAYOUT
************************************************************************/
/*
* Btree metadata page layout:
*/
typedef struct _btmeta2X {
DB_LSN lsn; /* 00-07: LSN. */
db_pgno_t pgno; /* 08-11: Current page number. */
u_int32_t magic; /* 12-15: Magic number. */
u_int32_t version; /* 16-19: Version. */
u_int32_t pagesize; /* 20-23: Pagesize. */
u_int32_t maxkey; /* 24-27: Btree: Maxkey. */
u_int32_t minkey; /* 28-31: Btree: Minkey. */
u_int32_t free; /* 32-35: Free list page number. */
u_int32_t flags; /* 36-39: Flags. */
u_int32_t re_len; /* 40-43: Recno: fixed-length record length. */
u_int32_t re_pad; /* 44-47: Recno: fixed-length record pad. */
/* 48-67: Unique file ID. */
u_int8_t uid[DB_FILE_ID_LEN];
} BTMETA2X;
/************************************************************************
HASH METADATA PAGE LAYOUT
************************************************************************/
/*
* Hash metadata page layout:
*/
/* Hash Table Information */
typedef struct hashhdr { /* Disk resident portion */
DB_LSN lsn; /* 00-07: LSN of the header page */
db_pgno_t pgno; /* 08-11: Page number (btree compatibility). */
u_int32_t magic; /* 12-15: Magic NO for hash tables */
u_int32_t version; /* 16-19: Version ID */
u_int32_t pagesize; /* 20-23: Bucket/Page Size */
u_int32_t ovfl_point; /* 24-27: Overflow page allocation location */
u_int32_t last_freed; /* 28-31: Last freed overflow page pgno */
u_int32_t max_bucket; /* 32-35: ID of Maximum bucket in use */
u_int32_t high_mask; /* 36-39: Modulo mask into table */
u_int32_t low_mask; /* 40-43: Modulo mask into table lower half */
u_int32_t ffactor; /* 44-47: Fill factor */
u_int32_t nelem; /* 48-51: Number of keys in hash table */
u_int32_t h_charkey; /* 52-55: Value of hash(CHARKEY) */
u_int32_t flags; /* 56-59: Allow duplicates. */
#define NCACHED2X 32 /* number of spare points */
/* 60-187: Spare pages for overflow */
u_int32_t spares[NCACHED2X];
/* 188-207: Unique file ID. */
u_int8_t uid[DB_FILE_ID_LEN];
/*
* Minimum page size is 256.
*/
} HASHHDR;
#endif /* !_DB_UPGRADE_H_ */