| 1130 | // Multiplexing (many -> one) access methods |
| 1131 | |
| 1132 | class NestedLoopJoin : public RecordSource |
| 1133 | { |
| 1134 | public: |
| 1135 | NestedLoopJoin(CompilerScratch* csb, FB_SIZE_T count, RecordSource* const* args, |
| 1136 | JoinType joinType = INNER_JOIN); |
| 1137 | NestedLoopJoin(CompilerScratch* csb, RecordSource* outer, RecordSource* inner, |
| 1138 | BoolExprNode* boolean); |
| 1139 | |
| 1140 | void close(thread_db* tdbb) const override; |
| 1141 | |
| 1142 | bool refetchRecord(thread_db* tdbb) const override; |
| 1143 | WriteLockResult lockRecord(thread_db* tdbb) const override; |
| 1144 | |
| 1145 | void getChildren(Firebird::Array<const RecordSource*>& children) const override; |
| 1146 | |
| 1147 | void print(thread_db* tdbb, Firebird::string& plan, |
| 1148 | bool detailed, unsigned level, bool recurse) const override; |
| 1149 | |
| 1150 | void markRecursive() override; |
| 1151 | void invalidateRecords(Request* request) const override; |
| 1152 | |
| 1153 | void findUsedStreams(StreamList& streams, bool expandAll = false) const override; |
| 1154 | bool isDependent(const StreamList& streams) const override; |
| 1155 | void nullRecords(thread_db* tdbb) const override; |
| 1156 | |
| 1157 | protected: |
| 1158 | void internalOpen(thread_db* tdbb) const override; |
| 1159 | bool internalGetRecord(thread_db* tdbb) const override; |
| 1160 | |
| 1161 | private: |
| 1162 | bool fetchRecord(thread_db*, FB_SIZE_T) const; |
| 1163 | |
| 1164 | const JoinType m_joinType; |
| 1165 | const NestConst<BoolExprNode> m_boolean; |
| 1166 | |
| 1167 | Firebird::Array<NestConst<RecordSource> > m_args; |
| 1168 | }; |
| 1169 | |
| 1170 | class FullOuterJoin : public RecordSource |
| 1171 | { |
no outgoing calls
no test coverage detected