"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/jrd/pag.cpp" between
Firebird-3.0.2.32703-0.tar.bz2 and Firebird-3.0.4.33054-0.tar.bz2

About: Firebird is a relational database offering many ANSI SQL standard features.

pag.cpp  (Firebird-3.0.2.32703-0.tar.bz2):pag.cpp  (Firebird-3.0.4.33054-0.tar.bz2)
skipping to change at line 642 skipping to change at line 642
CCH_MARK(tdbb, &pip_window); CCH_MARK(tdbb, &pip_window);
for (ULONG i = firstBit; i <= lastBit; i++) for (ULONG i = firstBit; i <= lastBit; i++)
{ {
UCHAR* byte = &pip_page->pip_bits[i / 8]; UCHAR* byte = &pip_page->pip_bits[i / 8];
int mask = 1 << (i % 8); int mask = 1 << (i % 8);
*byte &= ~mask; *byte &= ~mask;
#ifdef VIO_DEBUG #ifdef VIO_DEBUG
VIO_trace(DEBUG_WRITES_INFO, VIO_trace(DEBUG_WRITES_INFO,
"\tPAG_allocate: allocated page %" SLONG "PAG_allocate: allocated page %" SLONGFO
FORMAT"\n", RMAT"\n",
i + sequence * pageMgr.pa i + sequence * pageMgr.pagesPerPIP);
gesPerPIP);
#endif #endif
} }
pipMin = MIN(pipMin, firstBit); pipMin = MIN(pipMin, firstBit);
if (pipMin == firstBit) if (pipMin == firstBit)
pipMin = lastBit + 1; pipMin = lastBit + 1;
if (pipExtent == MAX_ULONG) if (pipExtent == MAX_ULONG)
pipExtent = pip_page->pip_extent; pipExtent = pip_page->pip_extent;
skipping to change at line 713 skipping to change at line 713
pip_page->pip_used = pipUsed; pip_page->pip_used = pipUsed;
for (const ULONG *bit = extraPages.begin(); bit < extraPa ges.end(); bit++) for (const ULONG *bit = extraPages.begin(); bit < extraPa ges.end(); bit++)
{ {
UCHAR* byte = &pip_page->pip_bits[*bit / 8]; UCHAR* byte = &pip_page->pip_bits[*bit / 8];
const int mask = 1 << (*bit % 8); const int mask = 1 << (*bit % 8);
*byte &= ~mask; *byte &= ~mask;
#ifdef VIO_DEBUG #ifdef VIO_DEBUG
VIO_trace(DEBUG_WRITES_INFO, VIO_trace(DEBUG_WRITES_INFO,
"\tPAG_allocate: allocated page %" SLONG "PAG_allocate: allocated page %" SLONGFO
FORMAT"\n", RMAT"\n",
bit + sequence * pageMgr. bit + sequence * pageMgr.pagesPerPIP);
pagesPerPIP);
#endif #endif
} }
if (extraPages.getCount()) if (extraPages.getCount())
CCH_must_write(tdbb, &pip_window); CCH_must_write(tdbb, &pip_window);
} }
CCH_RELEASE(tdbb, &pip_window); CCH_RELEASE(tdbb, &pip_window);
if (!toAlloc) if (!toAlloc)
skipping to change at line 954 skipping to change at line 954
WIN window(HEADER_PAGE_NUMBER); WIN window(HEADER_PAGE_NUMBER);
header_page* header = (header_page*) CCH_fake(tdbb, &window, 1); header_page* header = (header_page*) CCH_fake(tdbb, &window, 1);
header->hdr_header.pag_scn = 0; header->hdr_header.pag_scn = 0;
*(ISC_TIMESTAMP*) header->hdr_creation_date = TimeStamp::getCurrentTimeSt amp().value(); *(ISC_TIMESTAMP*) header->hdr_creation_date = TimeStamp::getCurrentTimeSt amp().value();
// should we include milliseconds or not? // should we include milliseconds or not?
//TimeStamp::round_time(header->hdr_creation_date->timestamp_time, 0); //TimeStamp::round_time(header->hdr_creation_date->timestamp_time, 0);
header->hdr_header.pag_type = pag_header; header->hdr_header.pag_type = pag_header;
header->hdr_page_size = dbb->dbb_page_size; header->hdr_page_size = dbb->dbb_page_size;
header->hdr_ods_version = ODS_VERSION | ODS_FIREBIRD_FLAG; header->hdr_ods_version = ODS_VERSION | ODS_FIREBIRD_FLAG;
DbImplementation::current.store(header); DbImplementation::current.store(header);
header->hdr_ods_minor = ODS_CURRENT;
#define ODS12_MINOR ODS_CURRENT
#if defined(WIN_NT)
#undef ODS12_MINOR
#define ODS12_MINOR ODS_CURRENT12_0
#endif // WIN_NT
#if defined(LINUX) && SIZEOF_VOID_P == 8
#undef ODS12_MINOR
#define ODS12_MINOR ODS_CURRENT12_0
#endif // LINUX-64bit
header->hdr_ods_minor = ODS12_MINOR;
header->hdr_oldest_transaction = 1; header->hdr_oldest_transaction = 1;
header->hdr_end = HDR_SIZE; header->hdr_end = HDR_SIZE;
header->hdr_data[0] = HDR_end; header->hdr_data[0] = HDR_end;
if (dbb->dbb_flags & DBB_DB_SQL_dialect_3) if (dbb->dbb_flags & DBB_DB_SQL_dialect_3)
header->hdr_flags |= hdr_SQL_dialect_3; header->hdr_flags |= hdr_SQL_dialect_3;
dbb->dbb_ods_version = header->hdr_ods_version & ~ODS_FIREBIRD_FLAG; dbb->dbb_ods_version = header->hdr_ods_version & ~ODS_FIREBIRD_FLAG;
dbb->dbb_minor_version = header->hdr_ods_minor; dbb->dbb_minor_version = header->hdr_ods_minor;
dbb->dbb_implementation = DbImplementation(header);
CCH_RELEASE(tdbb, &window); CCH_RELEASE(tdbb, &window);
} }
void PAG_format_pip(thread_db* tdbb, PageSpace& pageSpace) void PAG_format_pip(thread_db* tdbb, PageSpace& pageSpace)
{ {
/************************************** /**************************************
* *
* P A G _ f o r m a t _ p i p * P A G _ f o r m a t _ p i p
* *
skipping to change at line 1254 skipping to change at line 1268
UCHAR* const temp_page = FB_ALIGN(temp_buffer, PAGE_ALIGNMENT); UCHAR* const temp_page = FB_ALIGN(temp_buffer, PAGE_ALIGNMENT);
PIO_header(tdbb, temp_page, RAW_HEADER_SIZE); PIO_header(tdbb, temp_page, RAW_HEADER_SIZE);
const header_page* header = (header_page*) temp_page; const header_page* header = (header_page*) temp_page;
if (header->hdr_header.pag_type != pag_header || header->hdr_sequence) if (header->hdr_header.pag_type != pag_header || header->hdr_sequence)
ERR_post(Arg::Gds(isc_bad_db_format) << Arg::Str(attachment->att_ filename)); ERR_post(Arg::Gds(isc_bad_db_format) << Arg::Str(attachment->att_ filename));
const USHORT ods_version = header->hdr_ods_version & ~ODS_FIREBIRD_FLAG; const USHORT ods_version = header->hdr_ods_version & ~ODS_FIREBIRD_FLAG;
if (!Ods::isSupported(header->hdr_ods_version, header->hdr_ods_minor)) if (!Ods::isSupported(header))
{ {
ERR_post(Arg::Gds(isc_wrong_ods) << Arg::Str(attachment->att_file name) << ERR_post(Arg::Gds(isc_wrong_ods) << Arg::Str(attachment->att_file name) <<
Arg::Num(ods_version) << Arg::Num(ods_version) <<
Arg::Num(header->hdr_ods_minor) << Arg::Num(header->hdr_ods_minor) <<
Arg::Num(ODS_VERSION) << Arg::Num(ODS_VERSION) <<
Arg::Num(ODS_CURRENT)); Arg::Num(ODS_CURRENT));
} }
// Note that if this check is turned on, it should be recoded in order th at // Note that if this check is turned on, it should be recoded in order th at
// the Intel platforms can share databases. At present (Feb 95) it is po ssible // the Intel platforms can share databases. At present (Feb 95) it is po ssible
skipping to change at line 1285 skipping to change at line 1299
// is accessed with engine built for another architecture. - Nickolay 9-F eb-2005 // is accessed with engine built for another architecture. - Nickolay 9-F eb-2005
if (!DbImplementation(header).compatible(DbImplementation::current)) if (!DbImplementation(header).compatible(DbImplementation::current))
ERR_post(Arg::Gds(isc_bad_db_format) << Arg::Str(attachment->att_ filename)); ERR_post(Arg::Gds(isc_bad_db_format) << Arg::Str(attachment->att_ filename));
if (header->hdr_page_size < MIN_PAGE_SIZE || header->hdr_page_size > MAX_ PAGE_SIZE) if (header->hdr_page_size < MIN_PAGE_SIZE || header->hdr_page_size > MAX_ PAGE_SIZE)
ERR_post(Arg::Gds(isc_bad_db_format) << Arg::Str(attachment->att_ filename)); ERR_post(Arg::Gds(isc_bad_db_format) << Arg::Str(attachment->att_ filename));
dbb->dbb_ods_version = ods_version; dbb->dbb_ods_version = ods_version;
dbb->dbb_minor_version = header->hdr_ods_minor; dbb->dbb_minor_version = header->hdr_ods_minor;
dbb->dbb_implementation = DbImplementation(header);
dbb->dbb_page_size = header->hdr_page_size; dbb->dbb_page_size = header->hdr_page_size;
dbb->dbb_page_buffers = header->hdr_page_buffers; dbb->dbb_page_buffers = header->hdr_page_buffers;
} }
void PAG_init(thread_db* tdbb) void PAG_init(thread_db* tdbb)
{ {
/************************************** /**************************************
* *
* P A G _ i n i t * P A G _ i n i t
skipping to change at line 1544 skipping to change at line 1559
CHECK_DBB(dbb); CHECK_DBB(dbb);
PageManager& pageMgr = dbb->dbb_page_manager; PageManager& pageMgr = dbb->dbb_page_manager;
PageSpace* pageSpace = pageMgr.findPageSpace(pageSpaceID); PageSpace* pageSpace = pageMgr.findPageSpace(pageSpaceID);
fb_assert(pageSpace); fb_assert(pageSpace);
WIN pip_window(pageSpaceID, -1); WIN pip_window(pageSpaceID, -1);
page_inv_page* pages = NULL; page_inv_page* pages = NULL;
ULONG sequence = 0; ULONG sequence = 0;
#ifdef VIO_DEBUG
string dbg = "PAG_release_pages: about to release pages: ";
#endif
for (int i = 0; i < cntRelease; i++) for (int i = 0; i < cntRelease; i++)
{ {
#ifdef VIO_DEBUG #ifdef VIO_DEBUG
VIO_trace(DEBUG_WRITES_INFO, if (i > 0)
"\tPAG_release_pages: about to release page %" SLONGFORM dbg.append(", ");
AT"\n", pgNums[i]);
char num[16];
_ltoa_s(pgNums[i], num, sizeof(num), 10);
dbg.append(num);
#endif #endif
const ULONG seq = pgNums[i] / pageMgr.pagesPerPIP; const ULONG seq = pgNums[i] / pageMgr.pagesPerPIP;
if (!pages || seq != sequence) if (!pages || seq != sequence)
{ {
if (pages) if (pages)
{ {
pageSpace->pipHighWater.exchangeLower(sequence); pageSpace->pipHighWater.exchangeLower(sequence);
if (pages->pip_extent < pageMgr.pagesPerPIP) if (pages->pip_extent < pageMgr.pagesPerPIP)
skipping to change at line 1583 skipping to change at line 1606
const ULONG relative_bit = pgNums[i] % pageMgr.pagesPerPIP; const ULONG relative_bit = pgNums[i] % pageMgr.pagesPerPIP;
UCHAR* byte = &pages->pip_bits[relative_bit >> 3]; UCHAR* byte = &pages->pip_bits[relative_bit >> 3];
*byte |= 1 << (relative_bit & 7); *byte |= 1 << (relative_bit & 7);
if (*byte == 0xFF) // assume PAGES_IN_EXTENT == 8 if (*byte == 0xFF) // assume PAGES_IN_EXTENT == 8
{ {
pages->pip_extent = MIN(pages->pip_extent, relative_bit & ~0x07); pages->pip_extent = MIN(pages->pip_extent, relative_bit & ~0x07);
} }
pages->pip_min = MIN(pages->pip_min, relative_bit); pages->pip_min = MIN(pages->pip_min, relative_bit);
} }
#ifdef VIO_DEBUG
VIO_trace(DEBUG_WRITES_INFO, "%s\n", dbg.c_str());
#endif
pageSpace->pipHighWater.exchangeLower(sequence); pageSpace->pipHighWater.exchangeLower(sequence);
if (pages->pip_extent < pageMgr.pagesPerPIP) if (pages->pip_extent < pageMgr.pagesPerPIP)
pageSpace->pipWithExtent.exchangeLower(sequence); pageSpace->pipWithExtent.exchangeLower(sequence);
CCH_RELEASE(tdbb, &pip_window); CCH_RELEASE(tdbb, &pip_window);
} }
void PAG_set_force_write(thread_db* tdbb, bool flag) void PAG_set_force_write(thread_db* tdbb, bool flag)
{ {
skipping to change at line 2130 skipping to change at line 2157
} }
else else
mask >>= 1; mask >>= 1;
last_bit--; last_bit--;
} }
CCH_RELEASE(tdbb, &window); CCH_RELEASE(tdbb, &window);
pipMaxKnown = pipLast; pipMaxKnown = pipLast;
if (pipLast == pipFirst) return last_bit + (pipLast == pipFirst ? 0 : pipLast);
return last_bit + 1;
return last_bit + pipLast + 1;
} }
ULONG PageSpace::lastUsedPage(const Database* dbb) ULONG PageSpace::lastUsedPage(const Database* dbb)
{ {
PageSpace* pgSpace = dbb->dbb_page_manager.findPageSpace(DB_PAGE_SPACE); PageSpace* pgSpace = dbb->dbb_page_manager.findPageSpace(DB_PAGE_SPACE);
return pgSpace->lastUsedPage(); return pgSpace->lastUsedPage();
} }
const UCHAR bitsInByte[256] = const UCHAR bitsInByte[256] =
{ {
 End of changes. 10 change blocks. 
16 lines changed or deleted 38 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)