blob: a22b2cf1e65a1fc2db9aef628cc3522a2df654b2 (
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#pragma once
#include <yql/essentials/core/expr_nodes/yql_expr_nodes.h>
#include <yql/essentials/core/yql_node_transform.h>
#include <yql/essentials/core/sql_types/window_number_and_direction.h>
#include <util/generic/hash.h>
#include <utility>
namespace NYql {
class TWindowFrameSettingWithOffset {
public:
TWindowFrameSettingWithOffset(TExprNode::TPtr frameBound,
TMaybe<TNodeTransform> columnCast,
TMaybe<TNodeTransform> boundCast,
TMaybe<ui32> procId)
: FrameBound_(std::move(frameBound))
, ColumnCast_(std::move(columnCast))
, BoundCast_(std::move(boundCast))
, ProcId_(std::move(procId))
{
}
const TExprNode::TPtr& GetFrameBound() const {
return FrameBound_;
}
const TMaybe<TNodeTransform>& GetColumnCast() const {
return ColumnCast_;
}
const TMaybe<TNodeTransform>& GetBoundCast() const {
return BoundCast_;
}
const TMaybe<ui32>& GetProcId() const {
return ProcId_;
}
private:
TExprNode::TPtr FrameBound_;
TExprNode::TPtr OriginalFrameBound_;
TMaybe<TNodeTransform> ColumnCast_;
TMaybe<TNodeTransform> BoundCast_;
TMaybe<ui32> ProcId_;
};
template <typename TValueHasher = THash<TExprNode::TPtr>>
class TWindowFrameSettingOriginalBoundHash {
public:
explicit TWindowFrameSettingOriginalBoundHash(TValueHasher hasher = TValueHasher{})
: Hasher_(std::move(hasher))
{
}
size_t operator()(const TWindowFrameSettingWithOffset& value) const {
return Hasher_(value.GetFrameBound());
}
private:
TValueHasher Hasher_;
};
template <typename TValueComparator = TEqualTo<TExprNode::TPtr>>
class TWindowFrameSettingOriginalBoundComparator {
public:
explicit TWindowFrameSettingOriginalBoundComparator(TValueComparator comparator = TValueComparator{})
: Comparator_(comparator)
{
}
bool operator()(const TWindowFrameSettingWithOffset& left, const TWindowFrameSettingWithOffset& right) const {
return Comparator_(left.GetFrameBound(), right.GetFrameBound());
}
private:
TValueComparator Comparator_;
};
using TWindowFrameSettingBound = NWindow::TNumberAndDirection<TWindowFrameSettingWithOffset>;
} // namespace NYql
|