xorm/soft_delete.go

40 lines
894 B
Go

package xorm
import (
"reflect"
"xorm.io/builder"
"xorm.io/core"
)
type SoftDelete interface {
getDeleteValue() interface{}
getSelectFilter(deleteField string) builder.Cond
setBeanConumenAttr(bean interface{}, col *core.Column, val interface{})
}
type DefaultSoftDeleteHandler struct {
}
func (h *DefaultSoftDeleteHandler) setBeanConumenAttr(bean interface{}, col *core.Column, val interface{}) {
t := val.(int64)
v, err := col.ValueOf(bean)
if err != nil {
return
}
if v.CanSet() {
switch v.Type().Kind() {
case reflect.Int, reflect.Int64, reflect.Int32:
v.SetInt(t)
case reflect.Uint, reflect.Uint64, reflect.Uint32:
v.SetUint(uint64(t))
}
}
}
func (h *DefaultSoftDeleteHandler) getDeleteValue() interface{} {
return int64(1)
}
func (h *DefaultSoftDeleteHandler) getSelectFilter(deleteField string) builder.Cond {
return builder.Eq{deleteField: int64(0)}
}