2
* PROGRAM: JRD Rebuild scrambled database
4
* DESCRIPTION: Store page headers for analysis
6
* The contents of this file are subject to the Interbase Public
7
* License Version 1.0 (the "License"); you may not use this file
8
* except in compliance with the License. You may obtain a copy
9
* of the License at http://www.Inprise.com/IPL.html
11
* Software distributed under the License is distributed on an
12
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
13
* or implied. See the License for the specific language governing
14
* rights and limitations under the License.
16
* The Original Code was created by Inprise Corporation
17
* and its predecessors. Portions created by Inprise Corporation are
18
* Copyright (C) Inprise Corporation.
20
* All Rights Reserved.
21
* Contributor(s): ______________________________________.
25
#include "../jrd/ibase.h"
26
#include "../utilities/rebuild/rebuild.h"
27
#include "../utilities/rebuild/rebui_proto.h"
28
#include "../utilities/rebuild/rstor_proto.h"
29
#include "../jrd/gds_proto.h"
31
DATABASE DB = STATIC FILENAME "rebuild.fdb";
33
static void store_headers(RBDB);
36
void RSTORE( RBDB rbdb)
38
/**************************************
42
**************************************
44
* Functional description
45
* write the contents of page headers
48
**************************************/
51
isc_print_status(gds__status);
52
printf("can't open the documentaton database\n");
58
isc_print_status(gds__status);
59
printf("can't start a transaction on the documentaton database\n");
69
static void store_headers( RBDB rbdb)
71
/**************************************
73
* s t o r e _ h e a d e r s
75
**************************************
77
* Functional description
78
* write the contents of page headers
81
**************************************/
92
ULONG page_number = 0;
94
while (page = RBDB_read(rbdb, page_number)) {
95
STORE P IN FULL_PAGES USING
97
P.NUMBER = page_number;
98
P.TYPE = page->pag_type;
99
P.FLAGS = page->pag_flags;
100
P.CHECKSUM = page->pag_checksum;
101
P.GENERATION = page->pag_generation;
102
P.RELATION.NULL = TRUE;
103
P.SEQUENCE.NULL = TRUE;
104
P.BLP_LEAD_PAGE.NULL = TRUE;
105
P.BLP_LENGTH.NULL = TRUE;
106
P.BTR_SIBLING.NULL = TRUE;
107
P.BTR_LENGTH.NULL = TRUE;
108
P.BTR_ID.NULL = TRUE;
109
P.BTR_LEVEL.NULL = TRUE;
110
P.DPG_COUNT.NULL = TRUE;
111
P.IRT_COUNT.NULL = TRUE;
112
P.HDR_PAGE_SIZE.NULL = TRUE;
113
P.HDR_ODS_VERSION.NULL = TRUE;
114
P.HDR_PAGES.NULL = TRUE;
115
P.HDR_OLDEST_TRANS.NULL = TRUE;
116
P.HDR_OLDEST_ACTIVE.NULL = TRUE;
117
P.HDR_NEXT_TRANS.NULL = TRUE;
118
P.HDR_FLAGS.NULL = TRUE;
119
P.HDR_CREATION_DATE.NULL = TRUE;
120
P.HDR_ATTACHMENT_ID.NULL = TRUE;
121
P.HDR_IMPLEMENTATION.NULL = TRUE;
122
P.HDR_SHADOW_COUNT.NULL = TRUE;
123
P.PIP_MIN.NULL = TRUE;
124
P.PPG_NEXT.NULL = TRUE;
125
P.PPG_COUNT.NULL = TRUE;
126
P.PPG_MIN_SPACE.NULL = TRUE;
127
P.PPG_MAX_SPACE.NULL = TRUE;
128
P.TIP_NEXT.NULL = TRUE;
131
switch (page->pag_type) {
133
header = (header_page*) page;
134
P.HDR_PAGE_SIZE.NULL = FALSE;
135
P.HDR_ODS_VERSION.NULL = FALSE;
136
P.HDR_PAGES.NULL = FALSE;
137
P.HDR_OLDEST_TRANS.NULL = FALSE;
138
P.HDR_OLDEST_ACTIVE.NULL = FALSE;
139
P.HDR_NEXT_TRANS.NULL = FALSE;
140
P.SEQUENCE.NULL = FALSE;
141
P.HDR_FLAGS.NULL = FALSE;
142
P.HDR_CREATION_DATE.NULL = FALSE;
143
P.HDR_ATTACHMENT_ID.NULL = FALSE;
144
P.HDR_IMPLEMENTATION.NULL = FALSE;
145
P.HDR_SHADOW_COUNT.NULL = FALSE;
146
P.HDR_PAGE_SIZE = header->hdr_page_size;
147
P.HDR_ODS_VERSION = header->hdr_ods_version;
148
P.HDR_PAGES = header->hdr_PAGES;
149
P.HDR_OLDEST_TRANS = header->hdr_oldest_transaction;
150
P.HDR_OLDEST_ACTIVE = header->hdr_oldest_active;
151
P.HDR_NEXT_TRANS = header->hdr_next_transaction;
152
P.SEQUENCE = header->hdr_sequence;
153
P.HDR_FLAGS = header->hdr_flags;
154
temp.gds_quad_high = header->hdr_creation_date[0];
155
temp.gds_quad_low = header->hdr_creation_date[1];
156
P.HDR_CREATION_DATE = temp;
157
P.HDR_ATTACHMENT_ID = header->hdr_attachment_id;
158
P.HDR_IMPLEMENTATION = header->hdr_implementation;
159
P.HDR_SHADOW_COUNT = header->hdr_shadow_count;
163
pip = (page_inv_page*) page;
164
P.PIP_MIN.NULL = FALSE;
165
P.PIP_MIN = pip->pip_min;
168
case pag_transactions:
169
P.TIP_NEXT.NULL = FALSE;
170
P.TIP_NEXT = ((tx_inv_page*) page)->tip_next;
174
pointer = (PPG) page;
175
P.PPG_NEXT.NULL = FALSE;
176
P.PPG_COUNT.NULL = FALSE;
177
P.PPG_MIN_SPACE.NULL = FALSE;
178
P.PPG_MAX_SPACE.NULL = FALSE;
179
P.RELATION.NULL = FALSE;
180
P.SEQUENCE.NULL = FALSE;
181
P.SEQUENCE = pointer->ppg_sequence;
182
P.PPG_NEXT = pointer->ppg_next;
183
P.RELATION = pointer->ppg_relation;
184
P.PPG_COUNT = pointer->ppg_count;
185
P.PPG_MIN_SPACE = pointer->ppg_min_space;
186
P.PPG_MAX_SPACE = pointer->ppg_max_space;
191
P.DPG_COUNT.NULL = FALSE;
192
P.RELATION.NULL = FALSE;
193
P.SEQUENCE.NULL = FALSE;
194
P.SEQUENCE = data->dpg_sequence;
195
P.RELATION = data->dpg_relation;
196
P.DPG_COUNT = data->dpg_count;
200
index_root = (IRT) page;
201
P.IRT_COUNT.NULL = FALSE;
202
P.RELATION.NULL = FALSE;
203
P.IRT_COUNT = index_root->irt_count;
204
P.RELATION = index_root->irt_relation;
209
P.BTR_SIBLING.NULL = FALSE;
210
P.BTR_LENGTH.NULL = FALSE;
211
P.BTR_ID.NULL = FALSE;
212
P.BTR_LEVEL.NULL = FALSE;
213
P.RELATION.NULL = FALSE;
214
P.BTR_SIBLING = bucket->btr_sibling;
215
P.RELATION = bucket->btr_relation;
216
P.BTR_LENGTH = bucket->btr_length;
217
P.BTR_ID = bucket->btr_id;
218
P.BTR_LEVEL = bucket->btr_level;
223
P.BLP_LEAD_PAGE.NULL = FALSE;
224
P.BLP_LENGTH.NULL = FALSE;
225
P.SEQUENCE.NULL = FALSE;
226
P.BLP_LEAD_PAGE = blob->blp_lead_page;
227
P.SEQUENCE = blob->blp_sequence;
228
P.BLP_LENGTH = blob->blp_length;
238
isc_print_status(gds__status);
239
printf("can't store into the documentaton database\n");