mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Merge branch 'master' of https://github.com/ClickHouse/ClickHouse into testflows_windows_functions_add_lag_and_lead_in_frame_tests
This commit is contained in:
commit
512c522558
@ -91,7 +91,20 @@ public:
|
|||||||
{
|
{
|
||||||
if (should_add_column_predicate(column.name))
|
if (should_add_column_predicate(column.name))
|
||||||
{
|
{
|
||||||
auto identifier = std::make_shared<ASTIdentifier>(std::vector<String>{it->first, column.name});
|
ASTPtr identifier;
|
||||||
|
if (it->first.empty())
|
||||||
|
/// We want tables from JOIN to have aliases.
|
||||||
|
/// But it is possible to set joined_subquery_requires_alias = 0,
|
||||||
|
/// and write a query like `select * FROM (SELECT 1), (SELECT 1), (SELECT 1)`.
|
||||||
|
/// If so, table name will be empty here.
|
||||||
|
///
|
||||||
|
/// We cannot create compound identifier with empty part (there is an assert).
|
||||||
|
/// So, try our luck and use only column name.
|
||||||
|
/// (Rewriting AST for JOIN is not an efficient design).
|
||||||
|
identifier = std::make_shared<ASTIdentifier>(column.name);
|
||||||
|
else
|
||||||
|
identifier = std::make_shared<ASTIdentifier>(std::vector<String>{it->first, column.name});
|
||||||
|
|
||||||
new_select_expression_list->children.emplace_back(std::move(identifier));
|
new_select_expression_list->children.emplace_back(std::move(identifier));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ void ASTIdentifier::setShortName(const String & new_name)
|
|||||||
name_parts = {new_name};
|
name_parts = {new_name};
|
||||||
|
|
||||||
bool special = semantic->special;
|
bool special = semantic->special;
|
||||||
//how about keep the semantic info here, such as table
|
/// How about keep the semantic info here, such as table
|
||||||
auto table = semantic->table;
|
auto table = semantic->table;
|
||||||
|
|
||||||
*semantic = IdentifierSemanticImpl();
|
*semantic = IdentifierSemanticImpl();
|
||||||
@ -116,8 +116,14 @@ void ASTIdentifier::formatImplWithoutAlias(const FormatSettings & settings, Form
|
|||||||
if (i != 0)
|
if (i != 0)
|
||||||
settings.ostr << '.';
|
settings.ostr << '.';
|
||||||
|
|
||||||
if (name_parts[i].empty())
|
/// Some AST rewriting code, like IdentifierSemantic::setColumnLongName,
|
||||||
children[j++]->formatImpl(settings, state, frame);
|
/// does not respect children of identifier.
|
||||||
|
/// Here we also ignore children if they are empty.
|
||||||
|
if (name_parts[i].empty() && j < children.size())
|
||||||
|
{
|
||||||
|
children[j]->formatImpl(settings, state, frame);
|
||||||
|
++j;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
format_element(name_parts[i]);
|
format_element(name_parts[i]);
|
||||||
}
|
}
|
||||||
@ -125,7 +131,7 @@ void ASTIdentifier::formatImplWithoutAlias(const FormatSettings & settings, Form
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
const auto & name = shortName();
|
const auto & name = shortName();
|
||||||
if (name.empty())
|
if (name.empty() && !children.empty())
|
||||||
children.front()->formatImpl(settings, state, frame);
|
children.front()->formatImpl(settings, state, frame);
|
||||||
else
|
else
|
||||||
format_element(name);
|
format_element(name);
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
2 1 1
|
||||||
|
1 2 1
|
||||||
|
1 1 2
|
@ -0,0 +1,8 @@
|
|||||||
|
SET joined_subquery_requires_alias = 0;
|
||||||
|
select * FROM (SELECT 1), (SELECT 1), (SELECT 1); -- { serverError 352 }
|
||||||
|
|
||||||
|
-- This queries work by luck.
|
||||||
|
-- Feel free to remove then if it is the only failed test.
|
||||||
|
select * from (select 2), (select 1) as a, (select 1) as b;
|
||||||
|
select * from (select 1) as a, (select 2), (select 1) as b;
|
||||||
|
select * from (select 1) as a, (select 1) as b, (select 2);
|
Loading…
Reference in New Issue
Block a user