8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 00:03:03 +01:00

Normally, deleted records are represented by a stub which has no

data so should not be used for VIO_data calls when building the
version chain.  Under some circumstances, however, the deleted
flag is set on a complete record version with a delta back version.
When that happens, the record should be retrieved
This commit is contained in:
awharrison 2006-10-06 17:09:58 +00:00
parent 6d539d7e2a
commit e913a10676

View File

@ -278,7 +278,8 @@ void VIO_backout(thread_db* tdbb, record_param* rpb, const jrd_tra* transaction)
CCH_RELEASE(tdbb, &temp.getWindow(tdbb));
return;
}
if (temp.rpb_flags & rpb_deleted)
if ((temp.rpb_flags & rpb_deleted) &&
(!(temp.rpb_flags & rpb_delta)))
CCH_RELEASE(tdbb, &temp.getWindow(tdbb));
else {
temp.rpb_record = VIO_gc_record(tdbb, relation);
@ -680,7 +681,8 @@ bool VIO_chase_record_version(thread_db* tdbb, record_param* rpb, RecordSource*
return false;
}
record_param temp = *rpb;
if (!(rpb->rpb_flags & rpb_deleted)) {
if ((!(rpb->rpb_flags & rpb_deleted))
|| (rpb->rpb_flags & rpb_delta)) {
VIO_data(tdbb, rpb, pool);
rpb->rpb_page = temp.rpb_page;
rpb->rpb_line = temp.rpb_line;