From a3687832fab1a3c1312fdd5e1127a7a4d87762e6 Mon Sep 17 00:00:00 2001 From: tyler Date: Fri, 22 Mar 2024 03:50:20 +0800 Subject: [PATCH] Add includeNil requiredField when custom struct field IsZero in Update method. Add test --- internal/statements/update.go | 2 +- tests/types_test.go | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/internal/statements/update.go b/internal/statements/update.go index 34c6111a..dd490aef 100644 --- a/internal/statements/update.go +++ b/internal/statements/update.go @@ -126,7 +126,7 @@ func (statement *Statement) BuildUpdates(tableValue reflect.Value, if fieldValue.CanAddr() { if structConvert, ok := fieldValue.Addr().Interface().(convert.Conversion); ok { - if utils.IsZero(fieldValue.Interface()) { + if !includeNil && !requiredField && utils.IsZero(fieldValue.Interface()) { continue } data, err := structConvert.ToDB() diff --git a/tests/types_test.go b/tests/types_test.go index bb07aeaf..9079d34b 100644 --- a/tests/types_test.go +++ b/tests/types_test.go @@ -633,6 +633,9 @@ func (d *ZDecimal) FromDB(data []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 } @@ -688,6 +691,23 @@ func TestZDecimal(t *testing.T) { assert.NoError(t, err) assert.True(t, has) assert.Equal(t, "test2", "test2") - assert.False(t, m.Amount.IsZero()) - assert.Equal(t, "10000000000000000", m.Amount.String()) + assert.False(t, m2.Amount.IsZero()) + 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()) }