1 | #pragma once |
---|---|
2 | |
3 | #include <Parsers/IAST.h> |
4 | |
5 | |
6 | namespace DB |
7 | { |
8 | |
9 | |
10 | /** INSERT query |
11 | */ |
12 | class ASTInsertQuery : public IAST |
13 | { |
14 | public: |
15 | String database; |
16 | String table; |
17 | ASTPtr columns; |
18 | String format; |
19 | ASTPtr select; |
20 | ASTPtr table_function; |
21 | ASTPtr settings_ast; |
22 | |
23 | /// Data to insert |
24 | const char * data = nullptr; |
25 | const char * end = nullptr; |
26 | |
27 | /// Query has additional data, which will be sent later |
28 | bool has_tail = false; |
29 | |
30 | /// Try to find table function input() in SELECT part |
31 | void tryFindInputFunction(ASTPtr & input_function) const; |
32 | |
33 | /** Get the text that identifies this element. */ |
34 | String getID(char delim) const override { return "InsertQuery"+ (delim + database) + delim + table; } |
35 | |
36 | ASTPtr clone() const override |
37 | { |
38 | auto res = std::make_shared<ASTInsertQuery>(*this); |
39 | res->children.clear(); |
40 | |
41 | if (columns) { res->columns = columns->clone(); res->children.push_back(res->columns); } |
42 | if (select) { res->select = select->clone(); res->children.push_back(res->select); } |
43 | if (table_function) { res->table_function = table_function->clone(); res->children.push_back(res->table_function); } |
44 | if (settings_ast) { res->settings_ast = settings_ast->clone(); res->children.push_back(res->settings_ast); } |
45 | |
46 | return res; |
47 | } |
48 | |
49 | protected: |
50 | void formatImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override; |
51 | }; |
52 | |
53 | } |
54 |