Replace #1044 #1935
|
@ -1396,15 +1396,22 @@ func TestNilFromDB(t *testing.T) {
|
|||
assert.NoError(t, PrepareEngine())
|
||||
assertSync(t, new(TestTable1))
|
||||
|
||||
cnt, err := testEngine.Insert(&TestTable1{
|
||||
var tt0 = TestTable1{
|
||||
Field1: &TestFieldType1{
|
||||
cb: []byte("string"),
|
||||
},
|
||||
UpdateTime: time.Now(),
|
||||
})
|
||||
}
|
||||
cnt, err := testEngine.Insert(&tt0)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var tt1 TestTable1
|
||||
has, err := testEngine.ID(tt0.Id).Get(&tt1)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, has)
|
||||
assert.EqualValues(t, "string", string(tt1.Field1.cb))
|
||||
|
||||
cnt, err = testEngine.Update(TestTable1{
|
||||
UpdateTime: time.Now().Add(time.Second),
|
||||
}, TestTable1{
|
||||
|
@ -1418,4 +1425,37 @@ func TestNilFromDB(t *testing.T) {
|
|||
})
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var tt = TestTable1{
|
||||
UpdateTime: time.Now(),
|
||||
Field1: &TestFieldType1{
|
||||
cb: nil,
|
||||
},
|
||||
}
|
||||
cnt, err = testEngine.Insert(&tt)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var tt2 TestTable1
|
||||
has, err = testEngine.ID(tt.Id).Get(&tt2)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, has)
|
||||
assert.Nil(t, tt2.Field1)
|
||||
|
||||
var tt3 = TestTable1{
|
||||
UpdateTime: time.Now(),
|
||||
Field1: &TestFieldType1{
|
||||
cb: []byte{},
|
||||
},
|
||||
}
|
||||
cnt, err = testEngine.Insert(&tt3)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var tt4 TestTable1
|
||||
has, err = testEngine.ID(tt3.Id).Get(&tt4)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, has)
|
||||
assert.NotNil(t, tt4.Field1)
|
||||
assert.NotNil(t, tt4.Field1.cb)
|
||||
}
|
||||
|
|
|
@ -127,8 +127,9 @@ func (statement *Statement) BuildUpdates(tableValue reflect.Value,
|
|||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
val = data
|
||||
if data != nil {
|
||||
val = data
|
||||
}
|
||||
goto APPEND
|
||||
}
|
||||
}
|
||||
|
@ -138,8 +139,9 @@ func (statement *Statement) BuildUpdates(tableValue reflect.Value,
|
|||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
val = data
|
||||
if data != nil {
|
||||
val = data
|
||||
}
|
||||
goto APPEND
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,12 @@ func (statement *Statement) Value2Interface(col *schemas.Column, fieldValue refl
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if data == nil {
|
||||
if col.Nullable {
|
||||
return nil, nil
|
||||
}
|
||||
data = []byte{}
|
||||
}
|
||||
if col.SQLType.IsBlob() {
|
||||
return data, nil
|
||||
}
|
||||
|
@ -45,12 +51,15 @@ func (statement *Statement) Value2Interface(col *schemas.Column, fieldValue refl
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if data == nil {
|
||||
if col.Nullable {
|
||||
return nil, nil
|
||||
}
|
||||
data = []byte{}
|
||||
}
|
||||
if col.SQLType.IsBlob() {
|
||||
return data, nil
|
||||
}
|
||||
if nil == data {
|
||||
return nil, nil
|
||||
}
|
||||
return string(data), nil
|
||||
}
|
||||
}
|
||||
|
|
|
@ -768,7 +768,7 @@ func (session *Session) slice2Bean(scanResults []interface{}, fields []string, b
|
|||
|
||||
fieldValue, err := session.getField(dataStruct, key, table, idx)
|
||||
if err != nil {
|
||||
if !strings.Contains(err.Error(), "is not valid") {
|
||||
if _, ok := err.(ErrFieldIsNotValid); !ok {
|
||||
session.engine.logger.Warnf("%v", err)
|
||||
}
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue
Block a user