diff --git a/utils.go b/utils.go index fab4e8f..77f2935 100644 --- a/utils.go +++ b/utils.go @@ -227,6 +227,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = time.Duration(s) * time.Millisecond + case float32: + *v = time.Duration(float64(s) * float64(time.Second)) + case float64: *v = time.Duration(s * float64(time.Second)) @@ -241,6 +244,8 @@ func (s nullScanner) Scan(src any) (err error) { switch s := src.(type) { case int64: *v = s != 0 + case float32: + *v = s != 0 case float64: *v = s != 0 case bool: @@ -262,6 +267,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = int(s) + case float32: + *v = int(s) + case float64: *v = int(s) @@ -296,6 +304,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = int8(s) + case float32: + *v = int8(s) + case float64: *v = int8(s) @@ -327,6 +338,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = int16(s) + case float32: + *v = int16(s) + case float64: *v = int16(s) @@ -358,6 +372,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = int32(s) + case float32: + *v = int32(s) + case float64: *v = int32(s) @@ -389,6 +406,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = s + case float32: + *v = int64(s) + case float64: *v = int64(s) @@ -417,6 +437,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = uint(s) + case float32: + *v = uint(s) + case float64: *v = uint(s) @@ -451,6 +474,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = uint8(s) + case float32: + *v = uint8(s) + case float64: *v = uint8(s) @@ -482,6 +508,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = uint16(s) + case float32: + *v = uint16(s) + case float64: *v = uint16(s) @@ -513,6 +542,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = uint32(s) + case float32: + *v = uint32(s) + case float64: *v = uint32(s) @@ -544,6 +576,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = uint64(s) + case float32: + *v = uint64(s) + case float64: *v = uint64(s) @@ -572,6 +607,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = float32(s) + case float32: + *v = s + case float64: *v = float32(s) @@ -603,6 +641,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = float64(s) + case float32: + *v = float64(s) + case float64: *v = s @@ -628,6 +669,9 @@ func (s nullScanner) Scan(src any) (err error) { case int64: *v = strconv.FormatInt(s, 10) + case float32: + *v = strconv.FormatFloat(float64(s), 'f', -1, 64) + case float64: *v = strconv.FormatFloat(s, 'f', -1, 64) @@ -669,6 +713,10 @@ func toTime(src any, loc *time.Location) (time.Time, error) { case int64: return time.Unix(s, 0).In(loc), nil + case float32: + int, frac := math.Modf(float64(s)) + return time.Unix(int64(int), int64(frac*1000000000)).In(loc), nil + case float64: int, frac := math.Modf(s) return time.Unix(int64(int), int64(frac*1000000000)).In(loc), nil