MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / queryNodeToSelectQuery

Function queryNodeToSelectQuery

src/Planner/Utils.cpp:175–202  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

173}
174
175ASTPtr queryNodeToSelectQuery(const QueryTreeNodePtr & query_node, bool set_subquery_cte_name)
176{
177 auto & query_node_typed = query_node->as<QueryNode &>();
178
179 // In case of cross-replication we don't know what database is used for the table.
180 // Each shard will use the default database (in the case of cross-replication shards may have different defaults).
181 auto result_ast = query_node_typed.toAST({
182 .qualify_indentifiers_with_database = false,
183 .set_subquery_cte_name = set_subquery_cte_name
184 });
185
186 while (true)
187 {
188 if (auto * /*select_query*/ _ = result_ast->as<ASTSelectQuery>())
189 break;
190 if (auto * select_with_union = result_ast->as<ASTSelectWithUnionQuery>())
191 result_ast = select_with_union->list_of_selects->children.at(0);
192 else if (auto * subquery = result_ast->as<ASTSubquery>())
193 result_ast = subquery->children.at(0);
194 else
195 throw Exception(ErrorCodes::LOGICAL_ERROR, "Query node invalid conversion to select query");
196 }
197
198 if (result_ast == nullptr)
199 throw Exception(ErrorCodes::LOGICAL_ERROR, "Query node invalid conversion to select query");
200
201 return result_ast;
202}
203
204namespace
205{

Callers 3

buildSelectQueryInfoFunction · 0.85
getModifiedQueryInfoMethod · 0.85

Calls 3

ExceptionClass · 0.50
toASTMethod · 0.45
atMethod · 0.45

Tested by

no test coverage detected