diff --git a/decimal.go b/decimal.go index a37a230..c8c5d34 100644 --- a/decimal.go +++ b/decimal.go @@ -1841,6 +1841,26 @@ func (d *Decimal) Scan(value interface{}) error { *d = NewFromFloat(v) 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: // at least in sqlite3 when the value is 0 in db, the data is sent // to us as an int64 instead of a float64 ... diff --git a/decimal_test.go b/decimal_test.go index d398f2d..93f63b2 100644 --- a/decimal_test.go +++ b/decimal_test.go @@ -2471,6 +2471,66 @@ func TestDecimal_Scan(t *testing.T) { if err == nil { 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) {