ClickHouse/dbms/include/DB/Functions/FunctionFactory.h
Andrey Mironov 3ebfd2fb7f dbms: pass proper context into Storage::read(). [#METR-14179]
This reverts commit 34b3f738a67432b44f6f69238dd1529535984d1a.
2014-12-17 17:19:07 +03:00

36 lines
1021 B
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <DB/Functions/IFunction.h>
#include <Yandex/singleton.h>
namespace DB
{
class Context;
/** Позволяет получить функцию по имени.
* Функция при создании также может использовать для инициализации (например, захватить SharedPtr)
* какие-нибудь справочники, находящиеся в Context-е.
*/
class FunctionFactory : public Singleton<FunctionFactory>
{
private:
typedef IFunction* (*Creator)(const Context & context); /// Не std::function, так как меньше indirection и размер объекта.
std::unordered_map<String, Creator> functions;
public:
FunctionFactory();
FunctionPtr get(const String & name, const Context & context) const;
template <typename F> void registerFunction()
{
static_assert(std::is_same<decltype(&F::create), Creator>::value, "F::create has incorrect type");
functions[F::name] = &F::create;
}
};
}