Skip to content

Commit f0cb85b

Browse files
vdimirtuanpach
andauthored
Update src/Analyzer/Resolve/QueryAnalyzer.cpp
Co-authored-by: Tuan Pham Anh <[email protected]>
1 parent 962feed commit f0cb85b

File tree

1 file changed

+45
-29
lines changed

1 file changed

+45
-29
lines changed

src/Analyzer/Resolve/QueryAnalyzer.cpp

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5215,37 +5215,53 @@ void QueryAnalyzer::resolveCrossJoin(QueryTreeNodePtr & cross_join_node, Identif
52155215
static NameSet getColumnsFromTableExpression(const QueryTreeNodePtr & table_expression)
52165216
{
52175217
NameSet existing_columns;
5218-
5219-
if (const auto * table_node = table_expression->as<TableNode>())
5220-
{
5221-
auto get_column_options = GetColumnsOptions(GetColumnsOptions::AllPhysical).withSubcolumns();
5222-
for (const auto & column : table_node->getStorageSnapshot()->getColumns(get_column_options))
5223-
existing_columns.insert(column.name);
5224-
}
5225-
else if (const auto * table_function_node = table_expression->as<TableFunctionNode>())
5226-
{
5227-
auto get_column_options = GetColumnsOptions(GetColumnsOptions::AllPhysical).withSubcolumns();
5228-
for (const auto & column : table_function_node->getStorageSnapshot()->getColumns(get_column_options))
5229-
existing_columns.insert(column.name);
5230-
}
5231-
else if (const auto * query_node = table_expression->as<QueryNode>())
5232-
{
5233-
for (const auto & column : query_node->getProjectionColumns())
5234-
existing_columns.insert(column.name);
5235-
}
5236-
else if (const auto * union_node = table_expression->as<UnionNode>())
5218+
switch (table_expression->getNodeType())
52375219
{
5238-
for (const auto & column : union_node->computeProjectionColumns())
5239-
existing_columns.insert(column.name);
5240-
}
5241-
else
5242-
{
5243-
throw Exception(ErrorCodes::LOGICAL_ERROR,
5244-
"Expected TableNode, TableFunctionNode, QueryNode or UnionNode, got {}: {}",
5245-
table_expression->getNodeTypeName(),
5246-
table_expression->formatASTForErrorMessage());
5220+
case QueryTreeNodeType::TABLE: {
5221+
const auto * table_node = table_expression->as<TableNode>();
5222+
chassert(table_node);
5223+
5224+
auto get_column_options = GetColumnsOptions(GetColumnsOptions::AllPhysical).withSubcolumns();
5225+
for (const auto & column : table_node->getStorageSnapshot()->getColumns(get_column_options))
5226+
existing_columns.insert(column.name);
5227+
5228+
return existing_columns;
5229+
}
5230+
case QueryTreeNodeType::TABLE_FUNCTION: {
5231+
const auto * table_function_node = table_expression->as<TableFunctionNode>();
5232+
chassert(table_function_node);
5233+
5234+
auto get_column_options = GetColumnsOptions(GetColumnsOptions::AllPhysical).withSubcolumns();
5235+
for (const auto & column : table_function_node->getStorageSnapshot()->getColumns(get_column_options))
5236+
existing_columns.insert(column.name);
5237+
5238+
return existing_columns;
5239+
}
5240+
case QueryTreeNodeType::QUERY: {
5241+
const auto * query_node = table_expression->as<QueryNode>();
5242+
chassert(query_node);
5243+
5244+
for (const auto & column : query_node->getProjectionColumns())
5245+
existing_columns.insert(column.name);
5246+
5247+
return existing_columns;
5248+
}
5249+
case QueryTreeNodeType::UNION: {
5250+
const auto * union_node = table_expression->as<UnionNode>();
5251+
chassert(union_node);
5252+
5253+
for (const auto & column : union_node->computeProjectionColumns())
5254+
existing_columns.insert(column.name);
5255+
5256+
return existing_columns;
5257+
}
5258+
default:
5259+
throw Exception(
5260+
ErrorCodes::LOGICAL_ERROR,
5261+
"Expected TableNode, TableFunctionNode, QueryNode or UnionNode, got {}: {}",
5262+
table_expression->getNodeTypeName(),
5263+
table_expression->formatASTForErrorMessage());
52475264
}
5248-
return existing_columns;
52495265
}
52505266

52515267
/// Resolve join node in scope

0 commit comments

Comments
 (0)