blob: 9235729e9647b69eccd68767570b769814aeb2f7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#pragma once
#include <yql/essentials/ast/yql_expr.h>
#include <yql/essentials/core/sql_types/sort_order.h>
#include <yql/essentials/core/yql_window_frame_settings.h>
namespace NYql {
class TWindowSortedColumnPusher {
public:
TWindowSortedColumnPusher(const TExprNode::TPtr& sortTraits, TExprContext& ctx, const TExprNode::TPtr& frames);
std::pair<TStringBuf, TStringBuf> GetRangeSortedColumnNames(const TWindowFrameSettings::TRangeFrame& rangeFrame) const;
TVector<TStringBuf> GetAllSortedColumnNames() const;
bool ShouldAddSortedColumn() const;
ESortOrder SortOrder() const;
TExprNode::TPtr GetStreamWithSortedColumns(TExprNode::TPtr stream, TExprNode::TPtr sortKeySelector) const;
TExprNode::TPtr ClearStreamFromSortedColumns(TExprNode::TPtr stream) const;
private:
TExprNode::TPtr AddSortedColumnsToStream(TExprNode::TPtr stream, TExprNode::TPtr sortKeySelector) const;
using TNodeToColumnNameAndNodeTransform = THashMap<TExprNode::TPtr, std::pair<TNodeTransform, TString>>;
ESortOrder SortOrder_;
TExprContext& Ctx_;
TNodeToColumnNameAndNodeTransform MappedSortedColumnsToNames_;
TMaybe<const TTypeAnnotationNode*> SortColumnType_;
};
} // namespace NYql
|