elimited BeforeXXX and AfterXXX operations with After() and Before()

This commit is contained in:
Nash Tsai 2013-12-02 14:23:04 +08:00
parent 69b0a9b713
commit e9a5dddbef
2 changed files with 34 additions and 106 deletions

View File

@ -272,46 +272,18 @@ func (engine *Engine) Id(id int64) *Session {
return session.Id(id) return session.Id(id)
} }
// Apply before insert Processor, affected bean is passed to closure arg // Apply before Processor, affected bean is passed to closure arg
func (engine *Engine) BeforeInsert(closures func(interface{})) *Session { func (engine *Engine) Before(closures func(interface{})) *Session {
session := engine.NewSession() session := engine.NewSession()
session.IsAutoClose = true session.IsAutoClose = true
return session.BeforeInsert(closures) return session.Before(closures)
}
// Apply before update Processor, affected bean is passed to closure arg
func (engine *Engine) BeforeUpdate(closures func(interface{})) *Session {
session := engine.NewSession()
session.IsAutoClose = true
return session.BeforeUpdate(closures)
}
// Apply before delete Processor, affected bean is passed to closure arg
func (engine *Engine) BeforeDelete(closures func(interface{})) *Session {
session := engine.NewSession()
session.IsAutoClose = true
return session.BeforeDelete(closures)
} }
// Apply after insert Processor, affected bean is passed to closure arg // Apply after insert Processor, affected bean is passed to closure arg
func (engine *Engine) AfterInsert(closures func(interface{})) *Session { func (engine *Engine) After(closures func(interface{})) *Session {
session := engine.NewSession() session := engine.NewSession()
session.IsAutoClose = true session.IsAutoClose = true
return session.AfterInsert(closures) return session.After(closures)
}
// Apply after update Processor, affected bean is passed to closure arg
func (engine *Engine) AfterUpdate(closures func(interface{})) *Session {
session := engine.NewSession()
session.IsAutoClose = true
return session.AfterUpdate(closures)
}
// Apply after delete Processor, affected bean is passed to closure arg
func (engine *Engine) AfterDelete(closures func(interface{})) *Session {
session := engine.NewSession()
session.IsAutoClose = true
return session.AfterDelete(closures)
} }
// set charset when create table, only support mysql now // set charset when create table, only support mysql now

View File

