| 442 | }; |
| 443 | |
| 444 | class LockedStream : public RecordSource |
| 445 | { |
| 446 | public: |
| 447 | LockedStream(CompilerScratch* csb, RecordSource* next); |
| 448 | |
| 449 | void close(thread_db* tdbb) const override; |
| 450 | |
| 451 | bool refetchRecord(thread_db* tdbb) const override; |
| 452 | WriteLockResult lockRecord(thread_db* tdbb) const override; |
| 453 | |
| 454 | void getChildren(Firebird::Array<const RecordSource*>& children) const override; |
| 455 | |
| 456 | void print(thread_db* tdbb, Firebird::string& plan, |
| 457 | bool detailed, unsigned level, bool recurse) const override; |
| 458 | |
| 459 | void markRecursive() override; |
| 460 | void invalidateRecords(Request* request) const override; |
| 461 | |
| 462 | void findUsedStreams(StreamList& streams, bool expandAll = false) const override; |
| 463 | bool isDependent(const StreamList& streams) const override; |
| 464 | void nullRecords(thread_db* tdbb) const override; |
| 465 | |
| 466 | protected: |
| 467 | void internalOpen(thread_db* tdbb) const override; |
| 468 | bool internalGetRecord(thread_db* tdbb) const override; |
| 469 | |
| 470 | private: |
| 471 | NestConst<RecordSource> m_next; |
| 472 | }; |
| 473 | |
| 474 | class FirstRowsStream : public RecordSource |
| 475 | { |