Skip to content

Commit 8747193

Browse files
committed
Frontport PR #8871: Fix locking error if IN/EXISTS is converted into a semi-join
1 parent 4adb332 commit 8747193

3 files changed

Lines changed: 6 additions & 5 deletions

File tree

src/jrd/recsrc/ExternalTableScan.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,8 @@ bool ExternalTableScan::refetchRecord(thread_db* /*tdbb*/) const
108108
return true;
109109
}
110110

111-
WriteLockResult ExternalTableScan::lockRecord(thread_db* tdbb) const
111+
WriteLockResult ExternalTableScan::lockRecord(thread_db* /*tdbb*/) const
112112
{
113-
SET_TDBB(tdbb);
114-
115113
status_exception::raise(Arg::Gds(isc_record_lock_not_supp));
116114
}
117115

src/jrd/recsrc/LocalTableStream.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ bool LocalTableStream::refetchRecord(thread_db* tdbb) const
104104
return true;
105105
}
106106

107-
WriteLockResult LocalTableStream::lockRecord(thread_db* tdbb) const
107+
WriteLockResult LocalTableStream::lockRecord(thread_db* /*tdbb*/) const
108108
{
109109
status_exception::raise(Arg::Gds(isc_record_lock_not_supp));
110110
}

src/jrd/recsrc/RecordSource.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1175,8 +1175,11 @@ namespace Jrd
11751175
return true;
11761176
}
11771177

1178-
WriteLockResult lockRecord(thread_db* /*tdbb*/) const override
1178+
WriteLockResult lockRecord(thread_db* tdbb) const override
11791179
{
1180+
if (m_joinType == JoinType::SEMI || m_joinType == JoinType::ANTI)
1181+
return m_args.front()->lockRecord(tdbb);
1182+
11801183
Firebird::status_exception::raise(Firebird::Arg::Gds(isc_record_lock_not_supp));
11811184
}
11821185

0 commit comments

Comments
 (0)