...
1 package exp
2
3 type sqlWindowExpression struct {
4 name IdentifierExpression
5 parent IdentifierExpression
6 partitionCols ColumnListExpression
7 orderCols ColumnListExpression
8 }
9
10 func NewWindowExpression(window, parent IdentifierExpression, partitionCols, orderCols ColumnListExpression) WindowExpression {
11 if partitionCols == nil {
12 partitionCols = NewColumnListExpression()
13 }
14 if orderCols == nil {
15 orderCols = NewColumnListExpression()
16 }
17 return sqlWindowExpression{
18 name: window,
19 parent: parent,
20 partitionCols: partitionCols,
21 orderCols: orderCols,
22 }
23 }
24
25 func (we sqlWindowExpression) clone() sqlWindowExpression {
26 return sqlWindowExpression{
27 name: we.name,
28 parent: we.parent,
29 partitionCols: we.partitionCols.Clone().(ColumnListExpression),
30 orderCols: we.orderCols.Clone().(ColumnListExpression),
31 }
32 }
33
34 func (we sqlWindowExpression) Clone() Expression {
35 return we.clone()
36 }
37
38 func (we sqlWindowExpression) Expression() Expression {
39 return we
40 }
41
42 func (we sqlWindowExpression) Name() IdentifierExpression {
43 return we.name
44 }
45
46 func (we sqlWindowExpression) HasName() bool {
47 return we.name != nil
48 }
49
50 func (we sqlWindowExpression) Parent() IdentifierExpression {
51 return we.parent
52 }
53
54 func (we sqlWindowExpression) HasParent() bool {
55 return we.parent != nil
56 }
57
58 func (we sqlWindowExpression) PartitionCols() ColumnListExpression {
59 return we.partitionCols
60 }
61
62 func (we sqlWindowExpression) HasPartitionBy() bool {
63 return we.partitionCols != nil && !we.partitionCols.IsEmpty()
64 }
65
66 func (we sqlWindowExpression) OrderCols() ColumnListExpression {
67 return we.orderCols
68 }
69
70 func (we sqlWindowExpression) HasOrder() bool {
71 return we.orderCols != nil && !we.orderCols.IsEmpty()
72 }
73
74 func (we sqlWindowExpression) PartitionBy(cols ...interface{}) WindowExpression {
75 ret := we.clone()
76 ret.partitionCols = NewColumnListExpression(cols...)
77 return ret
78 }
79
80 func (we sqlWindowExpression) OrderBy(cols ...interface{}) WindowExpression {
81 ret := we.clone()
82 ret.orderCols = NewColumnListExpression(cols...)
83 return ret
84 }
85
86 func (we sqlWindowExpression) Inherit(parent string) WindowExpression {
87 ret := we.clone()
88 ret.parent = ParseIdentifier(parent)
89 return ret
90 }
91
View as plain text