From: Claudio V. C. <ro...@us...> - 2004-07-10 03:21:10
|
Update of /cvsroot/firebird/firebird2/src/jrd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5701/src/jrd Modified Files: blb.cpp btn.cpp btr.cpp cch.cpp dpm.epp nav.cpp nbak.cpp ods.h pag.cpp sdw.cpp tra.cpp val.cpp Log Message: Undo inheritance in ODS page types as requested by Nickolay. Either some macros are too silly or the compiler is limited by the standard here. Notice I may have missed some file that's not compiled in Win32. Index: blb.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/blb.cpp,v retrieving revision 1.82 retrieving revision 1.83 diff -b -U3 -r1.82 -r1.83 --- blb.cpp 22 Jun 2004 20:13:08 -0000 1.82 +++ blb.cpp 10 Jul 2004 03:20:08 -0000 1.83 @@ -264,7 +264,7 @@ /* Set up for a "small" blob -- a blob that fits on an ordinary data page */ blob_page* page = (blob_page*) blob->blb_data; - page->pag_type = pag_blob; + page->blp_header.pag_type = pag_blob; blob->blb_segment = (UCHAR *) page->blp_page; /* Format blob id and return blob handle */ @@ -2212,8 +2212,8 @@ blob->blb_level = 2; page = (blob_page*) DPM_allocate(tdbb, &window); - page->pag_flags = Ods::blp_pointers; - page->pag_type = pag_blob; + page->blp_header.pag_flags = Ods::blp_pointers; + page->blp_header.pag_type = pag_blob; page->blp_lead_page = blob->blb_lead_page; page->blp_length = vector->count() << SHIFTLONG; MOVE_FASTER(vector->memPtr(), page->blp_page, page->blp_length); @@ -2234,8 +2234,8 @@ } else { page = (blob_page*) DPM_allocate(tdbb, &window); - page->pag_flags = Ods::blp_pointers; - page->pag_type = pag_blob; + page->blp_header.pag_flags = Ods::blp_pointers; + page->blp_header.pag_type = pag_blob; page->blp_lead_page = blob->blb_lead_page; vector->resize(l + 1); (*vector)[l] = window.win_page; Index: btn.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/btn.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -b -U3 -r1.12 -r1.13 --- btn.cpp 28 Mar 2004 09:10:14 -0000 1.12 +++ btn.cpp 10 Jul 2004 03:20:08 -0000 1.13 @@ -81,7 +81,7 @@ * **************************************/ const bool leafPage = (page->btr_level == 0); - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; IndexNode node, previousNode; pointer = readNode(&node, pointer, flags, leafPage); @@ -327,7 +327,7 @@ * node is returned. * **************************************/ - if (page->pag_flags & btr_jump_info) { + if (page->btr_header.pag_flags & btr_jump_info) { if (jumpInfo) { UCHAR* pointer = reinterpret_cast<UCHAR*>(page->btr_nodes); return readJumpInfo(jumpInfo, pointer); Index: btr.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/btr.cpp,v retrieving revision 1.96 retrieving revision 1.97 diff -b -U3 -r1.96 -r1.97 --- btr.cpp 22 Jun 2004 20:13:08 -0000 1.96 +++ btr.cpp 10 Jul 2004 03:20:08 -0000 1.97 @@ -447,7 +447,7 @@ prefix = 0; } - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; // if there is an upper bound, scan the index pages looking for it if (retrieval->irb_upper_count) { while (scan(tdbb, pointer, bitmap, (idx.idx_count - retrieval->irb_upper_count), @@ -600,7 +600,7 @@ pointer = BTreeNode::getPointerFirstNode(page); } - BTreeNode::readNode(&node, pointer, page->pag_flags, false); + BTreeNode::readNode(&node, pointer, page->btr_header.pag_flags, false); page = (btree_page*) CCH_HANDOFF(tdbb, window, node.pageNumber, LCK_read, pag_index); @@ -666,7 +666,7 @@ // since it is the root page it won't be garbage-collected anyway, // so go ahead and mark it as garbage-collectable now. CCH_MARK(tdbb, &window); - bucket->pag_flags &= ~btr_dont_gc; + bucket->btr_header.pag_flags &= ~btr_dont_gc; WIN new_window(split_page); btree_page* new_bucket = @@ -688,17 +688,17 @@ } // Allocate and format new bucket, this will always be a non-leaf page - const SCHAR flags = bucket->pag_flags; + const SCHAR flags = bucket->btr_header.pag_flags; new_bucket = (btree_page*) DPM_allocate(tdbb, &new_window); CCH_precedence(tdbb, &new_window, window.win_page); - new_bucket->pag_type = pag_index; + new_bucket->btr_header.pag_type = pag_index; new_bucket->btr_relation = bucket->btr_relation; new_bucket->btr_level = bucket->btr_level + 1; new_bucket->btr_id = bucket->btr_id; - new_bucket->pag_flags |= (flags & BTR_FLAG_COPY_MASK); + new_bucket->btr_header.pag_flags |= (flags & BTR_FLAG_COPY_MASK); UCHAR *pointer; - const bool useJumpInfo = (bucket->pag_flags & btr_jump_info); + const bool useJumpInfo = (bucket->btr_header.pag_flags & btr_jump_info); if (useJumpInfo) { IndexJumpInfo jumpInfo; // First get jumpinfo from the level deeper, because we need @@ -1363,7 +1363,7 @@ // get the page number of the child, and check to make sure // the page still has only one node on it UCHAR *pointer = BTreeNode::getPointerFirstNode(page); - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; IndexNode pageNode; pointer = BTreeNode::readNode(&pageNode, pointer, flags, false); @@ -1546,7 +1546,7 @@ window.win_flags = WIN_large_scan; window.win_scans = 1; btree_page* bucket = (btree_page*) CCH_HANDOFF(tdbb, &window, page, LCK_read, pag_index); - SCHAR flags = bucket->pag_flags; + SCHAR flags = bucket->btr_header.pag_flags; // go down the left side of the index to leaf level UCHAR* pointer = BTreeNode::getPointerFirstNode(bucket); @@ -1556,7 +1556,7 @@ bucket = (btree_page*) CCH_HANDOFF(tdbb, &window, pageNode.pageNumber, LCK_read, pag_index); pointer = BTreeNode::getPointerFirstNode(bucket); - flags = bucket->pag_flags; + flags = bucket->btr_header.pag_flags; page = pageNode.pageNumber; } @@ -1683,7 +1683,7 @@ } bucket = (btree_page*) CCH_HANDOFF_TAIL(tdbb, &window, page, LCK_read, pag_index); pointer = BTreeNode::getPointerFirstNode(bucket); - flags = bucket->pag_flags; + flags = bucket->btr_header.pag_flags; } CCH_RELEASE_TAIL(tdbb, &window); @@ -1812,7 +1812,7 @@ window->win_page = page; bucket = (btree_page*) CCH_FETCH(tdbb, window, LCK_write, pag_index); CCH_MARK(tdbb, window); - bucket->pag_flags &= ~btr_dont_gc; + bucket->btr_header.pag_flags &= ~btr_dont_gc; CCH_RELEASE(tdbb, window); if (original_page) { @@ -2273,7 +2273,7 @@ CCH_MARK(tdbb, window); - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; const bool leafPage = (page->btr_level == 0); const bool useJumpInfo = (flags & btr_jump_info); //const SLONG nodeOffset = pointer - (UCHAR*)page; @@ -2459,7 +2459,7 @@ // the page header uses a byte for its index id. This requires relaxing // the check slightly introducing a risk that we'll pick up a page belonging // to some other index that is ours +/- (256*n). On the whole, unlikely. - if (page->pag_type != pag_index || + if (page->btr_header.pag_type != pag_index || page->btr_id != (UCHAR)(idx_id % 256) || page->btr_relation != rel_id) { CCH_RELEASE(tdbb, &window); @@ -2473,7 +2473,7 @@ UCHAR *pointer = BTreeNode::getPointerFirstNode(page); IndexNode pageNode; BTreeNode::readNode(&pageNode, pointer, - page->pag_flags, false); + page->btr_header.pag_flags, false); down = pageNode.pageNumber; } else { @@ -2645,12 +2645,12 @@ // located through the index structure (dmp being an exception used // only for debug) so the id is actually redundant. btree_page* bucket = (btree_page*) DPM_allocate(tdbb, &windows[0]); - bucket->pag_type = pag_index; + bucket->btr_header.pag_type = pag_index; bucket->btr_relation = relation->rel_id; bucket->btr_id = (UCHAR)(idx->idx_id % 256); bucket->btr_level = 0; bucket->btr_length = BTR_SIZE; - bucket->pag_flags |= flags; + bucket->btr_header.pag_flags |= flags; #ifdef DEBUG_BTR_PAGES sprintf(debugtext, "\t new page (%d)", windows[0].win_page); gds__log(debugtext); @@ -2792,11 +2792,11 @@ btree_page* split = (btree_page*) DPM_allocate(tdbb, &split_window); bucket->btr_sibling = split_window.win_page; split->btr_left_sibling = windows[0].win_page; - split->pag_type = pag_index; + split->btr_header.pag_type = pag_index; split->btr_relation = bucket->btr_relation; split->btr_level = bucket->btr_level; split->btr_id = bucket->btr_id; - split->pag_flags |= flags; + split->btr_header.pag_flags |= flags; #ifdef DEBUG_BTR_PAGES sprintf(debugtext, "\t new page (%d), left page (%d)", split_window.win_page, split->btr_left_sibling); @@ -2975,12 +2975,12 @@ if (!(bucket = buckets[level])) { buckets[level + 1] = NULL; buckets[level] = bucket = (btree_page*) DPM_allocate(tdbb, window); - bucket->pag_type = pag_index; + bucket->btr_header.pag_type = pag_index; bucket->btr_relation = relation->rel_id; bucket->btr_id = (UCHAR)(idx->idx_id % 256); fb_assert(level <= MAX_UCHAR); bucket->btr_level = (UCHAR) level; - bucket->pag_flags |= flags; + bucket->btr_header.pag_flags |= flags; #ifdef DEBUG_BTR_PAGES sprintf(debugtext, "\t new page (%d)", window->win_page); gds__log(debugtext); @@ -3088,11 +3088,11 @@ btree_page* split = (btree_page*) DPM_allocate(tdbb, &split_window); bucket->btr_sibling = split_window.win_page; split->btr_left_sibling = window->win_page; - split->pag_type = pag_index; + split->btr_header.pag_type = pag_index; split->btr_relation = bucket->btr_relation; split->btr_level = bucket->btr_level; split->btr_id = bucket->btr_id; - split->pag_flags |= flags; + split->btr_header.pag_flags |= flags; #ifdef DEBUG_BTR_PAGES sprintf(debugtext, "\t new page (%d), left page (%d)", split_window.win_page, split->btr_left_sibling); @@ -3380,7 +3380,7 @@ * **************************************/ - const SCHAR flags = bucket->pag_flags; + const SCHAR flags = bucket->btr_header.pag_flags; USHORT prefix = 0; const UCHAR* const key_end = key->key_data + key->key_length; if (!(flags & btr_all_record_number)) { @@ -3620,7 +3620,7 @@ * a node at a specific offset. * **************************************/ - const SCHAR flags = bucket->pag_flags; + const SCHAR flags = bucket->btr_header.pag_flags; UCHAR *pointer; USHORT prefix = 0; if (flags & btr_jump_info) { @@ -3824,7 +3824,7 @@ * **************************************/ - const SCHAR flags = bucket->pag_flags; + const SCHAR flags = bucket->btr_header.pag_flags; const bool leafPage = (bucket->btr_level == 0); bool firstPass = true; const bool descending = (idx_flags & idx_descending); @@ -4107,7 +4107,7 @@ CONTENTS result = contents_above_threshold; // check to see if the page was marked not to be garbage collected - if (gc_page->pag_flags & btr_dont_gc) { + if (gc_page->btr_header.pag_flags & btr_dont_gc) { CCH_RELEASE(tdbb, window); return contents_above_threshold; } @@ -4150,7 +4150,7 @@ WIN parent_window(parent_number); btree_page* parent_page = (btree_page*) CCH_FETCH(tdbb, &parent_window, LCK_write, pag_undefined); - if ((parent_page->pag_type != pag_index) + if ((parent_page->btr_header.pag_type != pag_index) || (parent_page->btr_relation != relation_number) || (parent_page->btr_id != (UCHAR)(index_id % 256)) || (parent_page->btr_level != index_level + 1)) @@ -4188,7 +4188,7 @@ // below the threshold for garbage collection. gc_page = (btree_page*) CCH_FETCH(tdbb, window, LCK_write, pag_index); if ((gc_page->btr_length >= GARBAGE_COLLECTION_BELOW_THRESHOLD) - || (gc_page->pag_flags & btr_dont_gc)) + || (gc_page->btr_header.pag_flags & btr_dont_gc)) { CCH_RELEASE(tdbb, &parent_window); CCH_RELEASE(tdbb, &left_window); @@ -4217,9 +4217,9 @@ } } - const SCHAR flags = gc_page->pag_flags; + const SCHAR flags = gc_page->btr_header.pag_flags; // Check if flags are valid. - if ((parent_page->pag_flags & BTR_FLAG_COPY_MASK) != + if ((parent_page->btr_header.pag_flags & BTR_FLAG_COPY_MASK) != (flags & BTR_FLAG_COPY_MASK)) { CORRUPT(204); // msg 204 index inconsistent @@ -4286,7 +4286,7 @@ // find the last node on the left sibling and save its key value // Check if flags are valid. - if ((left_page->pag_flags & BTR_FLAG_COPY_MASK) != + if ((left_page->btr_header.pag_flags & BTR_FLAG_COPY_MASK) != (flags & BTR_FLAG_COPY_MASK)) { CORRUPT(204); // msg 204 index inconsistent @@ -4342,7 +4342,7 @@ // see if there's enough space on the left page to move all the nodes to it // and leave some extra space for expansion (at least one key length) - const SCHAR gcFlags = gc_page->pag_flags; + const SCHAR gcFlags = gc_page->btr_header.pag_flags; UCHAR* gcPointer = BTreeNode::getPointerFirstNode(gc_page); IndexNode gcNode; BTreeNode::readNode(&gcNode, gcPointer, gcFlags, leafPage); @@ -4389,7 +4389,7 @@ // Update leftPointer to scratch page. leftPointer = (UCHAR*)newBucket + (leftPointer - (UCHAR*)left_page) - jumpersOriginalSize; - const SCHAR flags2 = newBucket->pag_flags; + const SCHAR flags2 = newBucket->btr_header.pag_flags; gcPointer = BTreeNode::getPointerFirstNode(gc_page); // BTreeNode::readNode(&leftNode, leftPointer, flags2, leafPage); @@ -4612,7 +4612,7 @@ window->win_page = parent_window.win_page; parent_page = (btree_page*) CCH_FETCH(tdbb, window, LCK_write, pag_undefined); - if ((parent_page->pag_type != pag_index) + if ((parent_page->btr_header.pag_type != pag_index) || (parent_page->btr_relation != relation_number) || (parent_page->btr_id != index_id) || (parent_page->btr_level != index_level + 1)) @@ -4673,7 +4673,7 @@ IndexJumpInfo jumpInfo; BTreeNode::getPointerFirstNode(page, &jumpInfo); - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; const bool leafPage = (page->btr_level == 0); *jumpersSize = 0; @@ -4831,7 +4831,7 @@ // find the insertion point for the specified key btree_page* bucket = (btree_page*) window->win_buffer; - const SCHAR flags = bucket->pag_flags; + const SCHAR flags = bucket->btr_header.pag_flags; temporary_key* key = insertion->iib_key; const bool unique = (insertion->iib_descriptor->idx_flags & idx_unique); @@ -5255,13 +5255,13 @@ // format the new page to look like the old page SLONG right_sibling = bucket->btr_sibling; - split->pag_type = bucket->pag_type; + split->btr_header.pag_type = bucket->btr_header.pag_type; split->btr_relation = bucket->btr_relation; split->btr_id = bucket->btr_id; split->btr_level = bucket->btr_level; split->btr_sibling = right_sibling; split->btr_left_sibling = window->win_page; - split->pag_flags |= (flags & BTR_FLAG_COPY_MASK); + split->btr_header.pag_flags |= (flags & BTR_FLAG_COPY_MASK); // Format the first node on the overflow page newNode.prefix = 0; @@ -5381,7 +5381,7 @@ // mark the bucket as non garbage-collectable until we can propagate // the split page up to the parent; otherwise its possible that the // split page we just created will be lost. - bucket->pag_flags |= btr_dont_gc; + bucket->btr_header.pag_flags |= btr_dont_gc; if (original_page) { *original_page = window->win_page; @@ -5583,7 +5583,7 @@ } // Make sure first node looks ok - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; IndexNode node; pointer = BTreeNode::readNode(&node, pointer, flags, true); if (prefix > node.prefix Index: cch.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/cch.cpp,v retrieving revision 1.98 retrieving revision 1.99 diff -b -U3 -r1.98 -r1.99 --- cch.cpp 12 Jun 2004 01:06:05 -0000 1.98 +++ cch.cpp 10 Jul 2004 03:20:08 -0000 1.99 @@ -2579,7 +2579,7 @@ } header->hdr_flags |= hdr_active_shadow; - header->pag_checksum = CCH_checksum(bdb); + header->hdr_header.pag_checksum = CCH_checksum(bdb); } /* This condition makes sure that PIO_write is performed in case of Index: dpm.epp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/dpm.epp,v retrieving revision 1.51 retrieving revision 1.52 diff -b -U3 -r1.51 -r1.52 --- dpm.epp 7 Jul 2004 03:47:11 -0000 1.51 +++ dpm.epp 10 Jul 2004 03:20:08 -0000 1.52 @@ -444,7 +444,7 @@ MOVE_FASTER(temp_page + space, (UCHAR *) page + space, dbb->dbb_page_size - space); - if (page->pag_type != pag_data) { + if (page->dpg_header.pag_type != pag_data) { BUGCHECK(251); /* msg 251 damaged data page */ } @@ -476,9 +476,9 @@ /* Allocate first pointer page */ WIN window(-1); pointer_page* page = (pointer_page*) DPM_allocate(tdbb, &window); - page->pag_type = pag_pointer; + page->ppg_header.pag_type = pag_pointer; page->ppg_relation = relation->rel_id; - page->pag_flags = ppg_eof; + page->ppg_header.pag_flags = ppg_eof; CCH_RELEASE(tdbb, &window); /* If this is relation 0 (RDB$PAGES), update the header */ @@ -504,7 +504,7 @@ /* Create an index root page */ WIN root_window(-1); index_root_page* root = (index_root_page*) DPM_allocate(tdbb, &root_window); - root->pag_type = pag_root; + root->irt_header.pag_type = pag_root; root->irt_relation = relation->rel_id; /*root->irt_count = 0;*/ CCH_RELEASE(tdbb, &root_window); @@ -557,7 +557,7 @@ pages++; } } - if (ppage->pag_flags & ppg_eof) { + if (ppage->ppg_header.pag_flags & ppg_eof) { break; } CCH_RELEASE(tdbb, &window); @@ -658,9 +658,9 @@ /* If the page is not empty and used to be marked as full, change the state of both the page and the appropriate pointer page. */ - if (count && (page->pag_flags & dpg_full)) { + if (count && (page->dpg_header.pag_flags & dpg_full)) { DEBUG - page->pag_flags &= ~dpg_full; + page->dpg_header.pag_flags &= ~dpg_full; mark_full(tdbb, rpb); #ifdef VIO_DEBUG @@ -670,7 +670,7 @@ return; } - const UCHAR flags = page->pag_flags; + const UCHAR flags = page->dpg_header.pag_flags; CCH_RELEASE(tdbb, window); /* If the page is non-empty, we're done. */ @@ -833,7 +833,7 @@ } PAG_release_page(*page, 0); } - const UCHAR pag_flags = ppage->pag_flags; + const UCHAR pag_flags = ppage->ppg_header.pag_flags; CCH_RELEASE_TAIL(tdbb, &window); PAG_release_page(window.win_page, 0); if (pag_flags & ppg_eof) @@ -1088,7 +1088,7 @@ (sequence >= vector->count()) || !((*vector)[sequence])) { generator_page* page = (generator_page*) DPM_allocate(tdbb, &window); - page->pag_type = pag_ids; + page->gpg_header.pag_type = pag_ids; page->gpg_sequence = sequence; CCH_must_write(&window); CCH_RELEASE(tdbb, &window); @@ -1603,7 +1603,7 @@ } } - const SSHORT flags = ppage->pag_flags; + const SSHORT flags = ppage->ppg_header.pag_flags; if (backwards) { pp_sequence--; slot = ppage->ppg_count - 1; @@ -1978,8 +1978,8 @@ } data_page* page = (data_page*) rpb.rpb_window.win_buffer; - if (blob->blb_level && !(page->pag_flags & dpg_large)) { - page->pag_flags |= dpg_large; + if (blob->blb_level && !(page->dpg_header.pag_flags & dpg_large)) { + page->dpg_header.pag_flags |= dpg_large; mark_full(tdbb, &rpb); } else { @@ -2524,10 +2524,10 @@ slot = ppage->ppg_count; break; } - if (ppage->pag_flags & ppg_eof) { + if (ppage->ppg_header.pag_flags & ppg_eof) { ppage = (pointer_page*) DPM_allocate(tdbb, &new_pp_window); - ppage->pag_type = pag_pointer; - ppage->pag_flags |= ppg_eof; + ppage->ppg_header.pag_type = pag_pointer; + ppage->ppg_header.pag_flags |= ppg_eof; ppage->ppg_relation = relation->rel_id; ppage->ppg_sequence = ++pp_sequence; slot = 0; @@ -2546,7 +2546,7 @@ ppage = (pointer_page*) pp_window.win_buffer; CCH_MARK(tdbb, &pp_window); - ppage->pag_flags &= ~ppg_eof; + ppage->ppg_header.pag_flags &= ~ppg_eof; ppage->ppg_next = new_pp_window.win_page; ppage = (pointer_page*) CCH_HANDOFF(tdbb, &pp_window, new_pp_window.win_page, @@ -2580,7 +2580,7 @@ CCH_MARK(tdbb, window); dpage->dpg_sequence = (SLONG) pp_sequence *dbb->dbb_dp_per_pp + slot; dpage->dpg_relation = relation->rel_id; - dpage->pag_type = pag_data; + dpage->dpg_header.pag_type = pag_data; relation->rel_data_space = pp_sequence; CCH_RELEASE(tdbb, window); @@ -2676,7 +2676,7 @@ if (aligned_size > (int) dbb->dbb_page_size - used) { CCH_MARK(tdbb, &rpb->rpb_window); - page->pag_flags |= dpg_full; + page->dpg_header.pag_flags |= dpg_full; mark_full(tdbb, rpb); return NULL; } @@ -2896,7 +2896,7 @@ ppage = (pointer_page*) CCH_FETCH(tdbb, window, LCK_read, pag_pointer); } } - const UCHAR flags = ppage->pag_flags; + const UCHAR flags = ppage->ppg_header.pag_flags; CCH_RELEASE(tdbb, window); if (flags & ppg_eof) { break; @@ -3006,7 +3006,7 @@ } while (!dpage); - const UCHAR flags = dpage->pag_flags; + const UCHAR flags = dpage->dpg_header.pag_flags; CCH_RELEASE(tdbb, &rpb->rpb_window); CCH_precedence(tdbb, &pp_window, rpb->rpb_window.win_page); @@ -3101,8 +3101,8 @@ /* Allocate and format data page and fragment header */ data_page* page = (data_page*) DPM_allocate(tdbb, &rpb->rpb_window); - page->pag_type = pag_data; - page->pag_flags = dpg_orphan | dpg_full; + page->dpg_header.pag_type = pag_data; + page->dpg_header.pag_flags = dpg_orphan | dpg_full; page->dpg_relation = rpb->rpb_relation->rel_id; page->dpg_count = 1; rhdf* header = (RHDF) & page->dpg_rpt[1]; @@ -3211,8 +3211,8 @@ } #endif - if (!(page->pag_flags & dpg_large)) { - page->pag_flags |= dpg_large; + if (!(page->dpg_header.pag_flags & dpg_large)) { + page->dpg_header.pag_flags |= dpg_large; mark_full(tdbb, rpb); } else { Index: nav.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/nav.cpp,v retrieving revision 1.42 retrieving revision 1.43 diff -b -U3 -r1.42 -r1.43 --- nav.cpp 8 Jun 2004 13:39:35 -0000 1.42 +++ nav.cpp 10 Jul 2004 03:20:08 -0000 1.43 @@ -583,7 +583,7 @@ Ods::IndexNode node; while (true) { Ods::btree_page* page = (Ods::btree_page*) window.win_buffer; - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; UCHAR* pointer = nextPointer; btree_exp* expanded_node = expanded_next; @@ -1327,7 +1327,7 @@ } btree_exp* expanded_node = expanded_page->exp_nodes; - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; UCHAR* pointer = BTreeNode::getPointerFirstNode(page); const UCHAR* const endPointer = ((UCHAR*) page + page->btr_length); Ods::IndexNode node; @@ -1371,7 +1371,7 @@ // looking for the node (in case the page has split); // the inner loop goes through the nodes on each page temporary_key key; - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; Ods::IndexNode node; while (true) { UCHAR* pointer = BTreeNode::getPointerFirstNode(page); @@ -1484,7 +1484,7 @@ #endif UCHAR* pointer = 0; - const SCHAR flags = page->pag_flags; + const SCHAR flags = page->btr_header.pag_flags; const SLONG incarnation = CCH_get_incarnation(window); Ods::IndexNode node; if (incarnation == impure->irsb_nav_incarnation) { @@ -1782,7 +1782,7 @@ } Ods::IndexNode node; - BTreeNode::readNode(&node, pointer, page->pag_flags, true); + BTreeNode::readNode(&node, pointer, page->btr_header.pag_flags, true); impure->irsb_nav_length = node.prefix + node.length; Index: nbak.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/nbak.cpp,v retrieving revision 1.40 retrieving revision 1.41 diff -b -U3 -r1.40 -r1.41 --- nbak.cpp 30 Jun 2004 01:38:57 -0000 1.40 +++ nbak.cpp 10 Jul 2004 03:20:08 -0000 1.41 @@ -572,7 +572,7 @@ // This number may be smaller than actual because some pages may be not flushed to // disk yet. This is not a problem as it can cause only a slight performance degradation backup_pages = header->hdr_backup_pages = PIO_act_alloc(database); - const ULONG adjusted_scn = ++header->pag_scn; // Generate new SCN + const ULONG adjusted_scn = ++header->hdr_header.pag_scn; // Generate new SCN PAG_replace_entry_first(header, Ods::HDR_backup_guid, sizeof(guid), reinterpret_cast<const UCHAR*>(&guid)); @@ -668,7 +668,7 @@ CCH_MARK_MUST_WRITE(tdbb, &window); NBAK_TRACE(("New state is getting to become after fetches %d", backup_state)); // Generate new SCN - header->pag_scn = current_scn; + header->hdr_header.pag_scn = current_scn; NBAK_TRACE(("new SCN=%d is getting written to header", adjusted_scn)); // Adjust state header->hdr_flags = (header->hdr_flags & ~Ods::hdr_backup_mask) | backup_state; @@ -755,7 +755,7 @@ header->hdr_flags = (header->hdr_flags & ~Ods::hdr_backup_mask) | backup_state; NBAK_TRACE(("Set state %d in header page", backup_state)); // Generate new SCN - header->pag_scn = ++current_scn; + header->hdr_header.pag_scn = ++current_scn; NBAK_TRACE(("new SCN=%d is getting written to header")); header_locked = false; CCH_RELEASE(tdbb, &window); @@ -1066,7 +1066,7 @@ BufferDesc temp_bdb; temp_bdb.bdb_page = HEADER_PAGE; temp_bdb.bdb_dbb = database; - temp_bdb.bdb_buffer = header; + temp_bdb.bdb_buffer = reinterpret_cast<Ods::pag*>(header); jrd_file* file = database->dbb_file; while (!PIO_read(file, &temp_bdb, temp_bdb.bdb_buffer, status)) { if (!CCH_rollover_to_shadow(database, file, false)) { @@ -1087,8 +1087,8 @@ NBAK_TRACE(("backup state read from header is %d", new_backup_state)); // Check is we missed lock/unlock cycle and need to invalidate // our allocation table and file handle - const bool missed_cycle = (header->pag_scn - current_scn) > 1; - current_scn = header->pag_scn; + const bool missed_cycle = (header->hdr_header.pag_scn - current_scn) > 1; + current_scn = header->hdr_header.pag_scn; backup_pages = header->hdr_backup_pages; // Read difference file name from header clumplets Index: ods.h =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/ods.h,v retrieving revision 1.27 retrieving revision 1.28 diff -b -U3 -r1.27 -r1.28 --- ods.h 13 Jun 2004 23:42:20 -0000 1.27 +++ ods.h 10 Jul 2004 03:20:08 -0000 1.28 @@ -175,9 +175,9 @@ /* Blob page */ -struct blob_page : public pag +struct blob_page { - //pag blp_header; + pag blp_header; SLONG blp_lead_page; /* First page of blob (for redundancy only) */ SLONG blp_sequence; /* Sequence within blob */ USHORT blp_length; /* Bytes on page */ @@ -204,9 +204,9 @@ const int BTN_SIZE = 6; // B-tree page ("bucket") -struct btree_page : public pag +struct btree_page { - //pag btr_header; + pag btr_header; SLONG btr_sibling; // right sibling page SLONG btr_left_sibling; // left sibling page SLONG btr_prefix_total; // sum of all prefixes on page @@ -260,9 +260,9 @@ /* Data Page */ -struct data_page : public pag +struct data_page { - // pag dpg_header; + pag dpg_header; SLONG dpg_sequence; /* Sequence number in relation */ USHORT dpg_relation; /* Relation id */ USHORT dpg_count; /* Number of record segments on page */ @@ -282,9 +282,9 @@ /* Index root page */ -struct index_root_page : public pag +struct index_root_page { - //pag irt_header; + pag irt_header; USHORT irt_relation; /* relation id (for consistency) */ USHORT irt_count; /* Number of indices */ struct irt_repeat { @@ -325,9 +325,9 @@ /* Header page */ -struct header_page : public pag +struct header_page { - //pag hdr_header; + pag hdr_header; USHORT hdr_page_size; /* Page size of database */ USHORT hdr_ods_version; /* Version of on-disk structure */ SLONG hdr_PAGES; /* Page number of PAGES relation */ @@ -411,9 +411,9 @@ /* Page Inventory Page */ -struct page_inv_page : public pag +struct page_inv_page { - //pag pip_header; + pag pip_header; SLONG pip_min; /* Lowest (possible) free page */ UCHAR pip_bits[1]; }; @@ -421,9 +421,9 @@ /* Pointer Page */ -struct pointer_page : public pag +struct pointer_page { - //pag ppg_header; + pag ppg_header; SLONG ppg_sequence; /* Sequence number in relation */ SLONG ppg_next; /* Next pointer page in relation */ USHORT ppg_count; /* Number of slots active */ @@ -438,9 +438,9 @@ /* Transaction Inventory Page */ -struct tx_inv_page : public pag +struct tx_inv_page { - //pag tip_header; + pag tip_header; SLONG tip_next; /* Next transaction inventory page */ UCHAR tip_transactions[1]; }; @@ -448,9 +448,9 @@ /* Generator Page */ -struct generator_page : public pag +struct generator_page { - //pag gpg_header; + pag gpg_header; SLONG gpg_sequence; /* Sequence number */ SLONG gpg_waste1; /* overhead carried for backward compatibility */ USHORT gpg_waste2; /* overhead carried for backward compatibility */ @@ -535,9 +535,9 @@ SSHORT cp_fn_length; }; -struct log_info_page : public pag +struct log_info_page { - //pag log_header; + pag log_header; SLONG log_flags; /* flags, OBSOLETE */ ctrl_pt log_cp_1; /* control point 1 */ ctrl_pt log_cp_2; /* control point 2 */ Index: pag.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/pag.cpp,v retrieving revision 1.77 retrieving revision 1.78 diff -b -U3 -r1.77 -r1.78 --- pag.cpp 8 Jun 2004 13:39:36 -0000 1.77 +++ pag.cpp 10 Jul 2004 03:20:08 -0000 1.78 @@ -380,7 +380,7 @@ WIN window(next->fil_min_page); header_page* header = (header_page*) CCH_fake(tdbb, &window, 1); - header->pag_type = pag_header; + header->hdr_header.pag_type = pag_header; header->hdr_sequence = sequence; header->hdr_page_size = dbb->dbb_page_size; header->hdr_data[0] = HDR_end; @@ -399,7 +399,7 @@ header->hdr_flags |= hdr_SQL_dialect_3; #endif - header->pag_checksum = CCH_checksum(window.win_bdb); + header->hdr_header.pag_checksum = CCH_checksum(window.win_bdb); PIO_write(dbb->dbb_file, window.win_bdb, window.win_buffer, tdbb->tdbb_status_vector); CCH_RELEASE(tdbb, &window); @@ -430,7 +430,7 @@ (UCHAR *) & start, CLUMP_REPLACE, 1); } - header->pag_checksum = CCH_checksum(window.win_bdb); + header->hdr_header.pag_checksum = CCH_checksum(window.win_bdb); PIO_write(dbb->dbb_file, window.win_bdb, window.win_buffer, tdbb->tdbb_status_vector); CCH_RELEASE(tdbb, &window); @@ -653,7 +653,7 @@ than returning it, format it as a page inventory page, and recurse. */ page_inv_page* new_pip_page = (page_inv_page*) new_page; - new_pip_page->pag_type = pag_pages; + new_pip_page->pip_header.pag_type = pag_pages; // CVC: If some tips on web sites are true, this can be improved by // a pointer to ULONG setting memory to 0xffffffff. const UCHAR* end = (UCHAR *) new_pip_page + dbb->dbb_page_size; @@ -808,10 +808,10 @@ WIN window(HEADER_PAGE); header_page* header = (header_page*) CCH_fake(tdbb, &window, 1); - header->pag_scn = 0; + header->hdr_header.pag_scn = 0; MOV_time_stamp(reinterpret_cast < ISC_TIMESTAMP * >(header->hdr_creation_date)); - header->pag_type = pag_header; + header->hdr_header.pag_type = pag_header; header->hdr_page_size = dbb->dbb_page_size; header->hdr_ods_version = ODS_VERSION; header->hdr_implementation = CLASS; @@ -856,7 +856,7 @@ WIN window(LOG_PAGE); log_info_page* logp = (log_info_page*) CCH_fake(tdbb, &window, 1); - logp->pag_type = pag_log; + logp->log_header.pag_type = pag_log; CCH_RELEASE(tdbb, &window); } @@ -886,7 +886,7 @@ dbb->dbb_pcontrol->pgc_pip = 1; page_inv_page* pages = (page_inv_page*) CCH_fake(tdbb, &window, 1); - pages->pag_type = pag_pages; + pages->pip_header.pag_type = pag_pages; pages->pip_min = 4; UCHAR* p = pages->pip_bits; int i = dbb->dbb_page_size - OFFSETA(page_inv_page*, pip_bits); @@ -987,7 +987,7 @@ header_page* header = (header_page*) temp_page; PIO_header(dbb, temp_page, MIN_PAGE_SIZE); - if (header->pag_type != pag_header || header->hdr_sequence) { + if (header->hdr_header.pag_type != pag_header || header->hdr_sequence) { ERR_post(isc_bad_db_format, isc_arg_cstring, file_length, ERR_string(file_name, file_length), 0); @@ -1796,7 +1796,7 @@ UCHAR* p; if (page_num == HEADER_PAGE) { new_header = (header_page*) new_page; - new_header->pag_type = pag_header; + new_header->hdr_header.pag_type = pag_header; new_header->hdr_end = HDR_SIZE; new_header->hdr_page_size = dbb->dbb_page_size; new_header->hdr_data[0] = HDR_end; @@ -1806,7 +1806,7 @@ } else { new_logp = (log_info_page*) new_page; - new_logp->pag_type = pag_log; + new_logp->log_header.pag_type = pag_log; new_logp->log_data[0] = LOG_end; new_logp->log_end = LIP_SIZE; next_page = new_window.win_page; Index: sdw.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/sdw.cpp,v retrieving revision 1.50 retrieving revision 1.51 diff -b -U3 -r1.50 -r1.51 --- sdw.cpp 8 Jun 2004 13:39:36 -0000 1.50 +++ sdw.cpp 10 Jul 2004 03:20:08 -0000 1.51 @@ -192,7 +192,7 @@ /* create the header using the spare_buffer */ header_page* header = (header_page*) spare_page; - header->pag_type = pag_header; + header->hdr_header.pag_type = pag_header; header->hdr_sequence = sequence; header->hdr_page_size = dbb->dbb_page_size; header->hdr_data[0] = HDR_end; @@ -204,10 +204,10 @@ temp_bdb.bdb_page = next->fil_min_page; temp_bdb.bdb_dbb = dbb; temp_bdb.bdb_buffer = (PAG) header; - header->pag_checksum = CCH_checksum(&temp_bdb); + header->hdr_header.pag_checksum = CCH_checksum(&temp_bdb); if (!PIO_write( shadow_file, &temp_bdb, - header, + reinterpret_cast<Ods::pag*>(header), 0)) { if (spare_buffer) @@ -251,10 +251,10 @@ (UCHAR *) & start); file->fil_fudge = 0; temp_bdb.bdb_page = file->fil_min_page; - header->pag_checksum = CCH_checksum(&temp_bdb); + header->hdr_header.pag_checksum = CCH_checksum(&temp_bdb); if (!PIO_write( shadow_file, &temp_bdb, - header, + reinterpret_cast<Ods::pag*>(header), 0)) { if (spare_buffer) Index: tra.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/tra.cpp,v retrieving revision 1.81 retrieving revision 1.82 diff -b -U3 -r1.81 -r1.82 --- tra.cpp 22 Jun 2004 20:13:10 -0000 1.81 +++ tra.cpp 10 Jul 2004 03:20:08 -0000 1.82 @@ -452,7 +452,7 @@ /* Allocate and format new page */ WIN window(-1); tx_inv_page* tip = (tx_inv_page*) DPM_allocate(tdbb, &window); - tip->pag_type = pag_transactions; + tip->tip_header.pag_type = pag_transactions; CCH_must_write(&window); CCH_RELEASE(tdbb, &window); Index: val.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/val.cpp,v retrieving revision 1.53 retrieving revision 1.54 diff -b -U3 -r1.53 -r1.54 --- val.cpp 8 Jun 2004 13:39:37 -0000 1.53 +++ val.cpp 10 Jul 2004 03:20:08 -0000 1.54 @@ -689,7 +689,6 @@ struct vdr control; JrdMemoryPool* val_pool = 0; JrdMemoryPool* old_pool = 0; - USHORT i; SET_TDBB(tdbb); Database* dbb = tdbb->tdbb_database; @@ -724,7 +723,7 @@ att->att_val_errors = vcl::newVector(*dbb->dbb_permanent, VAL_MAX_ERROR); } else { - for (i = 0; i < VAL_MAX_ERROR; i++) + for (USHORT i = 0; i < VAL_MAX_ERROR; i++) (*att->att_val_errors)[i] = 0; } @@ -882,7 +881,7 @@ * the bitmap of pages visited. * **************************************/ - page_inv_page* page; + page_inv_page* page = 0; USHORT sequence; SLONG number; @@ -1082,7 +1081,7 @@ * Make sure chain of record versions is completely intact. * **************************************/ - data_page* page; + data_page* page = 0; #ifdef DEBUG_VAL_VERBOSE USHORT counter = 0; #endif @@ -1147,7 +1146,7 @@ DPM_scan_pages(tdbb); WIN window(-1); - header_page* page; + header_page* page = 0; fetch_page(tdbb, control, (SLONG) HEADER_PAGE, pag_header, &window, &page); control->vdr_max_transaction = page->hdr_next_transaction; @@ -1190,7 +1189,7 @@ Database* dbb = tdbb->tdbb_database; WIN window(-1); - data_page* page; + data_page* page = 0; fetch_page(tdbb, control, page_number, pag_data, &window, &page); #ifdef DEBUG_VAL_VERBOSE @@ -1317,7 +1316,7 @@ * Walk the page inventory pages. * **************************************/ - pointer_page* page; + pointer_page* page = 0; SET_TDBB(tdbb); Database* dbb = tdbb->tdbb_database; CHECK_DBB(dbb); @@ -1351,7 +1350,7 @@ * Walk the overflow header pages * **************************************/ - header_page* page; + header_page* page = 0; SET_TDBB(tdbb); @@ -1386,8 +1385,8 @@ * So errors are reported against index id+1 * **************************************/ - SLONG down_number, next_number; - UCHAR *p, *q; + UCHAR* p; + const UCHAR* q; USHORT l; // temporary variable for length SET_TDBB(tdbb); @@ -1406,26 +1405,25 @@ bool firstNode = true; SCHAR flags = 0; - UCHAR *pointer; - UCHAR *endPointer; + UCHAR* pointer; IndexNode node, lastNode; - btree_page* page; - btree_page* down_page; + btree_page* page = 0; + btree_page* down_page = 0; while (next) { WIN window(-1); fetch_page(tdbb, control, next, pag_index, &window, &page); if ((next != page_number) && - (page->pag_flags & BTR_FLAG_COPY_MASK) != + (page->btr_header.pag_flags & BTR_FLAG_COPY_MASK) != (flags & BTR_FLAG_COPY_MASK)) { corrupt(tdbb, control, VAL_INDEX_PAGE_CORRUPT, relation, id + 1, next); } - flags = page->pag_flags; - bool leafPage = (page->btr_level == 0); - bool useJumpInfo = (flags & btr_jump_info); - bool useAllRecordNumbers = (flags & btr_all_record_number); + flags = page->btr_header.pag_flags; + const bool leafPage = (page->btr_level == 0); + const bool useJumpInfo = (flags & btr_jump_info); + const bool useAllRecordNumbers = (flags & btr_all_record_number); if (page->btr_relation != relation->rel_id || page->btr_id != (UCHAR) (id % 256)) @@ -1440,7 +1438,7 @@ { IndexJumpInfo jumpInfo; pointer = BTreeNode::getPointerFirstNode(page, &jumpInfo); - USHORT headerSize = (pointer - (UCHAR*)page); + const USHORT headerSize = (pointer - (UCHAR*)page); // Check if firstNodeOffset is not out of page area. if ((jumpInfo.firstNodeOffset < headerSize) || (jumpInfo.firstNodeOffset > page->btr_length)) @@ -1482,7 +1480,7 @@ BTreeNode::readNode(&lastNode, pointer, flags, leafPage); } - endPointer = ((UCHAR *) page + page->btr_length); + const UCHAR* const endPointer = ((UCHAR *) page + page->btr_length); while (pointer < endPointer) { pointer = BTreeNode::readNode(&node, pointer, flags, leafPage); @@ -1540,8 +1538,8 @@ // fetch the next page down (if full validation was specified) if (!leafPage && control && (control->vdr_flags & vdr_records)) { - down_number = node.pageNumber; - SLONG down_record_number = node.recordNumber; + const SLONG down_number = node.pageNumber; + const SLONG down_record_number = node.recordNumber; // Note: control == 0 for the fetch_page() call here // as we don't want to mark the page as visited yet - we'll @@ -1549,11 +1547,10 @@ WIN down_window(-1); fetch_page(tdbb, 0, down_number, pag_index, &down_window, &down_page); - bool downLeafPage = (down_page->btr_level == 0); + const bool downLeafPage = (down_page->btr_level == 0); // make sure the initial key is greater than the pointer key - UCHAR *downPointer; - downPointer = BTreeNode::getPointerFirstNode(down_page); + UCHAR* downPointer = BTreeNode::getPointerFirstNode(down_page); IndexNode downNode; downPointer = BTreeNode::readNode(&downNode, downPointer, flags, downLeafPage); @@ -1594,7 +1591,7 @@ } BTreeNode::readNode(&downNode, pointer, flags, leafPage); - next_number = downNode.pageNumber; + const SLONG next_number = downNode.pageNumber; if (!(downNode.isEndBucket || downNode.isEndLevel) && (next_number != down_page->btr_sibling)) @@ -1643,7 +1640,7 @@ // have a corrupt index if (control && (control->vdr_flags & vdr_records)) { THREAD_EXIT(); - next_number = -1; + SLONG next_number = -1; while (SBM_next(control->vdr_rel_records, &next_number, RSE_get_forward)) { @@ -1701,7 +1698,7 @@ CHECK_DBB(dbb); PageControl* pgc = dbb->dbb_pcontrol; - page_inv_page* page; + page_inv_page* page = 0; for (USHORT sequence = 0;; sequence++) { const SLONG page_number = @@ -1745,7 +1742,7 @@ return corrupt(tdbb, control, VAL_P_PAGE_LOST, relation, sequence); } - pointer_page* page; + pointer_page* page = 0; WIN window(-1); fetch_page( tdbb, control, @@ -1789,7 +1786,7 @@ /* If this is the last pointer page in the relation, we're done */ - if (page->pag_flags & ppg_eof) { + if (page->ppg_header.pag_flags & ppg_eof) { CCH_RELEASE(tdbb, &window); return rtn_eof; } @@ -1901,7 +1898,7 @@ USHORT line_number = fragment->rhdf_f_line; UCHAR flags = fragment->rhdf_flags; - data_page* page; + data_page* page = 0; while (flags & rhd_incomplete) { WIN window(-1); fetch_page(tdbb, control, page_number, pag_data, &window, &page); @@ -2004,7 +2001,7 @@ SBM_reset(&control->vdr_rel_records); } for (SLONG sequence = 0; true; sequence++) { - RTN result = walk_pointer_page(tdbb, control, relation, sequence); + const RTN result = walk_pointer_page(tdbb, control, relation, sequence); if (result == rtn_eof) { break; } @@ -2068,7 +2065,7 @@ return corrupt(tdbb, control, VAL_INDEX_ROOT_MISSING, relation); } - index_root_page* page; + index_root_page* page = 0; WIN window(-1); fetch_page(tdbb, control, relation->rel_index_root, pag_root, &window, &page); @@ -2107,7 +2104,7 @@ return corrupt(tdbb, control, VAL_TIP_LOST, 0); } - tx_inv_page* page; + tx_inv_page* page = 0; const ULONG pages = transaction / dbb->dbb_pcontrol->pgc_tpt; for (ULONG sequence = 0; sequence <= pages; sequence++) { |