@@ -21,28 +21,30 @@ import (
2121
2222// Pre-computed reflect type values to avoid repeated allocations.
2323var (
24- reflectTypeBool = reflect .TypeOf ( true )
25- reflectTypeInt8 = reflect .TypeOf ( int8 ( 0 ) )
26- reflectTypeInt16 = reflect .TypeOf ( int16 ( 0 ) )
27- reflectTypeInt32 = reflect .TypeOf ( int32 ( 0 ) )
28- reflectTypeInt64 = reflect .TypeOf ( int64 ( 0 ) )
29- reflectTypeUint8 = reflect .TypeOf ( uint8 ( 0 ) )
30- reflectTypeUint16 = reflect .TypeOf ( uint16 ( 0 ) )
31- reflectTypeUint32 = reflect .TypeOf ( uint32 ( 0 ) )
32- reflectTypeUint64 = reflect .TypeOf ( uint64 ( 0 ) )
33- reflectTypeFloat32 = reflect .TypeOf ( float32 ( 0 ) )
34- reflectTypeFloat64 = reflect .TypeOf ( float64 ( 0 ) )
35- reflectTypeTime = reflect .TypeOf ( time.Time {} )
36- reflectTypeInterval = reflect .TypeOf ( Interval {} )
37- reflectTypeBigInt = reflect .TypeOf ( big .NewInt ( 0 ) )
38- reflectTypeString = reflect .TypeOf ( "" )
39- reflectTypeBytes = reflect .TypeOf ([ ]byte {} )
40- reflectTypeDecimal = reflect .TypeOf ( Decimal {} )
41- reflectTypeSliceAny = reflect .TypeOf ([ ]any {} )
42- reflectTypeMapString = reflect .TypeOf ( map [string ]any {} )
43- reflectTypeMap = reflect .TypeOf ( Map {} )
44- reflectTypeUnion = reflect .TypeOf ( Union {} )
24+ reflectTypeBool = reflect .TypeFor [ bool ]( )
25+ reflectTypeInt8 = reflect .TypeFor [ int8 ]( )
26+ reflectTypeInt16 = reflect .TypeFor [ int16 ]( )
27+ reflectTypeInt32 = reflect .TypeFor [ int32 ]( )
28+ reflectTypeInt64 = reflect .TypeFor [ int64 ]( )
29+ reflectTypeUint8 = reflect .TypeFor [ uint8 ]( )
30+ reflectTypeUint16 = reflect .TypeFor [ uint16 ]( )
31+ reflectTypeUint32 = reflect .TypeFor [ uint32 ]( )
32+ reflectTypeUint64 = reflect .TypeFor [ uint64 ]( )
33+ reflectTypeFloat32 = reflect .TypeFor [ float32 ]( )
34+ reflectTypeFloat64 = reflect .TypeFor [ float64 ]( )
35+ reflectTypeTime = reflect .TypeFor [ time.Time ]( )
36+ reflectTypeInterval = reflect .TypeFor [ Interval ]( )
37+ reflectTypeBigInt = reflect .TypeFor [ * big.Int ]( )
38+ reflectTypeString = reflect .TypeFor [ string ]( )
39+ reflectTypeBytes = reflect .TypeFor [[ ]byte ]( )
40+ reflectTypeDecimal = reflect .TypeFor [ Decimal ]( )
41+ reflectTypeSliceAny = reflect .TypeFor [[ ]any ]( )
42+ reflectTypeMapString = reflect .TypeFor [ map [string ]any ]( )
43+ reflectTypeMap = reflect .TypeFor [ Map ]( )
44+ reflectTypeUnion = reflect .TypeFor [ Union ]( )
4545 reflectTypeAny = reflect .TypeFor [any ]()
46+ reflectTypeUUID = reflect .TypeFor [UUID ]()
47+ reflectTypeHugeInt = reflect .TypeFor [mapping.HugeInt ]()
4648)
4749
4850type numericType interface {
@@ -104,13 +106,13 @@ func inferUUID(val any) (mapping.HugeInt, error) {
104106 id = * v
105107 case []uint8 :
106108 if len (v ) != uuidLength {
107- return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( id ) .String ())
109+ return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflectTypeUUID .String ())
108110 }
109111 for i := range uuidLength {
110112 id [i ] = v [i ]
111113 }
112114 default :
113- return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( id ) .String ())
115+ return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflectTypeUUID .String ())
114116 }
115117 hi := uuidToHugeInt (id )
116118 return hi , nil
@@ -200,20 +202,20 @@ func inferHugeInt(val any) (mapping.HugeInt, error) {
200202 }
201203 case * big.Int :
202204 if v == nil {
203- return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( hi ) .String ())
205+ return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflectTypeHugeInt .String ())
204206 }
205207 if hi , err = hugeIntFromNative (v ); err != nil {
206208 return mapping.HugeInt {}, err
207209 }
208210 case Decimal :
209211 if v .Value == nil {
210- return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( hi ) .String ())
212+ return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflectTypeHugeInt .String ())
211213 }
212214 if hi , err = hugeIntFromNative (v .Value ); err != nil {
213215 return mapping.HugeInt {}, err
214216 }
215217 default :
216- return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( hi ) .String ())
218+ return mapping.HugeInt {}, castError (reflect .TypeOf (val ).String (), reflectTypeHugeInt .String ())
217219 }
218220
219221 return hi , nil
@@ -251,7 +253,7 @@ func inferInterval(val any) (mapping.Interval, error) {
251253 case Interval :
252254 i = v
253255 default :
254- return mapping.Interval {}, castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( i ) .String ())
256+ return mapping.Interval {}, castError (reflect .TypeOf (val ).String (), reflectTypeInterval .String ())
255257 }
256258 return mapping .NewInterval (i .Months , i .Days , i .Micros ), nil
257259}
@@ -327,7 +329,7 @@ func castToTime(val any) (time.Time, error) {
327329 case time.Time :
328330 ti = v
329331 default :
330- return ti , castError (reflect .TypeOf (val ).String (), reflect . TypeOf ( ti ) .String ())
332+ return ti , castError (reflect .TypeOf (val ).String (), reflectTypeTime .String ())
331333 }
332334 return ti .UTC (), nil
333335}
0 commit comments