...
1 package exp
2
3 type (
4 caseElse struct {
5 result interface{}
6 }
7 caseWhen struct {
8 caseElse
9 condition interface{}
10 }
11 caseExpression struct {
12 value interface{}
13 whens []CaseWhen
14 elseCondition CaseElse
15 }
16 )
17
18 func NewCaseElse(result interface{}) CaseElse {
19 return caseElse{result: result}
20 }
21
22 func (ce caseElse) Result() interface{} {
23 return ce.result
24 }
25
26 func NewCaseWhen(condition, result interface{}) CaseWhen {
27 return caseWhen{caseElse: caseElse{result: result}, condition: condition}
28 }
29
30 func (cw caseWhen) Condition() interface{} {
31 return cw.condition
32 }
33
34 func NewCaseExpression() CaseExpression {
35 return caseExpression{value: nil, whens: []CaseWhen{}, elseCondition: nil}
36 }
37
38 func (c caseExpression) Expression() Expression {
39 return c
40 }
41
42 func (c caseExpression) Clone() Expression {
43 return caseExpression{value: c.value, whens: c.whens, elseCondition: c.elseCondition}
44 }
45
46 func (c caseExpression) As(alias interface{}) AliasedExpression {
47 return NewAliasExpression(c, alias)
48 }
49
50 func (c caseExpression) GetValue() interface{} {
51 return c.value
52 }
53
54 func (c caseExpression) GetWhens() []CaseWhen {
55 return c.whens
56 }
57
58 func (c caseExpression) GetElse() CaseElse {
59 return c.elseCondition
60 }
61
62 func (c caseExpression) Value(value interface{}) CaseExpression {
63 c.value = value
64 return c
65 }
66
67 func (c caseExpression) When(condition, result interface{}) CaseExpression {
68 c.whens = append(c.whens, NewCaseWhen(condition, result))
69 return c
70 }
71
72 func (c caseExpression) Else(result interface{}) CaseExpression {
73 c.elseCondition = NewCaseElse(result)
74 return c
75 }
76
77 func (c caseExpression) Asc() OrderedExpression { return asc(c) }
78 func (c caseExpression) Desc() OrderedExpression { return desc(c) }
79
View as plain text