#pragma once #include namespace DB { /// Allows loading dictionaries from executable class HTTPDictionarySource final : public IDictionarySource { static constexpr auto max_block_size = 8192; public: HTTPDictionarySource(const std::string & url, const std::string & format, Block & sample_block, const Context & context); HTTPDictionarySource(const HTTPDictionarySource & other); BlockInputStreamPtr loadAll() override; BlockInputStreamPtr loadIds(const std::vector & ids) override; BlockInputStreamPtr loadKeys( const ConstColumnPlainPtrs & key_columns, const std::vector & requested_rows) override; bool isModified() const override; bool supportsSelectiveLoad() const override; DictionarySourcePtr clone() const override; //DictionarySourcePtr clone() const override { return std::make_unique(*this); } std::string toString() const override; private: Logger * log = &Logger::get("HTTPDictionarySource"); static std::string quoteForLike(const std::string s); LocalDateTime getLastModification() const; const std::string url; const std::string format; Block sample_block; const Context & context; const std::string load_all_query; LocalDateTime last_modification; }; }