Move processor function into one file (#1637)
Move processor function into one file Reviewed-on: https://gitea.com/xorm/xorm/pulls/1637
This commit is contained in:
parent
79bdda3cf1
commit
0a06dc204a
|
@ -76,3 +76,69 @@ func (session *Session) executeProcessors() error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cleanupProcessorsClosures(slices *[]func(interface{})) {
|
||||||
|
if len(*slices) > 0 {
|
||||||
|
*slices = make([]func(interface{}), 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeBeforeClosures(session *Session, bean interface{}) {
|
||||||
|
// handle before delete processors
|
||||||
|
for _, closure := range session.beforeClosures {
|
||||||
|
closure(bean)
|
||||||
|
}
|
||||||
|
cleanupProcessorsClosures(&session.beforeClosures)
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeBeforeSet(bean interface{}, fields []string, scanResults []interface{}) {
|
||||||
|
if b, hasBeforeSet := bean.(BeforeSetProcessor); hasBeforeSet {
|
||||||
|
for ii, key := range fields {
|
||||||
|
b.BeforeSet(key, Cell(scanResults[ii].(*interface{})))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeAfterSet(bean interface{}, fields []string, scanResults []interface{}) {
|
||||||
|
if b, hasAfterSet := bean.(AfterSetProcessor); hasAfterSet {
|
||||||
|
for ii, key := range fields {
|
||||||
|
b.AfterSet(key, Cell(scanResults[ii].(*interface{})))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildAfterProcessors(session *Session, bean interface{}) {
|
||||||
|
// handle afterClosures
|
||||||
|
for _, closure := range session.afterClosures {
|
||||||
|
session.afterProcessors = append(session.afterProcessors, executedProcessor{
|
||||||
|
fun: func(sess *Session, bean interface{}) error {
|
||||||
|
closure(bean)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
session: session,
|
||||||
|
bean: bean,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if a, has := bean.(AfterLoadProcessor); has {
|
||||||
|
session.afterProcessors = append(session.afterProcessors, executedProcessor{
|
||||||
|
fun: func(sess *Session, bean interface{}) error {
|
||||||
|
a.AfterLoad()
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
session: session,
|
||||||
|
bean: bean,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if a, has := bean.(AfterLoadSessionProcessor); has {
|
||||||
|
session.afterProcessors = append(session.afterProcessors, executedProcessor{
|
||||||
|
fun: func(sess *Session, bean interface{}) error {
|
||||||
|
a.AfterLoad(sess)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
session: session,
|
||||||
|
bean: bean,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
53
session.go
53
session.go
|
@ -328,12 +328,6 @@ func (session *Session) DB() *core.DB {
|
||||||
return session.db()
|
return session.db()
|
||||||
}
|
}
|
||||||
|
|
||||||
func cleanupProcessorsClosures(slices *[]func(interface{})) {
|
|
||||||
if len(*slices) > 0 {
|
|
||||||
*slices = make([]func(interface{}), 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (session *Session) canCache() bool {
|
func (session *Session) canCache() bool {
|
||||||
if session.statement.RefTable == nil ||
|
if session.statement.RefTable == nil ||
|
||||||
session.statement.JoinStr != "" ||
|
session.statement.JoinStr != "" ||
|
||||||
|
@ -425,56 +419,17 @@ func (session *Session) row2Slice(rows *core.Rows, fields []string, bean interfa
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if b, hasBeforeSet := bean.(BeforeSetProcessor); hasBeforeSet {
|
executeBeforeSet(bean, fields, scanResults)
|
||||||
for ii, key := range fields {
|
|
||||||
b.BeforeSet(key, Cell(scanResults[ii].(*interface{})))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return scanResults, nil
|
return scanResults, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) slice2Bean(scanResults []interface{}, fields []string, bean interface{}, dataStruct *reflect.Value, table *schemas.Table) (schemas.PK, error) {
|
func (session *Session) slice2Bean(scanResults []interface{}, fields []string, bean interface{}, dataStruct *reflect.Value, table *schemas.Table) (schemas.PK, error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if b, hasAfterSet := bean.(AfterSetProcessor); hasAfterSet {
|
executeAfterSet(bean, fields, scanResults)
|
||||||
for ii, key := range fields {
|
|
||||||
b.AfterSet(key, Cell(scanResults[ii].(*interface{})))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// handle afterClosures
|
buildAfterProcessors(session, bean)
|
||||||
for _, closure := range session.afterClosures {
|
|
||||||
session.afterProcessors = append(session.afterProcessors, executedProcessor{
|
|
||||||
fun: func(sess *Session, bean interface{}) error {
|
|
||||||
closure(bean)
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
session: session,
|
|
||||||
bean: bean,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if a, has := bean.(AfterLoadProcessor); has {
|
|
||||||
session.afterProcessors = append(session.afterProcessors, executedProcessor{
|
|
||||||
fun: func(sess *Session, bean interface{}) error {
|
|
||||||
a.AfterLoad()
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
session: session,
|
|
||||||
bean: bean,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if a, has := bean.(AfterLoadSessionProcessor); has {
|
|
||||||
session.afterProcessors = append(session.afterProcessors, executedProcessor{
|
|
||||||
fun: func(sess *Session, bean interface{}) error {
|
|
||||||
a.AfterLoad(sess)
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
session: session,
|
|
||||||
bean: bean,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var tempMap = make(map[string]int)
|
var tempMap = make(map[string]int)
|
||||||
var pk schemas.PK
|
var pk schemas.PK
|
||||||
|
|
|
@ -96,11 +96,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle before delete processors
|
executeBeforeClosures(session, bean)
|
||||||
for _, closure := range session.beforeClosures {
|
|
||||||
closure(bean)
|
|
||||||
}
|
|
||||||
cleanupProcessorsClosures(&session.beforeClosures)
|
|
||||||
|
|
||||||
if processor, ok := interface{}(bean).(BeforeDeleteProcessor); ok {
|
if processor, ok := interface{}(bean).(BeforeDeleteProcessor); ok {
|
||||||
processor.BeforeDelete()
|
processor.BeforeDelete()
|
||||||
|
|
|
@ -233,7 +233,7 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
for _, closure := range session.afterClosures {
|
for _, closure := range session.afterClosures {
|
||||||
closure(elemValue)
|
closure(elemValue)
|
||||||
}
|
}
|
||||||
if processor, ok := interface{}(elemValue).(AfterInsertProcessor); ok {
|
if processor, ok := elemValue.(AfterInsertProcessor); ok {
|
||||||
processor.AfterInsert()
|
processor.AfterInsert()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -246,7 +246,7 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
|
||||||
session.afterInsertBeans[elemValue] = &afterClosures
|
session.afterInsertBeans[elemValue] = &afterClosures
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if _, ok := interface{}(elemValue).(AfterInsertProcessor); ok {
|
if _, ok := elemValue.(AfterInsertProcessor); ok {
|
||||||
session.afterInsertBeans[elemValue] = nil
|
session.afterInsertBeans[elemValue] = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue