From 909d814f6574a3f4d666929a46da2b6f82acae01 Mon Sep 17 00:00:00 2001 From: lqu3j Date: Tue, 29 Sep 2020 13:10:38 +0800 Subject: [PATCH] support float64, float32 convert to int2, int4, int8 --- int2.go | 22 ++++++++++++++++++++++ int4.go | 22 ++++++++++++++++++++++ int8.go | 22 ++++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/int2.go b/int2.go index 67fa1acc..b7517881 100644 --- a/int2.go +++ b/int2.go @@ -85,6 +85,16 @@ func (dst *Int2) Set(src interface{}) error { return err } *dst = Int2{Int: int16(num), Status: Present} + case float32: + if value > math.MaxInt16 { + return errors.Errorf("%d is greater than maximum value for Int2", value) + } + *dst = Int2{Int: int16(value), Status: Present} + case float64: + if value > math.MaxInt16 { + return errors.Errorf("%d is greater than maximum value for Int2", value) + } + *dst = Int2{Int: int16(value), Status: Present} case *int8: if value == nil { *dst = Int2{Status: Null} @@ -151,6 +161,18 @@ func (dst *Int2) Set(src interface{}) error { } else { return dst.Set(*value) } + case *float32: + if value == nil { + *dst = Int2{Status: Null} + } else { + return dst.Set(*value) + } + case *float64: + if value == nil { + *dst = Int2{Status: Null} + } else { + return dst.Set(*value) + } default: if originalSrc, ok := underlyingNumberType(src); ok { return dst.Set(originalSrc) diff --git a/int4.go b/int4.go index c4ed6103..66652bbe 100644 --- a/int4.go +++ b/int4.go @@ -77,6 +77,16 @@ func (dst *Int4) Set(src interface{}) error { return err } *dst = Int4{Int: int32(num), Status: Present} + case float32: + if value > math.MaxInt32 { + return errors.Errorf("%d is greater than maximum value for Int4", value) + } + *dst = Int4{Int: int32(value), Status: Present} + case float64: + if value > math.MaxInt32 { + return errors.Errorf("%d is greater than maximum value for Int4", value) + } + *dst = Int4{Int: int32(value), Status: Present} case *int8: if value == nil { *dst = Int4{Status: Null} @@ -143,6 +153,18 @@ func (dst *Int4) Set(src interface{}) error { } else { return dst.Set(*value) } + case *float32: + if value == nil { + *dst = Int4{Status: Null} + } else { + return dst.Set(*value) + } + case *float64: + if value == nil { + *dst = Int4{Status: Null} + } else { + return dst.Set(*value) + } default: if originalSrc, ok := underlyingNumberType(src); ok { return dst.Set(originalSrc) diff --git a/int8.go b/int8.go index 445fef0d..f0114194 100644 --- a/int8.go +++ b/int8.go @@ -68,6 +68,16 @@ func (dst *Int8) Set(src interface{}) error { return err } *dst = Int8{Int: num, Status: Present} + case float32: + if value > math.MaxInt64 { + return errors.Errorf("%d is greater than maximum value for Int8", value) + } + *dst = Int8{Int: int64(value), Status: Present} + case float64: + if value > math.MaxInt64 { + return errors.Errorf("%d is greater than maximum value for Int8", value) + } + *dst = Int8{Int: int64(value), Status: Present} case *int8: if value == nil { *dst = Int8{Status: Null} @@ -134,6 +144,18 @@ func (dst *Int8) Set(src interface{}) error { } else { return dst.Set(*value) } + case *float32: + if value == nil { + *dst = Int8{Status: Null} + } else { + return dst.Set(*value) + } + case *float64: + if value == nil { + *dst = Int8{Status: Null} + } else { + return dst.Set(*value) + } default: if originalSrc, ok := underlyingNumberType(src); ok { return dst.Set(originalSrc)