File tree 7 files changed +135
-46
lines changed
7 files changed +135
-46
lines changed Original file line number Diff line number Diff line change @@ -10,25 +10,20 @@ type count struct {
10
10
}
11
11
12
12
func (a * count ) Consume (vec vector.Any ) {
13
- if c , ok := vec .(* vector.Const ); ok {
14
- val := c .Value ()
15
- if ! val .IsNull () && ! val .IsError () {
16
- a .count += uint64 (vec .Len ())
17
- }
13
+ if c , ok := vec .(* vector.Const ); ok && c .Value ().IsNull () {
18
14
return
19
15
}
20
16
if _ , ok := vector .Under (vec ).Type ().(* super.TypeError ); ok {
21
17
return
22
18
}
23
- nulls := vector .NullsOf (vec )
24
- if nulls == nil {
25
- a .count += uint64 (vec .Len ())
26
- return
27
- }
28
- for i := range vec .Len () {
29
- if ! nulls .Value (i ) {
30
- a .count ++
19
+ if nulls := vector .NullsOf (vec ); nulls != nil {
20
+ for i := range vec .Len () {
21
+ if ! nulls .Value (i ) {
22
+ a .count ++
23
+ }
31
24
}
25
+ } else {
26
+ a .count += uint64 (vec .Len ())
32
27
}
33
28
}
34
29
Original file line number Diff line number Diff line change @@ -41,15 +41,19 @@ func (a *Aggregator) Eval(this vector.Any) vector.Any {
41
41
42
42
func (a * Aggregator ) apply (args ... vector.Any ) vector.Any {
43
43
vec , where := args [0 ], args [1 ]
44
- var tags []uint32
45
- // If type is not bool then we want to filter everything.
46
- if where .Type ().ID () == super .IDBool {
47
- for slot := uint32 (0 ); slot < where .Len (); slot ++ {
48
- // XXX Feels like we should have a optimzed version of this.
49
- if vector .BoolValue (where , slot ) {
50
- tags = append (tags , slot )
51
- }
44
+ bools , _ := BoolMask (where )
45
+ if bools .IsEmpty () {
46
+ // everything is filtered.
47
+ return vector .NewConst (super .NewValue (vec .Type (), nil ), vec .Len (), nil )
48
+ }
49
+ bools .Flip (0 , uint64 (vec .Len ()))
50
+ if ! bools .IsEmpty () {
51
+ nulls := vector .NewBoolEmpty (vec .Len (), nil )
52
+ bools .WriteDenseTo (nulls .Bits )
53
+ if origNulls := vector .NullsOf (vec ); origNulls != nil {
54
+ nulls = vector .Or (nulls , origNulls )
52
55
}
56
+ vec = vector .CopyAndSetNulls (vec , nulls )
53
57
}
54
- return vector . NewView ( vec , tags )
58
+ return vec
55
59
}
Original file line number Diff line number Diff line change @@ -64,8 +64,7 @@ func (a *Arith) eval(vecs ...vector.Any) (out vector.Any) {
64
64
}()
65
65
}
66
66
out = f (lhs , rhs )
67
- vector .SetNulls (out , vector .Or (vector .NullsOf (lhs ), vector .NullsOf (rhs )))
68
- return out
67
+ return vector .CopyAndSetNulls (out , vector .Or (vector .NullsOf (lhs ), vector .NullsOf (rhs )))
69
68
}
70
69
71
70
func (a * Arith ) evalDivideByZero (kind vector.Kind , lhs , rhs vector.Any ) vector.Any {
Original file line number Diff line number Diff line change @@ -61,8 +61,7 @@ func (c *Compare) eval(vecs ...vector.Any) vector.Any {
61
61
return vector .NewConst (super .False , lhs .Len (), nulls )
62
62
}
63
63
out := f (lhs , rhs )
64
- vector .SetNulls (out , nulls )
65
- return out
64
+ return vector .CopyAndSetNulls (out , nulls )
66
65
}
67
66
68
67
func (c * Compare ) compareTypeVals (lhs , rhs vector.Any ) vector.Any {
Original file line number Diff line number Diff line change
1
+ zed : |
2
+ summarize
3
+ num_requests := count()
4
+ where log_time >= 2012-10-01T00:00:00Z
5
+ by client_ip
6
+ | sort client_ip
7
+
8
+ vector : true
9
+
10
+ input : |
11
+ {log_time:2012-01-01T00:00:44Z,client_ip:249.92.17.134}
12
+ {log_time:2012-10-01T00:24:30Z,client_ip:249.92.17.134}
13
+ {log_time:2012-05-12T10:23:22Z,client_ip:251.58.48.137}
14
+
15
+ output : |
16
+ {client_ip:249.92.17.134,num_requests:1(uint64)}
17
+ {client_ip:251.58.48.137,num_requests:0(uint64)}
Original file line number Diff line number Diff line change @@ -179,44 +179,119 @@ func NullsOf(v Any) *Bool {
179
179
panic (v )
180
180
}
181
181
182
- func SetNulls (v Any , nulls * Bool ) {
182
+ func CopyAndSetNulls (v Any , nulls * Bool ) Any {
183
183
switch v := v .(type ) {
184
184
case * Array :
185
- v .Nulls = nulls
185
+ return & Array {
186
+ Typ : v .Typ ,
187
+ Offsets : v .Offsets ,
188
+ Values : v .Values ,
189
+ Nulls : nulls ,
190
+ }
186
191
case * Bytes :
187
- v .Nulls = nulls
192
+ return & Bytes {
193
+ Offs : v .Offs ,
194
+ Bytes : v .Bytes ,
195
+ Nulls : nulls ,
196
+ }
188
197
case * Bool :
189
- v .Nulls = nulls
198
+ return & Bool {
199
+ len : v .len ,
200
+ Bits : v .Bits ,
201
+ Nulls : nulls ,
202
+ }
190
203
case * Const :
191
- v .Nulls = nulls
204
+ return & Const {
205
+ val : v .val ,
206
+ len : v .len ,
207
+ Nulls : nulls ,
208
+ }
192
209
case * Dict :
193
- v .Nulls = nulls
210
+ return & Dict {
211
+ Any : v .Any ,
212
+ Index : v .Index ,
213
+ Counts : v .Counts ,
214
+ Nulls : nulls ,
215
+ }
194
216
case * Error :
195
- v .Nulls = nulls
217
+ return & Error {
218
+ Typ : v .Typ ,
219
+ Vals : v .Vals ,
220
+ Nulls : nulls ,
221
+ }
196
222
case * Float :
197
- v .Nulls = nulls
223
+ return & Float {
224
+ Typ : v .Typ ,
225
+ Values : v .Values ,
226
+ Nulls : nulls ,
227
+ }
198
228
case * Int :
199
- v .Nulls = nulls
229
+ return & Int {
230
+ Typ : v .Typ ,
231
+ Values : v .Values ,
232
+ Nulls : nulls ,
233
+ }
200
234
case * IP :
201
- v .Nulls = nulls
235
+ return & IP {
236
+ Values : v .Values ,
237
+ Nulls : nulls ,
238
+ }
202
239
case * Map :
203
- v .Nulls = nulls
240
+ return & Map {
241
+ Typ : v .Typ ,
242
+ Offsets : v .Offsets ,
243
+ Keys : v .Keys ,
244
+ Values : v .Values ,
245
+ Nulls : nulls ,
246
+ }
204
247
case * Named :
205
- SetNulls (v .Any , nulls )
248
+ return & Named {
249
+ Typ : v .Typ ,
250
+ Any : CopyAndSetNulls (v .Any , nulls ),
251
+ }
206
252
case * Net :
207
- v .Nulls = nulls
253
+ return & Net {
254
+ Values : v .Values ,
255
+ Nulls : nulls ,
256
+ }
208
257
case * Record :
209
- v .Nulls = nulls
258
+ return & Record {
259
+ Typ : v .Typ ,
260
+ Fields : v .Fields ,
261
+ len : v .len ,
262
+ Nulls : nulls ,
263
+ }
210
264
case * Set :
211
- v .Nulls = nulls
265
+ return & Set {
266
+ Typ : v .Typ ,
267
+ Offsets : v .Offsets ,
268
+ Values : v .Values ,
269
+ Nulls : nulls ,
270
+ }
212
271
case * String :
213
- v .Nulls = nulls
272
+ return & String {
273
+ Offsets : v .Offsets ,
274
+ Bytes : v .Bytes ,
275
+ Nulls : nulls ,
276
+ }
214
277
case * TypeValue :
215
- v .Nulls = nulls
278
+ return & TypeValue {
279
+ Offsets : v .Offsets ,
280
+ Bytes : v .Bytes ,
281
+ Nulls : nulls ,
282
+ }
216
283
case * Uint :
217
- v .Nulls = nulls
284
+ return & Uint {
285
+ Typ : v .Typ ,
286
+ Values : v .Values ,
287
+ Nulls : nulls ,
288
+ }
218
289
case * Union :
219
- v .Nulls = nulls
290
+ return & Union {
291
+ Dynamic : v .Dynamic ,
292
+ Typ : v .Typ ,
293
+ Nulls : nulls ,
294
+ }
220
295
default :
221
296
panic (v )
222
297
}
Original file line number Diff line number Diff line change @@ -132,7 +132,7 @@ func (n *nullsBuilder) Build() Any {
132
132
if ! n .nulls .IsEmpty () {
133
133
bits := make ([]uint64 , (n .n + 63 )/ 64 )
134
134
n .nulls .WriteDenseTo (bits )
135
- SetNulls (vec , NewBool (bits , n .n , nil ))
135
+ vec = CopyAndSetNulls (vec , NewBool (bits , n .n , nil ))
136
136
}
137
137
return vec
138
138
}
You can’t perform that action at this time.
0 commit comments