| 183 | // Primary (table scan) access methods |
| 184 | |
| 185 | class FullTableScan final : public RecordStream |
| 186 | { |
| 187 | struct Impure : public RecordSource::Impure |
| 188 | { |
| 189 | RecordNumber irsb_lower; |
| 190 | RecordNumber irsb_upper; |
| 191 | }; |
| 192 | |
| 193 | public: |
| 194 | FullTableScan(CompilerScratch* csb, const Firebird::string& alias, |
| 195 | StreamType stream, jrd_rel* relation, |
| 196 | const Firebird::Array<DbKeyRangeNode*>& dbkeyRanges); |
| 197 | |
| 198 | void close(thread_db* tdbb) const override; |
| 199 | |
| 200 | void getChildren(Firebird::Array<const RecordSource*>& children) const override; |
| 201 | |
| 202 | void print(thread_db* tdbb, Firebird::string& plan, |
| 203 | bool detailed, unsigned level, bool recurse) const override; |
| 204 | |
| 205 | protected: |
| 206 | void internalOpen(thread_db* tdbb) const override; |
| 207 | bool internalGetRecord(thread_db* tdbb) const override; |
| 208 | |
| 209 | private: |
| 210 | const Firebird::string m_alias; |
| 211 | jrd_rel* const m_relation; |
| 212 | Firebird::Array<DbKeyRangeNode*> m_dbkeyRanges; |
| 213 | }; |
| 214 | |
| 215 | class BitmapTableScan final : public RecordStream |
| 216 | { |