#pragma once #include #include namespace DB { class Context; /// Allows loading dictionaries from a file with given format, does not support "random access" class FileDictionarySource final : public IDictionarySource { public: FileDictionarySource(const std::string & filename, const std::string & format, Block & sample_block, const Context & context); FileDictionarySource(const FileDictionarySource & other); BlockInputStreamPtr loadAll() override; BlockInputStreamPtr loadIds(const std::vector & ids) override { throw Exception{"Method loadIds is unsupported for FileDictionarySource", ErrorCodes::NOT_IMPLEMENTED}; } BlockInputStreamPtr loadKeys( const ConstColumnPlainPtrs & key_columns, const std::vector & requested_rows) override { throw Exception{"Method loadKeys is unsupported for FileDictionarySource", ErrorCodes::NOT_IMPLEMENTED}; } bool isModified() const override { return getLastModification() > last_modification; } bool supportsSelectiveLoad() const override { return false; } DictionarySourcePtr clone() const override { return std::make_unique(*this); } std::string toString() const override; private: Poco::Timestamp getLastModification() const; const std::string filename; const std::string format; Block sample_block; const Context & context; Poco::Timestamp last_modification; }; }