1#pragma once
2
3#include <Core/Types.h>
4#include <unordered_map>
5#include <Interpreters/IExternalLoaderConfigRepository.h>
6#include <Poco/Timestamp.h>
7
8namespace DB
9{
10
11/// XML config repository used by ExternalLoader.
12/// Represents xml-files in local filesystem.
13class ExternalLoaderXMLConfigRepository : public IExternalLoaderConfigRepository
14{
15public:
16 ExternalLoaderXMLConfigRepository(const Poco::Util::AbstractConfiguration & main_config_, const std::string & config_key_);
17
18 const String & getName() const override { return name; }
19
20 /// Return set of .xml files from path in main_config (config_key)
21 std::set<std::string> getAllLoadablesDefinitionNames() override;
22
23 /// Checks that file with name exists on filesystem
24 bool exists(const std::string & definition_entity_name) override;
25
26 /// Return xml-file modification time via stat call
27 Poco::Timestamp getUpdateTime(const std::string & definition_entity_name) override;
28
29 /// May contain definition about several entities (several dictionaries in one .xml file)
30 LoadablesConfigurationPtr load(const std::string & definition_entity_name) override;
31
32private:
33 const String name;
34
35 /// Main server config (config.xml).
36 const Poco::Util::AbstractConfiguration & main_config;
37
38 /// Key which contains path to dicrectory with .xml configs for entries
39 std::string config_key;
40};
41
42}
43