Skip to content

Commit e779767

Browse files
authored
data: Improve performance of NewField
do not call Set in NewField for each item in the vector
1 parent 329c72e commit e779767

File tree

5 files changed

+166
-104
lines changed

5 files changed

+166
-104
lines changed

data/field.go

Lines changed: 26 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -50,135 +50,57 @@ func NewField(name string, labels Labels, values interface{}) *Field {
5050
var vec vector
5151
switch v := values.(type) {
5252
case []int8:
53-
vec = newInt8Vector(len(v))
54-
for i := 0; i < len(v); i++ {
55-
vec.Set(i, v[i])
56-
}
53+
vec = newInt8VectorWithValues(v)
5754
case []*int8:
58-
vec = newNullableInt8Vector(len(v))
59-
for i := 0; i < len(v); i++ {
60-
vec.Set(i, v[i])
61-
}
55+
vec = newNullableInt8VectorWithValues(v)
6256
case []int16:
63-
vec = newInt16Vector(len(v))
64-
for i := 0; i < len(v); i++ {
65-
vec.Set(i, v[i])
66-
}
57+
vec = newInt16VectorWithValues(v)
6758
case []*int16:
68-
vec = newNullableInt16Vector(len(v))
69-
for i := 0; i < len(v); i++ {
70-
vec.Set(i, v[i])
71-
}
59+
vec = newNullableInt16VectorWithValues(v)
7260
case []int32:
73-
vec = newInt32Vector(len(v))
74-
for i := 0; i < len(v); i++ {
75-
vec.Set(i, v[i])
76-
}
61+
vec = newInt32VectorWithValues(v)
7762
case []*int32:
78-
vec = newNullableInt32Vector(len(v))
79-
for i := 0; i < len(v); i++ {
80-
vec.Set(i, v[i])
81-
}
63+
vec = newNullableInt32VectorWithValues(v)
8264
case []int64:
83-
vec = newInt64Vector(len(v))
84-
for i := 0; i < len(v); i++ {
85-
vec.Set(i, v[i])
86-
}
65+
vec = newInt64VectorWithValues(v)
8766
case []*int64:
88-
vec = newNullableInt64Vector(len(v))
89-
for i := 0; i < len(v); i++ {
90-
vec.Set(i, v[i])
91-
}
67+
vec = newNullableInt64VectorWithValues(v)
9268
case []uint8:
93-
vec = newUint8Vector(len(v))
94-
for i := 0; i < len(v); i++ {
95-
vec.Set(i, v[i])
96-
}
69+
vec = newUint8VectorWithValues(v)
9770
case []*uint8:
98-
vec = newNullableUint8Vector(len(v))
99-
for i := 0; i < len(v); i++ {
100-
vec.Set(i, v[i])
101-
}
71+
vec = newNullableUint8VectorWithValues(v)
10272
case []uint16:
103-
vec = newUint16Vector(len(v))
104-
for i := 0; i < len(v); i++ {
105-
vec.Set(i, v[i])
106-
}
73+
vec = newUint16VectorWithValues(v)
10774
case []*uint16:
108-
vec = newNullableUint16Vector(len(v))
109-
for i := 0; i < len(v); i++ {
110-
vec.Set(i, v[i])
111-
}
75+
vec = newNullableUint16VectorWithValues(v)
11276
case []uint32:
113-
vec = newUint32Vector(len(v))
114-
for i := 0; i < len(v); i++ {
115-
vec.Set(i, v[i])
116-
}
77+
vec = newUint32VectorWithValues(v)
11778
case []*uint32:
118-
vec = newNullableUint32Vector(len(v))
119-
for i := 0; i < len(v); i++ {
120-
vec.Set(i, v[i])
121-
}
79+
vec = newNullableUint32VectorWithValues(v)
12280
case []uint64:
123-
vec = newUint64Vector(len(v))
124-
for i := 0; i < len(v); i++ {
125-
vec.Set(i, v[i])
126-
}
81+
vec = newUint64VectorWithValues(v)
12782
case []*uint64:
128-
vec = newNullableUint64Vector(len(v))
129-
for i := 0; i < len(v); i++ {
130-
vec.Set(i, v[i])
131-
}
83+
vec = newNullableUint64VectorWithValues(v)
13284
case []float32:
133-
vec = newFloat32Vector(len(v))
134-
for i := 0; i < len(v); i++ {
135-
vec.Set(i, v[i])
136-
}
85+
vec = newFloat32VectorWithValues(v)
13786
case []*float32:
138-
vec = newNullableFloat32Vector(len(v))
139-
for i := 0; i < len(v); i++ {
140-
vec.Set(i, v[i])
141-
}
87+
vec = newNullableFloat32VectorWithValues(v)
14288
case []float64:
143-
vec = newFloat64Vector(len(v))
144-
for i := 0; i < len(v); i++ {
145-
vec.Set(i, v[i])
146-
}
89+
vec = newFloat64VectorWithValues(v)
14790
case []*float64:
148-
vec = newNullableFloat64Vector(len(v))
149-
for i := 0; i < len(v); i++ {
150-
vec.Set(i, v[i])
151-
}
91+
vec = newNullableFloat64VectorWithValues(v)
15292
case []string:
153-
vec = newStringVector(len(v))
154-
for i := 0; i < len(v); i++ {
155-
vec.Set(i, v[i])
156-
}
93+
vec = newStringVectorWithValues(v)
15794
case []*string:
158-
vec = newNullableStringVector(len(v))
159-
for i := 0; i < len(v); i++ {
160-
vec.Set(i, v[i])
161-
}
95+
vec = newNullableStringVectorWithValues(v)
16296
case []bool:
163-
vec = newBoolVector(len(v))
164-
for i := 0; i < len(v); i++ {
165-
vec.Set(i, v[i])
166-
}
97+
vec = newBoolVectorWithValues(v)
16798
case []*bool:
168-
vec = newNullableBoolVector(len(v))
169-
for i := 0; i < len(v); i++ {
170-
vec.Set(i, v[i])
171-
}
99+
vec = newNullableBoolVectorWithValues(v)
172100
case []time.Time:
173-
vec = newTimeTimeVector(len(v))
174-
for i := 0; i < len(v); i++ {
175-
vec.Set(i, v[i])
176-
}
101+
vec = newTimeTimeVectorWithValues(v)
177102
case []*time.Time:
178-
vec = newNullableTimeTimeVector(len(v))
179-
for i := 0; i < len(v); i++ {
180-
vec.Set(i, v[i])
181-
}
103+
vec = newNullableTimeTimeVectorWithValues(v)
182104
default:
183105
panic(fmt.Errorf("field '%s' specified with unsupported type %T", name, v))
184106
}

data/generic_nullable_vector.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ func newNullablegenVector(n int) *nullablegenVector {
77
return &v
88
}
99

10+
func newNullablegenVectorWithValues(s []*gen) *nullablegenVector {
11+
v := nullablegenVector(s)
12+
return &v
13+
}
14+
1015
func (v *nullablegenVector) Set(idx int, i interface{}) {
1116
if i == nil {
1217
(*v)[idx] = nil

data/generic_vector.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ func newgenVector(n int) *genVector {
1313
return &v
1414
}
1515

16+
func newgenVectorWithValues(s []gen) *genVector {
17+
v := genVector(s)
18+
return &v
19+
}
20+
1621
func (v *genVector) Set(idx int, i interface{}) {
1722
(*v)[idx] = i.(gen)
1823
}

data/nullable_vector.gen.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ func newNullableUint8Vector(n int) *nullableUint8Vector {
1313
return &v
1414
}
1515

16+
func newNullableUint8VectorWithValues(s []*uint8) *nullableUint8Vector {
17+
v := nullableUint8Vector(s)
18+
return &v
19+
}
20+
1621
func (v *nullableUint8Vector) Set(idx int, i interface{}) {
1722
if i == nil {
1823
(*v)[idx] = nil
@@ -98,6 +103,11 @@ func newNullableUint16Vector(n int) *nullableUint16Vector {
98103
return &v
99104
}
100105

106+
func newNullableUint16VectorWithValues(s []*uint16) *nullableUint16Vector {
107+
v := nullableUint16Vector(s)
108+
return &v
109+
}
110+
101111
func (v *nullableUint16Vector) Set(idx int, i interface{}) {
102112
if i == nil {
103113
(*v)[idx] = nil
@@ -183,6 +193,11 @@ func newNullableUint32Vector(n int) *nullableUint32Vector {
183193
return &v
184194
}
185195

196+
func newNullableUint32VectorWithValues(s []*uint32) *nullableUint32Vector {
197+
v := nullableUint32Vector(s)
198+
return &v
199+
}
200+
186201
func (v *nullableUint32Vector) Set(idx int, i interface{}) {
187202
if i == nil {
188203
(*v)[idx] = nil
@@ -268,6 +283,11 @@ func newNullableUint64Vector(n int) *nullableUint64Vector {
268283
return &v
269284
}
270285

286+
func newNullableUint64VectorWithValues(s []*uint64) *nullableUint64Vector {
287+
v := nullableUint64Vector(s)
288+
return &v
289+
}
290+
271291
func (v *nullableUint64Vector) Set(idx int, i interface{}) {
272292
if i == nil {
273293
(*v)[idx] = nil
@@ -353,6 +373,11 @@ func newNullableInt8Vector(n int) *nullableInt8Vector {
353373
return &v
354374
}
355375

376+
func newNullableInt8VectorWithValues(s []*int8) *nullableInt8Vector {
377+
v := nullableInt8Vector(s)
378+
return &v
379+
}
380+
356381
func (v *nullableInt8Vector) Set(idx int, i interface{}) {
357382
if i == nil {
358383
(*v)[idx] = nil
@@ -438,6 +463,11 @@ func newNullableInt16Vector(n int) *nullableInt16Vector {
438463
return &v
439464
}
440465

466+
func newNullableInt16VectorWithValues(s []*int16) *nullableInt16Vector {
467+
v := nullableInt16Vector(s)
468+
return &v
469+
}
470+
441471
func (v *nullableInt16Vector) Set(idx int, i interface{}) {
442472
if i == nil {
443473
(*v)[idx] = nil
@@ -523,6 +553,11 @@ func newNullableInt32Vector(n int) *nullableInt32Vector {
523553
return &v
524554
}
525555

556+
func newNullableInt32VectorWithValues(s []*int32) *nullableInt32Vector {
557+
v := nullableInt32Vector(s)
558+
return &v
559+
}
560+
526561
func (v *nullableInt32Vector) Set(idx int, i interface{}) {
527562
if i == nil {
528563
(*v)[idx] = nil
@@ -608,6 +643,11 @@ func newNullableInt64Vector(n int) *nullableInt64Vector {
608643
return &v
609644
}
610645

646+
func newNullableInt64VectorWithValues(s []*int64) *nullableInt64Vector {
647+
v := nullableInt64Vector(s)
648+
return &v
649+
}
650+
611651
func (v *nullableInt64Vector) Set(idx int, i interface{}) {
612652
if i == nil {
613653
(*v)[idx] = nil
@@ -693,6 +733,11 @@ func newNullableFloat32Vector(n int) *nullableFloat32Vector {
693733
return &v
694734
}
695735

736+
func newNullableFloat32VectorWithValues(s []*float32) *nullableFloat32Vector {
737+
v := nullableFloat32Vector(s)
738+
return &v
739+
}
740+
696741
func (v *nullableFloat32Vector) Set(idx int, i interface{}) {
697742
if i == nil {
698743
(*v)[idx] = nil
@@ -778,6 +823,11 @@ func newNullableFloat64Vector(n int) *nullableFloat64Vector {
778823
return &v
779824
}
780825

826+
func newNullableFloat64VectorWithValues(s []*float64) *nullableFloat64Vector {
827+
v := nullableFloat64Vector(s)
828+
return &v
829+
}
830+
781831
func (v *nullableFloat64Vector) Set(idx int, i interface{}) {
782832
if i == nil {
783833
(*v)[idx] = nil
@@ -863,6 +913,11 @@ func newNullableStringVector(n int) *nullableStringVector {
863913
return &v
864914
}
865915

916+
func newNullableStringVectorWithValues(s []*string) *nullableStringVector {
917+
v := nullableStringVector(s)
918+
return &v
919+
}
920+
866921
func (v *nullableStringVector) Set(idx int, i interface{}) {
867922
if i == nil {
868923
(*v)[idx] = nil
@@ -948,6 +1003,11 @@ func newNullableBoolVector(n int) *nullableBoolVector {
9481003
return &v
9491004
}
9501005

1006+
func newNullableBoolVectorWithValues(s []*bool) *nullableBoolVector {
1007+
v := nullableBoolVector(s)
1008+
return &v
1009+
}
1010+
9511011
func (v *nullableBoolVector) Set(idx int, i interface{}) {
9521012
if i == nil {
9531013
(*v)[idx] = nil
@@ -1033,6 +1093,11 @@ func newNullableTimeTimeVector(n int) *nullableTimeTimeVector {
10331093
return &v
10341094
}
10351095

1096+
func newNullableTimeTimeVectorWithValues(s []*time.Time) *nullableTimeTimeVector {
1097+
v := nullableTimeTimeVector(s)
1098+
return &v
1099+
}
1100+
10361101
func (v *nullableTimeTimeVector) Set(idx int, i interface{}) {
10371102
if i == nil {
10381103
(*v)[idx] = nil

0 commit comments

Comments
 (0)