Support big.Float #1973

Merged
lunny merged 2 commits from lunny/support_bigfloat into master 2021-07-07 06:00:17 +00:00
2 changed files with 40 additions and 14 deletions
Showing only changes of commit 6119c63a66 - Show all commits

View File

@ -565,7 +565,7 @@ func (p *sqlite3Driver) GenScanResult(colType string) (interface{}, error) {
case "REAL":
var s sql.NullFloat64
return &s, nil
case "NUMERIC":
case "NUMERIC", "DECIMAL":
var s sql.NullString
return &s, nil
case "BLOB":

View File

@ -771,23 +771,49 @@ func TestGetNil(t *testing.T) {
func TestGetBigFloat(t *testing.T) {
type GetBigFloat struct {
Id int64
Money *big.Float `xorm:"numeric"`
Money *big.Float `xorm:"numeric(22,2)"`
}
assert.NoError(t, PrepareEngine())
assertSync(t, new(GetBigFloat))
var gf = GetBigFloat{
Money: big.NewFloat(999999.99),
}
_, err := testEngine.Insert(&gf)
assert.NoError(t, err)
{
var gf = GetBigFloat{
Money: big.NewFloat(999999.99),
}
_, err := testEngine.Insert(&gf)
assert.NoError(t, err)
var m big.Float
has, err := testEngine.Table("get_big_float").Cols("money").Where("id=?", gf.Id).Get(&m)
assert.NoError(t, err)
assert.True(t, has)
assert.True(t, m.String() == gf.Money.String())
//fmt.Println(m.Cmp(gf.Money))
//assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
var m big.Float
has, err := testEngine.Table("get_big_float").Cols("money").Where("id=?", gf.Id).Get(&m)
assert.NoError(t, err)
assert.True(t, has)
assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String())
//fmt.Println(m.Cmp(gf.Money))
//assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
}
type GetBigFloat2 struct {
Id int64
Money *big.Float `xorm:"decimal(22,2)"`
}
assert.NoError(t, PrepareEngine())
assertSync(t, new(GetBigFloat2))
{
var gf2 = GetBigFloat2{
Money: big.NewFloat(9999999.99),
}
_, err := testEngine.Insert(&gf2)
assert.NoError(t, err)
var m2 big.Float
has, err := testEngine.Table("get_big_float2").Cols("money").Where("id=?", gf2.Id).Get(&m2)
assert.NoError(t, err)
assert.True(t, has)
assert.True(t, m2.String() == gf2.Money.String(), "%v != %v", m2.String(), gf2.Money.String())
//fmt.Println(m.Cmp(gf.Money))
//assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
}
}