package orm
import (
)
type sliceTableModel struct {
structTableModel
slice reflect.Value
sliceLen int
sliceOfPtr bool
nextElem func() reflect.Value
}
var _ TableModel = (*sliceTableModel)(nil)
func ( reflect.Value, reflect.Type) *sliceTableModel {
:= &sliceTableModel{
structTableModel: structTableModel{
table: GetTable(),
root: ,
},
slice: ,
sliceLen: .Len(),
nextElem: internal.MakeSliceNextElemFunc(),
}
.init(.Type())
return
}
func ( *sliceTableModel) ( reflect.Type) {
switch .Elem().Kind() {
case reflect.Ptr, reflect.Interface:
.sliceOfPtr = true
}
}
func (*sliceTableModel) () {}
func ( *sliceTableModel) () bool {
return false
}
func ( *sliceTableModel) ( QueryFormatter, []byte, string) ([]byte, bool) {
if , := .table.FieldsMap[]; {
= append(, "_data."...)
= append(, .Column...)
return , true
}
return .structTableModel.AppendParam(, , )
}
func ( *sliceTableModel) ( string, func(*Query) (*Query, error)) *join {
return .join(.Value(), , )
}
func ( *sliceTableModel) ( reflect.Value) {
.slice = .Field(.index[len(.index)-1])
}
func ( *sliceTableModel) () reflect.Kind {
return reflect.Slice
}
func ( *sliceTableModel) () reflect.Value {
return .slice
}
func ( *sliceTableModel) () error {
if .slice.IsValid() && .slice.Len() > 0 {
.slice.Set(.slice.Slice(0, 0))
}
return nil
}
func ( *sliceTableModel) () ColumnScanner {
.strct = .nextElem()
.structInited = false
return
}
func ( *sliceTableModel) ( ColumnScanner) error {
return nil
}
var (
_ BeforeScanHook = (*sliceTableModel)(nil)
_ AfterScanHook = (*sliceTableModel)(nil)
)
func ( *sliceTableModel) ( context.Context) error {
if .table.hasFlag(afterSelectHookFlag) {
return callAfterSelectHookSlice(, .slice, .sliceOfPtr)
}
return nil
}
func ( *sliceTableModel) ( context.Context) (context.Context, error) {
if .table.hasFlag(beforeInsertHookFlag) {
return callBeforeInsertHookSlice(, .slice, .sliceOfPtr)
}
return , nil
}
func ( *sliceTableModel) ( context.Context) error {
if .table.hasFlag(afterInsertHookFlag) {
return callAfterInsertHookSlice(, .slice, .sliceOfPtr)
}
return nil
}
func ( *sliceTableModel) ( context.Context) (context.Context, error) {
if .table.hasFlag(beforeUpdateHookFlag) && !.IsNil() {
return callBeforeUpdateHookSlice(, .slice, .sliceOfPtr)
}
return , nil
}
func ( *sliceTableModel) ( context.Context) error {
if .table.hasFlag(afterUpdateHookFlag) {
return callAfterUpdateHookSlice(, .slice, .sliceOfPtr)
}
return nil
}
func ( *sliceTableModel) ( context.Context) (context.Context, error) {
if .table.hasFlag(beforeDeleteHookFlag) && !.IsNil() {
return callBeforeDeleteHookSlice(, .slice, .sliceOfPtr)
}
return , nil
}
func ( *sliceTableModel) ( context.Context) error {
if .table.hasFlag(afterDeleteHookFlag) && !.IsNil() {
return callAfterDeleteHookSlice(, .slice, .sliceOfPtr)
}
return nil
}
func ( *sliceTableModel) () error {
:= .slice.Len()
for := 0; < ; ++ {
:= indirect(.slice.Index())
:= .table.SoftDeleteField.Value()
if := .table.SetSoftDeleteField(); != nil {
return
}
}
return nil
}