mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
fix formatting of LIMIT BY; add tests with remote() [#METR-23881]
This commit is contained in:
parent
d0961238b9
commit
79eb282eda
@ -1185,11 +1185,8 @@ void ExpressionAnalyzer::optimizeLimitBy()
|
|||||||
|
|
||||||
for (const auto & elem : elems)
|
for (const auto & elem : elems)
|
||||||
{
|
{
|
||||||
if (const auto id = typeid_cast<const ASTIdentifier*>(elem.get()))
|
if (elems_set.emplace(elem->getColumnName()).second)
|
||||||
{
|
unique_elems.emplace_back(elem);
|
||||||
if (elems_set.emplace(id->getColumnName()).second)
|
|
||||||
unique_elems.emplace_back(elem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unique_elems.size() < elems.size())
|
if (unique_elems.size() < elems.size())
|
||||||
|
@ -1185,7 +1185,7 @@ void InterpreterSelectQuery::executePreLimit()
|
|||||||
|
|
||||||
void InterpreterSelectQuery::executeLimitBy()
|
void InterpreterSelectQuery::executeLimitBy()
|
||||||
{
|
{
|
||||||
if (!query.limit_by_value)
|
if (!query.limit_by_value || !query.limit_by_expression_list)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Names columns;
|
Names columns;
|
||||||
|
@ -291,7 +291,9 @@ void ASTSelectQuery::formatImpl(const FormatSettings & s, FormatState & state, F
|
|||||||
|
|
||||||
if (limit_by_value)
|
if (limit_by_value)
|
||||||
{
|
{
|
||||||
s.ostr << (s.hilite ? hilite_keyword : "") << s.nl_or_ws << indent_str << "LIMIT BY " << (s.hilite ? hilite_none : "");
|
s.ostr << (s.hilite ? hilite_keyword : "") << s.nl_or_ws << indent_str << "LIMIT " << (s.hilite ? hilite_none : "");
|
||||||
|
limit_by_value->formatImpl(s, state, frame);
|
||||||
|
s.ostr << (s.hilite ? hilite_keyword : "") << " BY " << (s.hilite ? hilite_none : "");
|
||||||
s.one_line
|
s.one_line
|
||||||
? limit_by_expression_list->formatImpl(s, state, frame)
|
? limit_by_expression_list->formatImpl(s, state, frame)
|
||||||
: typeid_cast<const ASTExpressionList &>(*limit_by_expression_list).formatImplMultiline(s, state, frame);
|
: typeid_cast<const ASTExpressionList &>(*limit_by_expression_list).formatImplMultiline(s, state, frame);
|
||||||
|
@ -15,3 +15,7 @@
|
|||||||
1 John
|
1 John
|
||||||
3 Mary
|
3 Mary
|
||||||
4 Mary
|
4 Mary
|
||||||
|
0
|
||||||
|
0
|
||||||
|
0
|
||||||
|
1
|
||||||
|
@ -23,4 +23,10 @@ SELECT Num, count(*) FROM test.limit_by GROUP BY Num ORDER BY Num LIMIT 2 BY Num
|
|||||||
-- LIMIT BY can be combined with LIMIT
|
-- LIMIT BY can be combined with LIMIT
|
||||||
SELECT Num, Name FROM test.limit_by ORDER BY Num LIMIT 1 BY Num, Name LIMIT 3;
|
SELECT Num, Name FROM test.limit_by ORDER BY Num LIMIT 1 BY Num, Name LIMIT 3;
|
||||||
|
|
||||||
|
-- Distributed LIMIT BY
|
||||||
|
SELECT dummy FROM remote('127.0.0.{1,2}', system.one) LIMIT 1 BY dummy;
|
||||||
|
SELECT dummy FROM remote('127.0.0.{1,2}', system.one) LIMIT 2 BY dummy;
|
||||||
|
|
||||||
|
SELECT 1 as one FROM remote('127.0.0.{1,2}', system.one) LIMIT 1 BY one;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS test.limit_by;
|
DROP TABLE IF EXISTS test.limit_by;
|
||||||
|
Loading…
Reference in New Issue
Block a user