2014-01-28 16:45:10 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
2017-01-21 04:24:28 +00:00
|
|
|
|
#include <string>
|
|
|
|
|
#include <memory>
|
|
|
|
|
|
2014-01-28 16:45:10 +00:00
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
2017-01-21 04:24:28 +00:00
|
|
|
|
class Context;
|
|
|
|
|
class IAST;
|
|
|
|
|
using ASTPtr = std::shared_ptr<IAST>;
|
|
|
|
|
class IStorage;
|
|
|
|
|
using StoragePtr = std::shared_ptr<IStorage>;
|
|
|
|
|
|
|
|
|
|
|
2014-01-28 16:45:10 +00:00
|
|
|
|
/** Интерфейс для табличных функций.
|
|
|
|
|
*
|
|
|
|
|
* Табличные функции не имеют отношения к другим функциям.
|
|
|
|
|
* Табличная функция может быть указана в секции FROM вместо [db.]table
|
|
|
|
|
* Табличная функция возвращает временный объект StoragePtr, который используется для выполнения запроса.
|
|
|
|
|
*
|
|
|
|
|
* Пример:
|
|
|
|
|
* SELECT count() FROM remote('example01-01-1', merge, hits)
|
|
|
|
|
* - пойти на example01-01-1, в БД merge, таблицу hits.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class ITableFunction
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
/// Получить основное имя функции.
|
|
|
|
|
virtual std::string getName() const = 0;
|
|
|
|
|
|
|
|
|
|
/// Создать storage в соответствии с запросом
|
2014-02-25 17:37:50 +00:00
|
|
|
|
virtual StoragePtr execute(ASTPtr ast_function, Context & context) const = 0;
|
2014-02-23 00:37:25 +00:00
|
|
|
|
|
|
|
|
|
virtual ~ITableFunction() {};
|
2014-01-28 16:45:10 +00:00
|
|
|
|
};
|
|
|
|
|
|
2016-05-28 10:15:36 +00:00
|
|
|
|
using TableFunctionPtr = std::shared_ptr<ITableFunction>;
|
2014-01-28 16:45:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|