1
1
package filter
2
2
3
+ var extractChain = func (rules []Filter ) []Condition {
4
+ var conditions []Condition
5
+ for _ , rule := range rules {
6
+ conditions = append (conditions , rule .ExtractConditions ()... )
7
+ }
8
+
9
+ return conditions
10
+ }
11
+
3
12
// All represents a filter chain type that matches when all of its Rules matches.
4
13
type All struct {
5
14
rules []Filter
@@ -20,6 +29,10 @@ func (a *All) Eval(filterable Filterable) (bool, error) {
20
29
return true , nil
21
30
}
22
31
32
+ func (a * All ) ExtractConditions () []Condition {
33
+ return extractChain (a .rules )
34
+ }
35
+
23
36
// Any represents a filter chain type that matches when at least one of its Rules matches.
24
37
type Any struct {
25
38
rules []Filter
@@ -40,6 +53,10 @@ func (a *Any) Eval(filterable Filterable) (bool, error) {
40
53
return false , nil
41
54
}
42
55
56
+ func (a * Any ) ExtractConditions () []Condition {
57
+ return extractChain (a .rules )
58
+ }
59
+
43
60
// None represents a filter chain type that matches when none of its Rules matches.
44
61
type None struct {
45
62
rules []Filter
@@ -60,115 +77,141 @@ func (n *None) Eval(filterable Filterable) (bool, error) {
60
77
return true , nil
61
78
}
62
79
80
+ func (n * None ) ExtractConditions () []Condition {
81
+ return extractChain (n .rules )
82
+ }
83
+
63
84
// Condition represents a single filter condition.
64
85
type Condition struct {
65
- column string
66
- value string
86
+ Column string
87
+ Value string
67
88
}
68
89
69
- func NewCondition (column string , value string ) * Condition {
70
- return & Condition {
71
- column : column ,
72
- value : value ,
90
+ func NewCondition (column string , value string ) Condition {
91
+ return Condition {
92
+ Column : column ,
93
+ Value : value ,
73
94
}
74
95
}
75
96
76
- type Exists Condition
97
+ func (e Condition ) ExtractConditions () []Condition {
98
+ return []Condition {e }
99
+ }
100
+
101
+ type Exists struct {
102
+ Condition
103
+ }
77
104
78
105
func NewExists (column string ) * Exists {
79
- return & Exists {column : column }
106
+ return & Exists {Condition { Column : column } }
80
107
}
81
108
82
109
func (e * Exists ) Eval (filterable Filterable ) (bool , error ) {
83
- return filterable .EvalExists (e .column ), nil
110
+ return filterable .EvalExists (e .Column ), nil
84
111
}
85
112
86
- type Equal Condition
113
+ type Equal struct {
114
+ Condition
115
+ }
87
116
88
117
func (e * Equal ) Eval (filterable Filterable ) (bool , error ) {
89
- match , err := filterable .EvalEqual (e .column , e .value )
118
+ match , err := filterable .EvalEqual (e .Column , e .Value )
90
119
if err != nil {
91
120
return false , err
92
121
}
93
122
94
123
return match , nil
95
124
}
96
125
97
- type UnEqual Condition
126
+ type UnEqual struct {
127
+ Condition
128
+ }
98
129
99
130
func (u * UnEqual ) Eval (filterable Filterable ) (bool , error ) {
100
- match , err := filterable .EvalEqual (u .column , u .value )
131
+ match , err := filterable .EvalEqual (u .Column , u .Value )
101
132
if err != nil {
102
133
return false , err
103
134
}
104
135
105
- return filterable .EvalExists (u .column ) && ! match , nil
136
+ return filterable .EvalExists (u .Column ) && ! match , nil
106
137
}
107
138
108
- type Like Condition
139
+ type Like struct {
140
+ Condition
141
+ }
109
142
110
143
func (l * Like ) Eval (filterable Filterable ) (bool , error ) {
111
- match , err := filterable .EvalLike (l .column , l .value )
144
+ match , err := filterable .EvalLike (l .Column , l .Value )
112
145
if err != nil {
113
146
return false , err
114
147
}
115
148
116
149
return match , nil
117
150
}
118
151
119
- type Unlike Condition
152
+ type Unlike struct {
153
+ Condition
154
+ }
120
155
121
156
func (u * Unlike ) Eval (filterable Filterable ) (bool , error ) {
122
- match , err := filterable .EvalLike (u .column , u .value )
157
+ match , err := filterable .EvalLike (u .Column , u .Value )
123
158
if err != nil {
124
159
return false , err
125
160
}
126
161
127
- return filterable .EvalExists (u .column ) && ! match , nil
162
+ return filterable .EvalExists (u .Column ) && ! match , nil
128
163
}
129
164
130
- type LessThan Condition
165
+ type LessThan struct {
166
+ Condition
167
+ }
131
168
132
169
func (less * LessThan ) Eval (filterable Filterable ) (bool , error ) {
133
- match , err := filterable .EvalLess (less .column , less .value )
170
+ match , err := filterable .EvalLess (less .Column , less .Value )
134
171
if err != nil {
135
172
return false , err
136
173
}
137
174
138
175
return match , nil
139
176
}
140
177
141
- type LessThanOrEqual Condition
178
+ type LessThanOrEqual struct {
179
+ Condition
180
+ }
142
181
143
182
func (loe * LessThanOrEqual ) Eval (filterable Filterable ) (bool , error ) {
144
- match , err := filterable .EvalLessOrEqual (loe .column , loe .value )
183
+ match , err := filterable .EvalLessOrEqual (loe .Column , loe .Value )
145
184
if err != nil {
146
185
return false , err
147
186
}
148
187
149
188
return match , nil
150
189
}
151
190
152
- type GreaterThan Condition
191
+ type GreaterThan struct {
192
+ Condition
193
+ }
153
194
154
195
func (g * GreaterThan ) Eval (filterable Filterable ) (bool , error ) {
155
- match , err := filterable .EvalLessOrEqual (g .column , g .value )
196
+ match , err := filterable .EvalLessOrEqual (g .Column , g .Value )
156
197
if err != nil {
157
198
return false , err
158
199
}
159
200
160
- return filterable .EvalExists (g .column ) && ! match , nil
201
+ return filterable .EvalExists (g .Column ) && ! match , nil
161
202
}
162
203
163
- type GreaterThanOrEqual Condition
204
+ type GreaterThanOrEqual struct {
205
+ Condition
206
+ }
164
207
165
208
func (goe * GreaterThanOrEqual ) Eval (filterable Filterable ) (bool , error ) {
166
- match , err := filterable .EvalLess (goe .column , goe .value )
209
+ match , err := filterable .EvalLess (goe .Column , goe .Value )
167
210
if err != nil {
168
211
return false , err
169
212
}
170
213
171
- return filterable .EvalExists (goe .column ) && ! match , nil
214
+ return filterable .EvalExists (goe .Column ) && ! match , nil
172
215
}
173
216
174
217
var (
0 commit comments