ClickHouse/dbms/src/Storages/MergeTree/MergeTreeIndexes.cpp

31 lines
960 B
C++
Raw Normal View History

2018-12-26 12:19:24 +00:00
#include <Storages/MergeTree/MergeTreeIndexes.h>
namespace DB
{
namespace ErrorCodes
{
extern const int LOGICAL_ERROR;
extern const int INCORRECT_QUERY;
}
void MergeTreeIndexFactory::registerIndex(const std::string &name, Creator creator) {
if (!indexes.emplace(name, std::move(creator)).second)
throw Exception("MergeTreeIndexFactory: the Index creator name '" + name + "' is not unique",
ErrorCodes::LOGICAL_ERROR);
}
2018-12-26 17:34:44 +00:00
std::unique_ptr<MergeTreeIndex> MergeTreeIndexFactory::get(std::shared_ptr<ASTIndexDeclaration> node) const {
if (!node->type)
2018-12-26 12:19:24 +00:00
throw Exception(
"for INDEX TYPE is required",
ErrorCodes::INCORRECT_QUERY);
2018-12-26 17:34:44 +00:00
auto it = indexes.find(node->type->name);
2018-12-26 12:19:24 +00:00
if (it == indexes.end())
throw Exception(
2018-12-26 17:34:44 +00:00
"Unknown Index type '" + node->type->name + "'",
2018-12-26 12:19:24 +00:00
ErrorCodes::INCORRECT_QUERY);
return it->second(node);
}
}