Add includeNil requiredField when custom struct field IsZero in Update method. Add test
This commit is contained in:
parent
c4b5433155
commit
a3687832fa
|
@ -126,7 +126,7 @@ func (statement *Statement) BuildUpdates(tableValue reflect.Value,
|
||||||
|
|
||||||
if fieldValue.CanAddr() {
|
if fieldValue.CanAddr() {
|
||||||
if structConvert, ok := fieldValue.Addr().Interface().(convert.Conversion); ok {
|
if structConvert, ok := fieldValue.Addr().Interface().(convert.Conversion); ok {
|
||||||
if utils.IsZero(fieldValue.Interface()) {
|
if !includeNil && !requiredField && utils.IsZero(fieldValue.Interface()) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
data, err := structConvert.ToDB()
|
data, err := structConvert.ToDB()
|
||||||
|
|
|
@ -633,6 +633,9 @@ func (d *ZDecimal) FromDB(data []byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d ZDecimal) ToDB() ([]byte, error) {
|
func (d ZDecimal) ToDB() ([]byte, error) {
|
||||||
|
if d.value == nil {
|
||||||
|
return []byte("0"), nil
|
||||||
|
}
|
||||||
return []byte(fmt.Sprintf("%d", (d.value).Int64())), nil
|
return []byte(fmt.Sprintf("%d", (d.value).Int64())), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,6 +691,23 @@ func TestZDecimal(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.True(t, has)
|
assert.True(t, has)
|
||||||
assert.Equal(t, "test2", "test2")
|
assert.Equal(t, "test2", "test2")
|
||||||
assert.False(t, m.Amount.IsZero())
|
assert.False(t, m2.Amount.IsZero())
|
||||||
assert.Equal(t, "10000000000000000", m.Amount.String())
|
assert.Equal(t, "10000000000000000", m2.Amount.String())
|
||||||
|
|
||||||
|
_, err = testEngine.AllCols().Update(&ZMyMoney{
|
||||||
|
Id: 1,
|
||||||
|
Account: "test3",
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var m3 = ZMyMoney{
|
||||||
|
Id: 1,
|
||||||
|
}
|
||||||
|
has, err = testEngine.Get(&m3)
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
assert.Equal(t, "test3", "test3")
|
||||||
|
assert.True(t, m3.Amount.IsZero())
|
||||||
|
assert.Equal(t, "0", m3.Amount.String())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue