6464#include < Analyzer/Resolve/TableExpressionsAliasVisitor.h>
6565#include < Analyzer/Resolve/ReplaceColumnsVisitor.h>
6666
67+ #include < Planner/PlannerActionsVisitor.h>
68+
6769#include < Core/Settings.h>
6870
6971namespace ProfileEvents
@@ -4122,11 +4124,7 @@ void QueryAnalyzer::resolveInterpolateColumnsNodeList(QueryTreeNodePtr & interpo
41224124 {
41234125 auto & interpolate_node_typed = interpolate_node->as <InterpolateNode &>();
41244126
4125- auto * column_to_interpolate = interpolate_node_typed.getExpression ()->as <IdentifierNode>();
4126- if (!column_to_interpolate)
4127- throw Exception (ErrorCodes::LOGICAL_ERROR, " INTERPOLATE can work only for indentifiers, but {} is found" ,
4128- interpolate_node_typed.getExpression ()->formatASTForErrorMessage ());
4129- auto column_to_interpolate_name = column_to_interpolate->getIdentifier ().getFullName ();
4127+ auto column_to_interpolate_name = interpolate_node_typed.getExpressionName ();
41304128
41314129 resolveExpressionNode (interpolate_node_typed.getExpression (), scope, false /* allow_lambda_expression*/ , false /* allow_table_expression*/ );
41324130
@@ -4135,14 +4133,11 @@ void QueryAnalyzer::resolveInterpolateColumnsNodeList(QueryTreeNodePtr & interpo
41354133 auto & interpolation_to_resolve = interpolate_node_typed.getInterpolateExpression ();
41364134 IdentifierResolveScope interpolate_scope (interpolation_to_resolve, &scope /* parent_scope*/ );
41374135
4138- auto fake_column_node = std::make_shared<ColumnNode>(NameAndTypePair (column_to_interpolate_name, interpolate_node_typed.getExpression ()->getResultType ()), interpolate_node_typed. getExpression () );
4136+ auto fake_column_node = std::make_shared<ColumnNode>(NameAndTypePair (column_to_interpolate_name, interpolate_node_typed.getExpression ()->getResultType ()), interpolate_node );
41394137 if (is_column_constant)
41404138 interpolate_scope.expression_argument_name_to_node .emplace (column_to_interpolate_name, fake_column_node);
41414139
41424140 resolveExpressionNode (interpolation_to_resolve, interpolate_scope, false /* allow_lambda_expression*/ , false /* allow_table_expression*/ );
4143-
4144- if (is_column_constant)
4145- interpolation_to_resolve = interpolation_to_resolve->cloneAndReplace (fake_column_node, interpolate_node_typed.getExpression ());
41464141 }
41474142}
41484143
0 commit comments