| 1452 | }; |
| 1453 | |
| 1454 | class ConditionalStream : public RecordSource |
| 1455 | { |
| 1456 | struct Impure : public RecordSource::Impure |
| 1457 | { |
| 1458 | const RecordSource* irsb_next; |
| 1459 | }; |
| 1460 | |
| 1461 | public: |
| 1462 | ConditionalStream(CompilerScratch* csb, RecordSource* first, RecordSource* second, |
| 1463 | BoolExprNode* boolean); |
| 1464 | |
| 1465 | void close(thread_db* tdbb) const override; |
| 1466 | |
| 1467 | bool refetchRecord(thread_db* tdbb) const override; |
| 1468 | WriteLockResult lockRecord(thread_db* tdbb) const override; |
| 1469 | |
| 1470 | void getChildren(Firebird::Array<const RecordSource*>& children) const override; |
| 1471 | |
| 1472 | void print(thread_db* tdbb, Firebird::string& plan, |
| 1473 | bool detailed, unsigned level, bool recurse) const override; |
| 1474 | |
| 1475 | void markRecursive() override; |
| 1476 | void invalidateRecords(Request* request) const override; |
| 1477 | |
| 1478 | void findUsedStreams(StreamList& streams, bool expandAll = false) const override; |
| 1479 | bool isDependent(const StreamList& streams) const override; |
| 1480 | void nullRecords(thread_db* tdbb) const override; |
| 1481 | |
| 1482 | protected: |
| 1483 | void internalOpen(thread_db* tdbb) const override; |
| 1484 | bool internalGetRecord(thread_db* tdbb) const override; |
| 1485 | |
| 1486 | private: |
| 1487 | NestConst<RecordSource> m_first; |
| 1488 | NestConst<RecordSource> m_second; |
| 1489 | NestConst<BoolExprNode> const m_boolean; |
| 1490 | }; |
| 1491 | |
| 1492 | } // namespace |
| 1493 | |