#pragma once #include #include #include "ExternalDictionaryLibraryUtils.h" namespace DB { /// A class that manages all operations with library dictionary. /// Every library dictionary source has its own object of this class, accessed by UUID. class ExternalDictionaryLibraryHandler { public: ExternalDictionaryLibraryHandler( const std::string & library_path_, const std::vector & library_settings, const Block & sample_block_, const std::vector & attributes_names_); ExternalDictionaryLibraryHandler(const ExternalDictionaryLibraryHandler & other); ExternalDictionaryLibraryHandler & operator=(const ExternalDictionaryLibraryHandler & other) = delete; ~ExternalDictionaryLibraryHandler(); Block loadAll(); Block loadIds(const std::vector & ids); Block loadKeys(const Columns & key_columns); bool isModified(); bool supportsSelectiveLoad(); const Block & getSampleBlock() { return sample_block; } private: Block dataToBlock(ExternalDictionaryLibraryAPI::RawClickHouseLibraryTable data); std::string library_path; const Block sample_block; std::vector attributes_names; SharedLibraryPtr library; std::shared_ptr settings_holder; void * lib_data; }; using SharedLibraryHandlerPtr = std::shared_ptr; }