@@ -3,6 +3,7 @@ package builder
3
3
import (
4
4
"context"
5
5
"math"
6
+ "reflect"
6
7
"testing"
7
8
8
9
"github.com/stretchr/testify/assert"
@@ -137,3 +138,125 @@ func TestAggregateQuery(t *testing.T) {
137
138
ass .True (math .Abs (result .Float64 ()- tc .floatout ) < 1e6 )
138
139
}
139
140
}
141
+
142
+ func TestOmitEmpty (t * testing.T ) {
143
+ var (
144
+ m map [string ]string
145
+ sl []string
146
+ i interface {}
147
+ )
148
+
149
+ type stru struct {
150
+ x string
151
+ y int
152
+ }
153
+
154
+ var testData = []struct {
155
+ where map [string ]interface {}
156
+ omitKey []string
157
+ finalWhere map [string ]interface {}
158
+ }{
159
+ // Bool
160
+ {
161
+ map [string ]interface {}{"b1" : true , "b2" : false },
162
+ []string {"b1" , "b2" , "b2" },
163
+ map [string ]interface {}{"b1" : true },
164
+ },
165
+ // Array, String
166
+ {
167
+ map [string ]interface {}{"a1" : [0 ]string {}, "a2" : [... ]string {"2" }},
168
+ []string {"a1" , "a2" },
169
+ map [string ]interface {}{"a2" : [... ]string {"2" }},
170
+ },
171
+ // Float32, Float64
172
+ {
173
+ map [string ]interface {}{"f1" : float32 (0 ), "f2" : float32 (1.1 )},
174
+ []string {"f1" , "f2" },
175
+ map [string ]interface {}{"f2" : float32 (1.1 )},
176
+ },
177
+ {
178
+ map [string ]interface {}{"f1" : float64 (0 ), "f2" : float64 (1.1 )},
179
+ []string {"f1" , "f2" },
180
+ map [string ]interface {}{"f2" : float64 (1.1 )},
181
+ },
182
+ // Int, Int8, Int16, Int32, Int64
183
+ {
184
+ map [string ]interface {}{"i8" : int8 (0 ), "i8_1" : int8 (8 )},
185
+ []string {"i8" , "i8_1" },
186
+ map [string ]interface {}{"i8_1" : int8 (8 )},
187
+ },
188
+ {
189
+ map [string ]interface {}{"i16" : int16 (0 ), "i16_1" : int16 (16 )},
190
+ []string {"i16" , "i16_1" },
191
+ map [string ]interface {}{"i16_1" : int16 (16 )},
192
+ },
193
+ {
194
+ map [string ]interface {}{"i32" : int32 (0 ), "i32_1" : int32 (32 )},
195
+ []string {"i32" , "i32_1" },
196
+ map [string ]interface {}{"i32_1" : int32 (32 )},
197
+ },
198
+ {
199
+ map [string ]interface {}{"i64" : int64 (0 ), "i64_1" : int64 (64 )},
200
+ []string {"i64" , "i64_1" },
201
+ map [string ]interface {}{"i64_1" : int64 (64 )},
202
+ },
203
+ // Uint, Uint8, Uint16, Uint32, Uint64, Uintptr
204
+ {
205
+ map [string ]interface {}{"ui" : uint (0 ), "ui_1" : uint (1 )},
206
+ []string {"ui" , "ui_1" },
207
+ map [string ]interface {}{"ui_1" : uint (1 )},
208
+ },
209
+ {
210
+ map [string ]interface {}{"ui8" : uint8 (0 ), "ui8_1" : uint8 (8 )},
211
+ []string {"ui8" , "ui8_1" },
212
+ map [string ]interface {}{"ui8_1" : uint8 (8 )},
213
+ },
214
+ {
215
+ map [string ]interface {}{"ui16" : uint16 (0 ), "ui16_1" : uint16 (16 )},
216
+ []string {"ui16" , "ui16_1" },
217
+ map [string ]interface {}{"ui16_1" : uint16 (16 )},
218
+ },
219
+ {
220
+ map [string ]interface {}{"ui32" : uint32 (0 ), "ui32_1" : uint32 (32 )},
221
+ []string {"ui32" , "ui32_1" },
222
+ map [string ]interface {}{"ui32_1" : uint32 (32 )},
223
+ },
224
+ {
225
+ map [string ]interface {}{"ui64" : uint64 (0 ), "ui64_1" : uint64 (64 )},
226
+ []string {"ui64" , "ui64_1" },
227
+ map [string ]interface {}{"ui64_1" : uint64 (64 )},
228
+ },
229
+ {
230
+ map [string ]interface {}{"uip" : uintptr (0 ), "uip_1" : uintptr (1 )},
231
+ []string {"uip" , "uip_1" },
232
+ map [string ]interface {}{"uip_1" : uintptr (1 )},
233
+ },
234
+ // Map, Slice, Interface
235
+ {
236
+ map [string ]interface {}{"m1" : m , "m2" : map [string ]string {"foo" : "hi" }, "m3" : map [string ]string {}},
237
+ []string {"m1" , "m2" , "m3" },
238
+ map [string ]interface {}{"m2" : map [string ]string {"foo" : "hi" }},
239
+ },
240
+ {
241
+ map [string ]interface {}{"sl1" : sl , "sl2" : []string {"sl" }, "sl3" : []int {}},
242
+ []string {"sl1" , "sl2" , "sl3" },
243
+ map [string ]interface {}{"sl2" : []string {"sl" }},
244
+ },
245
+ {
246
+ map [string ]interface {}{"i" : i },
247
+ []string {"i" },
248
+ map [string ]interface {}{},
249
+ },
250
+ // struct
251
+ {
252
+ map [string ]interface {}{"stru1" : stru {x : "s" , y : 0 }, "stru2" : stru {x : "" , y : 0 }},
253
+ []string {"stru1" , "stru2" },
254
+ map [string ]interface {}{"stru1" : stru {x : "s" , y : 0 }},
255
+ },
256
+ }
257
+ ass := assert .New (t )
258
+ for _ , tc := range testData {
259
+ r := OmitEmpty (tc .where , tc .omitKey )
260
+ ass .True (reflect .DeepEqual (tc .finalWhere , r ))
261
+ }
262
+ }
0 commit comments