mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
fix
fix style fix build
This commit is contained in:
parent
94e1bc05d2
commit
5f962015ca
@ -267,7 +267,7 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
|||||||
ParserKeyword over("OVER");
|
ParserKeyword over("OVER");
|
||||||
|
|
||||||
bool has_all = false;
|
bool has_all = false;
|
||||||
bool has_distinct_modifier = false;
|
bool has_distinct = false;
|
||||||
|
|
||||||
ASTPtr identifier;
|
ASTPtr identifier;
|
||||||
ASTPtr query;
|
ASTPtr query;
|
||||||
@ -281,19 +281,34 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
|||||||
return false;
|
return false;
|
||||||
++pos;
|
++pos;
|
||||||
|
|
||||||
|
auto pos_after_bracket = pos;
|
||||||
|
auto old_expected = expected;
|
||||||
|
|
||||||
if (all.ignore(pos, expected))
|
if (all.ignore(pos, expected))
|
||||||
has_all = true;
|
has_all = true;
|
||||||
|
|
||||||
if (distinct.ignore(pos, expected))
|
if (distinct.ignore(pos, expected))
|
||||||
has_distinct_modifier = true;
|
has_distinct = true;
|
||||||
|
|
||||||
if (!has_all && all.ignore(pos, expected))
|
if (!has_all && all.ignore(pos, expected))
|
||||||
has_all = true;
|
has_all = true;
|
||||||
|
|
||||||
if (has_all && has_distinct_modifier)
|
if (has_all && has_distinct)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!has_distinct_modifier)
|
if (has_all || has_distinct)
|
||||||
|
{
|
||||||
|
/// case f(ALL), f(ALL, x), f(DISTINCT), f(DISTINCT, x), ALL and DISTINCT should be treat as identifier
|
||||||
|
if (pos->type == TokenType::Comma || pos->type == TokenType::ClosingRoundBracket)
|
||||||
|
{
|
||||||
|
pos = pos_after_bracket;
|
||||||
|
expected = old_expected;
|
||||||
|
has_all = false;
|
||||||
|
has_distinct = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!has_distinct && !has_all)
|
||||||
{
|
{
|
||||||
auto old_pos = pos;
|
auto old_pos = pos;
|
||||||
auto maybe_an_subquery = pos->type == TokenType::OpeningRoundBracket;
|
auto maybe_an_subquery = pos->type == TokenType::OpeningRoundBracket;
|
||||||
@ -381,24 +396,38 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
|||||||
++pos;
|
++pos;
|
||||||
|
|
||||||
/// Parametric aggregate functions cannot have DISTINCT in parameters list.
|
/// Parametric aggregate functions cannot have DISTINCT in parameters list.
|
||||||
if (has_distinct_modifier)
|
if (has_distinct)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
expr_list_params = expr_list_args;
|
expr_list_params = expr_list_args;
|
||||||
expr_list_args = nullptr;
|
expr_list_args = nullptr;
|
||||||
|
|
||||||
|
pos_after_bracket = pos;
|
||||||
|
old_expected = expected;
|
||||||
|
|
||||||
if (all.ignore(pos, expected))
|
if (all.ignore(pos, expected))
|
||||||
has_all = true;
|
has_all = true;
|
||||||
|
|
||||||
if (distinct.ignore(pos, expected))
|
if (distinct.ignore(pos, expected))
|
||||||
has_distinct_modifier = true;
|
has_distinct = true;
|
||||||
|
|
||||||
if (!has_all && all.ignore(pos, expected))
|
if (!has_all && all.ignore(pos, expected))
|
||||||
has_all = true;
|
has_all = true;
|
||||||
|
|
||||||
if (has_all && has_distinct_modifier)
|
if (has_all && has_distinct)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (has_all || has_distinct)
|
||||||
|
{
|
||||||
|
/// case f(ALL), f(ALL, x), f(DISTINCT), f(DISTINCT, x), ALL and DISTINCT should be treat as identifier
|
||||||
|
if (pos->type == TokenType::Comma || pos->type == TokenType::ClosingRoundBracket)
|
||||||
|
{
|
||||||
|
pos = pos_after_bracket;
|
||||||
|
expected = old_expected;
|
||||||
|
has_distinct = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!contents.parse(pos, expr_list_args, expected))
|
if (!contents.parse(pos, expr_list_args, expected))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -411,7 +440,7 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
|||||||
tryGetIdentifierNameInto(identifier, function_node->name);
|
tryGetIdentifierNameInto(identifier, function_node->name);
|
||||||
|
|
||||||
/// func(DISTINCT ...) is equivalent to funcDistinct(...)
|
/// func(DISTINCT ...) is equivalent to funcDistinct(...)
|
||||||
if (has_distinct_modifier)
|
if (has_distinct)
|
||||||
function_node->name += "Distinct";
|
function_node->name += "Distinct";
|
||||||
|
|
||||||
function_node->arguments = expr_list_args;
|
function_node->arguments = expr_list_args;
|
||||||
|
@ -92,7 +92,7 @@ bool ParserSelectQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// SELECT [DISTINCT] [TOP N [WITH TIES]] expr list
|
/// SELECT [ALL/DISTINCT] [TOP N [WITH TIES]] expr list
|
||||||
{
|
{
|
||||||
bool has_all = false;
|
bool has_all = false;
|
||||||
if (!s_select.ignore(pos, expected))
|
if (!s_select.ignore(pos, expected))
|
||||||
|
@ -8,3 +8,28 @@ a
|
|||||||
45
|
45
|
||||||
2
|
2
|
||||||
1
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
|
||||||
|
a
|
||||||
|
aa
|
||||||
|
aaa
|
||||||
|
aaaa
|
||||||
|
aaaaa
|
||||||
|
aaaaaa
|
||||||
|
aaaaaaa
|
||||||
|
aaaaaaaa
|
||||||
|
aaaaaaaaa
|
||||||
|
|
||||||
|
a
|
||||||
|
aa
|
||||||
|
aaa
|
||||||
|
aaaa
|
||||||
|
aaaaa
|
||||||
|
aaaaaa
|
||||||
|
aaaaaaa
|
||||||
|
aaaaaaaa
|
||||||
|
aaaaaaaaa
|
||||||
|
aaaaa
|
||||||
|
aaaaa
|
||||||
|
aaaaa
|
||||||
|
@ -9,3 +9,17 @@ SELECT sum(DISTINCT number) FROM numbers(10);
|
|||||||
|
|
||||||
SELECT sum(ALL x) FROM (SELECT 1 x UNION ALL SELECT 1);
|
SELECT sum(ALL x) FROM (SELECT 1 x UNION ALL SELECT 1);
|
||||||
SELECT sum(DISTINCT x) FROM (SELECT 1 x UNION ALL SELECT 1);
|
SELECT sum(DISTINCT x) FROM (SELECT 1 x UNION ALL SELECT 1);
|
||||||
|
|
||||||
|
SELECT sum(ALL) FROM (SELECT 1 AS ALL);
|
||||||
|
|
||||||
|
SELECT sum(DISTINCT) FROM (SELECT 1 AS DISTINCT);
|
||||||
|
|
||||||
|
SELECT repeat('a', ALL) FROM (SELECT number AS ALL FROM numbers(10));
|
||||||
|
|
||||||
|
SELECT repeat('a', DISTINCT) FROM (SELECT number AS DISTINCT FROM numbers(10));
|
||||||
|
|
||||||
|
SELECT repeat(ALL, 5) FROM (SELECT 'a' AS ALL);
|
||||||
|
|
||||||
|
SELECT repeat(DISTINCT, 5) FROM (SELECT 'a' AS DISTINCT);
|
||||||
|
|
||||||
|
SELECT repeat(ALL, DISTINCT) FROM (SELECT 'a' AS ALL, 5 AS DISTINCT);
|
||||||
|
Loading…
Reference in New Issue
Block a user