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);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|