mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Fix wrong optimization
This commit is contained in:
parent
a4153e5629
commit
526c7253d0
@ -9,12 +9,20 @@
|
||||
#include <Parsers/ASTSelectQuery.h>
|
||||
#include <Parsers/ASTSetQuery.h>
|
||||
#include <Parsers/ASTTablesInSelectQuery.h>
|
||||
#include <Parsers/ASTOrderByElement.h>
|
||||
#include <Parsers/IAST.h>
|
||||
#include <Common/typeid_cast.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
namespace ErrorCodes
|
||||
{
|
||||
extern const int UNKNOWN_TYPE_OF_AST_NODE;
|
||||
}
|
||||
|
||||
|
||||
/// Checks if SELECT has stateful functions
|
||||
class ASTFunctionStatefulData
|
||||
{
|
||||
@ -59,14 +67,33 @@ public:
|
||||
{
|
||||
if (done)
|
||||
return;
|
||||
done = true;
|
||||
|
||||
if (select_query.orderBy() && !select_query.limitBy() && !select_query.limitByOffset() &&
|
||||
!select_query.limitByLength() && !select_query.limitLength() && !select_query.limitOffset())
|
||||
if (select_query.orderBy())
|
||||
{
|
||||
/// If we have limits then the ORDER BY is non-removable.
|
||||
if (select_query.limitBy()
|
||||
|| select_query.limitByOffset()
|
||||
|| select_query.limitByLength()
|
||||
|| select_query.limitLength()
|
||||
|| select_query.limitOffset())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/// If ORDER BY contains filling (in addition to sorting) it is non-removable.
|
||||
for (const auto & child : select_query.orderBy()->children)
|
||||
{
|
||||
auto * ast = child->as<ASTOrderByElement>();
|
||||
if (!ast || ast->children.empty())
|
||||
throw Exception("Bad order expression AST", ErrorCodes::UNKNOWN_TYPE_OF_AST_NODE);
|
||||
|
||||
if (ast->with_fill)
|
||||
return;
|
||||
}
|
||||
|
||||
select_query.setExpression(ASTSelectQuery::Expression::ORDER_BY, nullptr);
|
||||
}
|
||||
|
||||
done = true;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user