Fix bug of ToDB when update on a nil pointer
This commit is contained in:
parent
b422930617
commit
4b9d2d6974
|
@ -1350,3 +1350,44 @@ func TestUpdateMultiplePK(t *testing.T) {
|
||||||
_, err = testEngine.ID(&MySlice{test.Id, test.Name}).Update(test)
|
_, err = testEngine.ID(&MySlice{test.Id, test.Name}).Update(test)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TestFieldType1 struct {
|
||||||
|
cb []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *TestFieldType1) FromDB(src []byte) error {
|
||||||
|
a.cb = src
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a TestFieldType1) ToDB() ([]byte, error) {
|
||||||
|
return a.cb, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type TestTable1 struct {
|
||||||
|
Id int64
|
||||||
|
Field1 *TestFieldType1 `xorm:"text"`
|
||||||
|
UpdateTime time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNilFromDB(t *testing.T) {
|
||||||
|
assert.NoError(t, PrepareEngine())
|
||||||
|
assertSync(t, new(TestTable1))
|
||||||
|
|
||||||
|
cnt, err := testEngine.Insert(&TestTable1{
|
||||||
|
Field1: &TestFieldType1{
|
||||||
|
cb: []byte("string"),
|
||||||
|
},
|
||||||
|
UpdateTime: time.Now(),
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
cnt, err = testEngine.Update(TestTable1{
|
||||||
|
UpdateTime: time.Now(),
|
||||||
|
}, TestTable1{
|
||||||
|
Id: 1,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ func (statement *Statement) BuildUpdates(tableValue reflect.Value,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if structConvert, ok := fieldValue.Interface().(convert.Conversion); ok {
|
if structConvert, ok := fieldValue.Interface().(convert.Conversion); ok && !fieldValue.IsNil() {
|
||||||
data, err := structConvert.ToDB()
|
data, err := structConvert.ToDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
Loading…
Reference in New Issue