Compare commits

...

2 commits

Author SHA1 Message Date
corelmax
e117758075
Merge e5ee5e5502 into d00399e161 2024-03-17 16:40:31 +08:00
Anucha Petchagun
e5ee5e5502
patch function Scan to support int,int8,int16,int32 (#1)
* add tests for int8,int32 and int64 

* implement Scan to support int8, int16, int32

* also support for int natural
2019-04-24 17:59:35 +07:00
2 changed files with 80 additions and 0 deletions

View file

@ -1535,6 +1535,26 @@ func (d *Decimal) Scan(value interface{}) error {
*d = NewFromFloat(v) *d = NewFromFloat(v)
return nil return nil
case int:
// also better to implement to support all type of int.
// profitable to create another abstract layer for testing
// data access with no depends on real RDBMS.
*d = New(int64(v), 0)
return nil
case int8:
*d = New(int64(v), 0)
return nil
case int16:
*d = New(int64(v), 0)
return nil
case int32:
*d = New(int64(v), 0)
return nil
case int64: case int64:
// at least in sqlite3 when the value is 0 in db, the data is sent // at least in sqlite3 when the value is 0 in db, the data is sent
// to us as an int64 instead of a float64 ... // to us as an int64 instead of a float64 ...

View file

@ -2497,6 +2497,66 @@ func TestDecimal_Scan(t *testing.T) {
if err == nil { if err == nil {
t.Errorf("a.Scan(Foo{}) should have thrown an error but did not") t.Errorf("a.Scan(Foo{}) should have thrown an error but did not")
} }
dbvalueInt8 := int8(32)
expected = New(int64(32), 0)
err = a.Scan(dbvalueInt8)
if err != nil {
// Scan failed... no need to test result value
t.Errorf("a.Scan(32) failed with message: %s", err)
} else {
// Scan succeeded... test resulting values
if !a.Equal(expected) {
t.Errorf("%s does not equal to %s", a, expected)
}
}
dbvalueInt16 := int16(21)
expected = New(int64(21), 0)
err = a.Scan(dbvalueInt16)
if err != nil {
// Scan failed... no need to test result value
t.Errorf("a.Scan(21) failed with message: %s", err)
} else {
// Scan succeeded... test resulting values
if !a.Equal(expected) {
t.Errorf("%s does not equal to %s", a, expected)
}
}
dbvalueInt32 := int32(32)
expected = New(int64(32), 0)
err = a.Scan(dbvalueInt32)
if err != nil {
// Scan failed... no need to test result value
t.Errorf("a.Scan(32) failed with message: %s", err)
} else {
// Scan succeeded... test resulting values
if !a.Equal(expected) {
t.Errorf("%s does not equal to %s", a, expected)
}
}
dbvalueIntNatural := 3264
expected = New(int64(3264), 0)
err = a.Scan(dbvalueIntNatural)
if err != nil {
// Scan failed... no need to test result value
t.Errorf("a.Scan(3264) failed with message: %s", err)
} else {
// Scan succeeded... test resulting values
if !a.Equal(expected) {
t.Errorf("%s does not equal to %s", a, expected)
}
}
} }
func TestDecimal_Value(t *testing.T) { func TestDecimal_Value(t *testing.T) {