1#pragma once
2
3#include <Parsers/IAST_fwd.h>
4#include <Storages/IStorage_fwd.h>
5
6#include <memory>
7#include <string>
8
9
10namespace DB
11{
12
13class Context;
14
15/** Interface for table functions.
16 *
17 * Table functions are not relevant to other functions.
18 * The table function can be specified in the FROM section instead of the [db.]Table
19 * The table function returns a temporary StoragePtr object that is used to execute the query.
20 *
21 * Example:
22 * SELECT count() FROM remote('example01-01-1', merge, hits)
23 * - go to `example01-01-1`, in `merge` database, `hits` table.
24 */
25
26class ITableFunction
27{
28public:
29 static inline std::string getDatabaseName() { return "_table_function"; }
30
31 /// Get the main function name.
32 virtual std::string getName() const = 0;
33
34 /// Create storage according to the query.
35 StoragePtr execute(const ASTPtr & ast_function, const Context & context, const std::string & table_name) const;
36
37 virtual ~ITableFunction() {}
38
39private:
40 virtual StoragePtr executeImpl(const ASTPtr & ast_function, const Context & context, const std::string & table_name) const = 0;
41};
42
43using TableFunctionPtr = std::shared_ptr<ITableFunction>;
44
45
46}
47