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:
parent
6d539d7e2a
commit
e913a10676
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user