xorm icon indicating copy to clipboard operation
xorm copied to clipboard

[null] 自定义类型为nil时,没有忽略掉该字段

Open Tang-RoseChild opened this issue 5 years ago • 3 comments

背景

当类型中的某个字段实现了core.Conversion接口,但是值为nil时,还是调用了ToDB()

期望

为nil时,应该忽略掉该字段,使用数据库默认的值,例如NULL等

示例

Addr 为json 类型

type Person struct {
  Addr *Addr
}

type Addr struct {
  Street string
}
func (r *Addr) FromDB(d []byte) error {
	return json.Unmarshal(d, r)
}

func (r *Addr) ToDB() ([]byte, error) {
	return json.Addr(r)
}

var p Person
session.Insert(p)

输出:
数据库中addr的字段值为 json的 "null",而不是期望的数据库中的 NULL

源代码

if fieldConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok {
 // balabala

if fieldConvert, ok := fieldValue.Interface().(core.Conversion); ok {
// balabala

这里没有判断nil的处理

Tang-RoseChild avatar Jul 29 '19 02:07 Tang-RoseChild

@Tang-RoseChild could you send a PR to fix that?

lunny avatar Jul 29 '19 03:07 lunny

@Tang-RoseChild could you send a PR to fix that?

i'm too busy now, maybe later?

Tang-RoseChild avatar Jul 29 '19 15:07 Tang-RoseChild

@Tang-RoseChild That's OK.

lunny avatar Jul 30 '19 03:07 lunny