diff --git a/soft_delete.go b/soft_delete.go new file mode 100644 index 00000000..0e50b50a --- /dev/null +++ b/soft_delete.go @@ -0,0 +1,39 @@ +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)} +}