@@ -5215,37 +5215,53 @@ void QueryAnalyzer::resolveCrossJoin(QueryTreeNodePtr & cross_join_node, Identif
52155215static 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