mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-22 17:50:47 +00:00
fixed 'unknown column' issue with ARRAY JOIN section [#CONV-7967]
This commit is contained in:
parent
9dfce3c015
commit
3ab02bffef
@ -63,7 +63,6 @@ public:
|
||||
/// После агрегации:
|
||||
bool appendHaving(ExpressionActionsChain & chain);
|
||||
void appendSelect(ExpressionActionsChain & chain);
|
||||
bool appendArrayJoin(ExpressionActionsChain & chain);
|
||||
bool appendOrderBy(ExpressionActionsChain & chain);
|
||||
/// Удаляет все столбцы кроме выбираемых SELECT, упорядочивает оставшиеся столбцы и переименовывает их в алиасы.
|
||||
void appendProjectResult(ExpressionActionsChain & chain);
|
||||
|
@ -18,6 +18,7 @@ public:
|
||||
Database,
|
||||
Table,
|
||||
Format,
|
||||
ArrayJoin,
|
||||
};
|
||||
|
||||
/// имя
|
||||
|
@ -338,7 +338,7 @@ void ExpressionAnalyzer::normalizeTreeImpl(ASTPtr & ast, MapOfASTs & finished_as
|
||||
}
|
||||
else if (ASTIdentifier * node = dynamic_cast<ASTIdentifier *>(&*ast))
|
||||
{
|
||||
if (node->kind == ASTIdentifier::Column)
|
||||
if (node->kind == ASTIdentifier::Column || node->kind == ASTIdentifier::ArrayJoin)
|
||||
{
|
||||
/// Если это алиас, но не родительский алиас (чтобы работали конструкции вроде "SELECT column+1 AS column").
|
||||
Aliases::const_iterator jt = aliases.find(node->name);
|
||||
@ -723,6 +723,11 @@ void ExpressionAnalyzer::getActionsImpl(ASTPtr ast, bool no_subqueries, bool onl
|
||||
additional_requirements);
|
||||
}
|
||||
}
|
||||
else if (ASTIdentifier * node = dynamic_cast<ASTIdentifier *>(&*ast))
|
||||
{
|
||||
if (node->kind == ASTIdentifier::ArrayJoin && !only_consts)
|
||||
actions_stack.addAction(ExpressionActions::Action::arrayJoin(node->name, ""));
|
||||
}
|
||||
else if (ASTLiteral * node = dynamic_cast<ASTLiteral *>(&*ast))
|
||||
{
|
||||
DataTypePtr type = apply_visitor(FieldToDataType(), node->value);
|
||||
@ -906,8 +911,6 @@ void ExpressionAnalyzer::appendSelect(ExpressionActionsChain & chain)
|
||||
|
||||
getRootActionsImpl(select_query->select_expression_list, false, false, *step.actions);
|
||||
|
||||
appendArrayJoin(chain);
|
||||
|
||||
ASTs asts = select_query->select_expression_list->children;
|
||||
for (size_t i = 0; i < asts.size(); ++i)
|
||||
{
|
||||
@ -915,21 +918,6 @@ void ExpressionAnalyzer::appendSelect(ExpressionActionsChain & chain)
|
||||
}
|
||||
}
|
||||
|
||||
bool ExpressionAnalyzer::appendArrayJoin(ExpressionActionsChain & chain)
|
||||
{
|
||||
assertSelect();
|
||||
|
||||
if (!select_query->array_join_identifier)
|
||||
return false;
|
||||
|
||||
initChain(chain, aggregated_columns);
|
||||
ExpressionActionsChain::Step & step = chain.steps.back();
|
||||
|
||||
step.actions->add(ExpressionActions::Action::arrayJoin(select_query->array_join_identifier->getColumnName(), ""));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ExpressionAnalyzer::appendOrderBy(ExpressionActionsChain & chain)
|
||||
{
|
||||
assertSelect();
|
||||
|
@ -120,6 +120,8 @@ bool ParserSelectQuery::parseImpl(Pos & pos, Pos end, ASTPtr & node, String & ex
|
||||
if (!ident.parse(pos, end, select_query->array_join_identifier, expected))
|
||||
return false;
|
||||
|
||||
dynamic_cast<ASTIdentifier &>(*select_query->array_join_identifier).kind = ASTIdentifier::ArrayJoin;
|
||||
|
||||
ws.ignore(pos, end);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user