@ -29,12 +29,8 @@ type Session struct {
afterDeleteBeans []interface{} afterDeleteBeans []interface{}
// -- // --
beforeInsertClosures []func(interface{}) beforeClosures []func(interface{})
beforeUpdateClosures []func(interface{}) afterClosures []func(interface{})
beforeDeleteClosures []func(interface{})
afterInsertClosures []func(interface{})
afterUpdateClosures []func(interface{})
afterDeleteClosures []func(interface{})
} }
// Method Init reset the session as the init status. // Method Init reset the session as the init status.
@ -49,12 +45,8 @@ func (session *Session) Init() {
session.afterInsertBeans = make([]interface{}, 0) session.afterInsertBeans = make([]interface{}, 0)
session.afterUpdateBeans = make([]interface{}, 0) session.afterUpdateBeans = make([]interface{}, 0)
session.afterDeleteBeans = make([]interface{}, 0) session.afterDeleteBeans = make([]interface{}, 0)
session.beforeInsertClosures = make([]func(interface{}), 0) session.beforeClosures = make([]func(interface{}), 0)
session.beforeUpdateClosures = make([]func(interface{}), 0) session.afterClosures = make([]func(interface{}), 0)
session.beforeDeleteClosures = make([]func(interface{}), 0)
session.afterInsertClosures = make([]func(interface{}), 0)
session.afterUpdateClosures = make([]func(interface{}), 0)
session.afterDeleteClosures = make([]func(interface{}), 0)
} }
// Method Close release the connection from pool // Method Close release the connection from pool
@ -100,50 +92,18 @@ func (session *Session) Id(id int64) *Session {
return session return session
} }
// Apply before insert Processor, affected bean is passed to closure arg // Apply before Processor, affected bean is passed to closure arg
func (session *Session) BeforeInsert(closures func(interface{})) *Session { func (session *Session) Before(closures func(interface{})) *Session {
if closures != nil { if closures != nil {
session.beforeInsertClosures = append(session.beforeInsertClosures, closures) session.beforeClosures = append(session.beforeClosures, closures)
} }
return session return session
} }
// Apply before update Processor, affected bean is passed to closure arg // Apply after Processor, affected bean is passed to closure arg
func (session *Session) BeforeUpdate(closures func(interface{})) *Session { func (session *Session) After(closures func(interface{})) *Session {
if closures != nil { if closures != nil {
session.beforeUpdateClosures = append(session.beforeUpdateClosures, closures) session.afterClosures = append(session.afterClosures, closures)
}
return session
}
// Apply before delete Processor, affected bean is passed to closure arg
func (session *Session) BeforeDelete(closures func(interface{})) *Session {
if closures != nil {
session.beforeDeleteClosures = append(session.beforeDeleteClosures, closures)
}
return session
}
// Apply after insert Processor, affected bean is passed to closure arg
func (session *Session) AfterInsert(closures func(interface{})) *Session {
if closures != nil {
session.afterInsertClosures = append(session.afterInsertClosures, closures)
}
return session
}
// Apply after update Processor, affected bean is passed to closure arg
func (session *Session) AfterUpdate(closures func(interface{})) *Session {
if closures != nil {
session.afterUpdateClosures = append(session.afterUpdateClosures, closures)
}
return session
}
// Apply after delete Processor, affected bean is passed to closure arg
func (session *Session) AfterDelete(closures func(interface{})) *Session {
if closures != nil {
session.afterDeleteClosures = append(session.afterDeleteClosures, closures)
} }
return session return session
} }
@ -324,12 +284,10 @@ func (session *Session) Commit() error {
session.Engine.LogSQL("COMMIT") session.Engine.LogSQL("COMMIT")
session.IsCommitedOrRollbacked = true session.IsCommitedOrRollbacked = true
var err error var err error
if err = session.Tx.Commit(); err == nil { if err = session.Tx.Commit(); err == nil {
// handle processors after tx committed // handle processors after tx committed
for _, elem := range session.afterInsertBeans { for _, elem := range session.afterInsertBeans {
for _, closure := range session.afterInsertClosures { for _, closure := range session.afterClosures {
closure(elem) closure(elem)
} }
@ -338,7 +296,7 @@ func (session *Session) Commit() error {
} }
} }
for _, elem := range session.afterUpdateBeans { for _, elem := range session.afterUpdateBeans {
for _, closure := range session.afterUpdateClosures { for _, closure := range session.afterClosures {
closure(elem) closure(elem)
} }
if processor, ok := interface{}(elem).(AfterUpdateProcessor); ok { if processor, ok := interface{}(elem).(AfterUpdateProcessor); ok {
@ -346,7 +304,7 @@ func (session *Session) Commit() error {
} }
} }
for _, elem := range session.afterDeleteBeans { for _, elem := range session.afterDeleteBeans {
for _, closure := range session.afterDeleteClosures { for _, closure := range session.afterClosures {
closure(elem) closure(elem)
} }
if processor, ok := interface{}(elem).(AfterDeleteProcessor); ok { if processor, ok := interface{}(elem).(AfterDeleteProcessor); ok {
@ -367,10 +325,8 @@ func (session *Session) Commit() error {
cleanUpFunc(&session.afterUpdateBeans) cleanUpFunc(&session.afterUpdateBeans)
cleanUpFunc(&session.afterDeleteBeans) cleanUpFunc(&session.afterDeleteBeans)
// !nash! shoule session based processors get cleanup? // !nash! should session based processors get cleanup?
cleanUpProcessorsFunc(&session.afterInsertClosures) cleanUpProcessorsFunc(&session.afterClosures)
cleanUpProcessorsFunc(&session.afterUpdateClosures)
cleanUpProcessorsFunc(&session.afterDeleteClosures)
} }
return err return err
} }
@ -1456,7 +1412,7 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
colPlaces := make([]string, 0) colPlaces := make([]string, 0)
// handle BeforeInsertProcessor // handle BeforeInsertProcessor
for _, closure := range session.beforeInsertClosures { for _, closure := range session.beforeClosures {
closure(elemValue) closure(elemValue)
} }
@ -1542,19 +1498,19 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
session.cacheInsert(session.Statement.TableName()) session.cacheInsert(session.Statement.TableName())
} }
hasAfterInsertClosures := len(session.afterInsertClosures) > 0 hasAfterClosures := len(session.afterClosures) > 0
for i := 0; i < size; i++ { for i := 0; i < size; i++ {
elemValue := sliceValue.Index(i).Interface() elemValue := sliceValue.Index(i).Interface()
// handle AfterInsertProcessor // handle AfterInsertProcessor
if session.IsAutoCommit { if session.IsAutoCommit {
for _, closure := range session.afterInsertClosures { for _, closure := range session.afterClosures {
closure(elemValue) closure(elemValue)
} }
if processor, ok := interface{}(elemValue).(AfterInsertProcessor); ok { if processor, ok := interface{}(elemValue).(AfterInsertProcessor); ok {
processor.AfterInsert() processor.AfterInsert()
} }
} else { } else {
if hasAfterInsertClosures { if hasAfterClosures {
session.afterInsertBeans = append(session.afterInsertBeans, elemValue) session.afterInsertBeans = append(session.afterInsertBeans, elemValue)
} else { } else {
if _, ok := interface{}(elemValue).(AfterInsertProcessor); ok { if _, ok := interface{}(elemValue).(AfterInsertProcessor); ok {
@ -1837,7 +1793,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
session.Statement.RefTable = table session.Statement.RefTable = table
// handle BeforeInsertProcessor // handle BeforeInsertProcessor
for _, closure := range session.beforeInsertClosures { for _, closure := range session.beforeClosures {
closure(bean) closure(bean)
} }
if processor, ok := interface{}(bean).(BeforeInsertProcessor); ok { if processor, ok := interface{}(bean).(BeforeInsertProcessor); ok {
@ -1869,7 +1825,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
handleAfterInsertProcessorFunc := func(bean interface{}) { handleAfterInsertProcessorFunc := func(bean interface{}) {
if session.IsAutoCommit { if session.IsAutoCommit {
for _, closure := range session.afterInsertClosures { for _, closure := range session.afterClosures {
closure(bean) closure(bean)
} }
if processor, ok := interface{}(bean).(AfterInsertProcessor); ok { if processor, ok := interface{}(bean).(AfterInsertProcessor); ok {
@ -1877,7 +1833,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
processor.AfterInsert() processor.AfterInsert()
} }
} else { } else {
if len(session.afterInsertClosures) > 0 { if len(session.afterClosures) > 0 {
session.afterInsertBeans = append(session.afterInsertBeans, bean) session.afterInsertBeans = append(session.afterInsertBeans, bean)
} else { } else {
if _, ok := interface{}(bean).(AfterInsertProcessor); ok { if _, ok := interface{}(bean).(AfterInsertProcessor); ok {
@ -2173,7 +2129,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
// handle before update processors // handle before update processors
for _, closure := range session.beforeUpdateClosures { for _, closure := range session.beforeClosures {
closure(bean) closure(bean)
} }
@ -2282,7 +2238,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
// handle after update processors // handle after update processors
if session.IsAutoCommit { if session.IsAutoCommit {
for _, closure := range session.afterUpdateClosures { for _, closure := range session.afterClosures {
closure(bean) closure(bean)
} }
if processor, ok := interface{}(bean).(AfterUpdateProcessor); ok { if processor, ok := interface{}(bean).(AfterUpdateProcessor); ok {
@ -2290,7 +2246,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
processor.AfterUpdate() processor.AfterUpdate()
} }
} else { } else {
if len(session.afterInsertClosures) > 0 { if len(session.afterClosures) > 0 {
session.afterUpdateBeans = append(session.afterUpdateBeans, bean) session.afterUpdateBeans = append(session.afterUpdateBeans, bean)
} else { } else {
if _, ok := interface{}(bean).(AfterUpdateProcessor); ok { if _, ok := interface{}(bean).(AfterUpdateProcessor); ok {
@ -2367,7 +2323,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
// handle before delete processors // handle before delete processors
for _, closure := range session.beforeDeleteClosures { for _, closure := range session.beforeClosures {
closure(bean) closure(bean)
} }
@ -2410,7 +2366,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
// handle after delete processors // handle after delete processors
if session.IsAutoCommit { if session.IsAutoCommit {
for _, closure := range session.afterDeleteClosures { for _, closure := range session.afterClosures {
closure(bean) closure(bean)
} }
if processor, ok := interface{}(bean).(AfterDeleteProcessor); ok { if processor, ok := interface{}(bean).(AfterDeleteProcessor); ok {
@ -2418,7 +2374,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
processor.AfterDelete() processor.AfterDelete()
} }
} else { } else {
if len(session.afterDeleteClosures) > 0 { if len(session.afterClosures) > 0 {
session.afterDeleteBeans = append(session.afterDeleteBeans, bean) session.afterDeleteBeans = append(session.afterDeleteBeans, bean)
} else { } else {
if _, ok := interface{}(bean).(AfterDeleteProcessor); ok { if _, ok := interface{}(bean).(AfterDeleteProcessor); ok {