MCPcopy Create free account
hub / github.com/ByConity/ByConity / parseImpl

Method parseImpl

src/Parsers/ParserDeleteQuery.cpp:11–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9{
10
11bool ParserDeleteQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
12{
13 auto query = std::make_shared<ASTDeleteQuery>();
14 node = query;
15
16 ParserKeyword s_delete("DELETE");
17 ParserKeyword s_from("FROM");
18 ParserKeyword s_where("WHERE");
19 ParserKeyword s_limit("LIMIT");
20 ParserExpression parser_exp_elem;
21 ParserKeyword s_settings("SETTINGS");
22
23 ParserNumber number_parser;
24
25 if (s_delete.ignore(pos, expected))
26 {
27 if (!s_from.ignore(pos, expected))
28 return false;
29
30 if (!parseDatabaseAndTableName(pos, expected, query->database, query->table))
31 return false;
32
33 if (!s_where.ignore(pos, expected))
34 return false;
35
36 if (!parser_exp_elem.parse(pos, query->predicate, expected))
37 return false;
38
39 /// ignore the limit clause from MYSQL delete SQL
40 if (s_limit.ignore(pos, expected))
41 {
42 if (!number_parser.ignore(pos, expected))
43 return false;
44 }
45
46 if (s_settings.ignore(pos, expected))
47 {
48 ParserSetQuery parser_settings(true);
49
50 if (!parser_settings.parse(pos, query->settings_ast, expected))
51 return false;
52 }
53 }
54 else
55 return false;
56
57 if (query->predicate)
58 query->children.push_back(query->predicate);
59
60 // if (!query->database.empty())
61 // query->children.push_back(query->database);
62
63 // if (query->table)
64 // query->children.push_back(query->table);
65
66 if (query->settings_ast)
67 query->children.push_back(query->settings_ast);
68

Callers

nothing calls this directly

Calls 4

ignoreMethod · 0.45
parseMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected