#pragma once #include #include #include namespace NYql { class TWindowSortedColumnPusher { public: TWindowSortedColumnPusher(const TExprNode::TPtr& sortTraits, TExprContext& ctx, const TExprNode::TPtr& frames); std::pair GetRangeSortedColumnNames(const TWindowFrameSettings::TRangeFrame& rangeFrame) const; TVector 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>; ESortOrder SortOrder_; TExprContext& Ctx_; TNodeToColumnNameAndNodeTransform MappedSortedColumnsToNames_; TMaybe SortColumnType_; }; } // namespace NYql