| 213 | }; |
| 214 | |
| 215 | class BitmapTableScan final : public RecordStream |
| 216 | { |
| 217 | struct Impure : public RecordSource::Impure |
| 218 | { |
| 219 | RecordBitmap** irsb_bitmap; |
| 220 | }; |
| 221 | |
| 222 | public: |
| 223 | BitmapTableScan(CompilerScratch* csb, const Firebird::string& alias, |
| 224 | StreamType stream, jrd_rel* relation, |
| 225 | InversionNode* inversion, double selectivity); |
| 226 | |
| 227 | void close(thread_db* tdbb) const override; |
| 228 | |
| 229 | void getChildren(Firebird::Array<const RecordSource*>& children) const override; |
| 230 | |
| 231 | void print(thread_db* tdbb, Firebird::string& plan, |
| 232 | bool detailed, unsigned level, bool recurse) const override; |
| 233 | |
| 234 | protected: |
| 235 | void internalOpen(thread_db* tdbb) const override; |
| 236 | bool internalGetRecord(thread_db* tdbb) const override; |
| 237 | |
| 238 | private: |
| 239 | const Firebird::string m_alias; |
| 240 | jrd_rel* const m_relation; |
| 241 | NestConst<InversionNode> const m_inversion; |
| 242 | }; |
| 243 | |
| 244 | class IndexTableScan final : public RecordStream |
| 245 | { |