package callbacks
import (
"gorm.io/gorm"
)
var (
createClauses = []string {"INSERT" , "VALUES" , "ON CONFLICT" }
queryClauses = []string {"SELECT" , "FROM" , "WHERE" , "GROUP BY" , "ORDER BY" , "LIMIT" , "FOR" }
updateClauses = []string {"UPDATE" , "SET" , "WHERE" }
deleteClauses = []string {"DELETE" , "FROM" , "WHERE" }
)
type Config struct {
LastInsertIDReversed bool
CreateClauses []string
QueryClauses []string
UpdateClauses []string
DeleteClauses []string
}
func RegisterDefaultCallbacks (db *gorm .DB , config *Config ) {
enableTransaction := func (db *gorm .DB ) bool {
return !db .SkipDefaultTransaction
}
if len (config .CreateClauses ) == 0 {
config .CreateClauses = createClauses
}
if len (config .QueryClauses ) == 0 {
config .QueryClauses = queryClauses
}
if len (config .DeleteClauses ) == 0 {
config .DeleteClauses = deleteClauses
}
if len (config .UpdateClauses ) == 0 {
config .UpdateClauses = updateClauses
}
createCallback := db .Callback ().Create ()
createCallback .Match (enableTransaction ).Register ("gorm:begin_transaction" , BeginTransaction )
createCallback .Register ("gorm:before_create" , BeforeCreate )
createCallback .Register ("gorm:save_before_associations" , SaveBeforeAssociations (true ))
createCallback .Register ("gorm:create" , Create (config ))
createCallback .Register ("gorm:save_after_associations" , SaveAfterAssociations (true ))
createCallback .Register ("gorm:after_create" , AfterCreate )
createCallback .Match (enableTransaction ).Register ("gorm:commit_or_rollback_transaction" , CommitOrRollbackTransaction )
createCallback .Clauses = config .CreateClauses
queryCallback := db .Callback ().Query ()
queryCallback .Register ("gorm:query" , Query )
queryCallback .Register ("gorm:preload" , Preload )
queryCallback .Register ("gorm:after_query" , AfterQuery )
queryCallback .Clauses = config .QueryClauses
deleteCallback := db .Callback ().Delete ()
deleteCallback .Match (enableTransaction ).Register ("gorm:begin_transaction" , BeginTransaction )
deleteCallback .Register ("gorm:before_delete" , BeforeDelete )
deleteCallback .Register ("gorm:delete_before_associations" , DeleteBeforeAssociations )
deleteCallback .Register ("gorm:delete" , Delete (config ))
deleteCallback .Register ("gorm:after_delete" , AfterDelete )
deleteCallback .Match (enableTransaction ).Register ("gorm:commit_or_rollback_transaction" , CommitOrRollbackTransaction )
deleteCallback .Clauses = config .DeleteClauses
updateCallback := db .Callback ().Update ()
updateCallback .Match (enableTransaction ).Register ("gorm:begin_transaction" , BeginTransaction )
updateCallback .Register ("gorm:setup_reflect_value" , SetupUpdateReflectValue )
updateCallback .Register ("gorm:before_update" , BeforeUpdate )
updateCallback .Register ("gorm:save_before_associations" , SaveBeforeAssociations (false ))
updateCallback .Register ("gorm:update" , Update (config ))
updateCallback .Register ("gorm:save_after_associations" , SaveAfterAssociations (false ))
updateCallback .Register ("gorm:after_update" , AfterUpdate )
updateCallback .Match (enableTransaction ).Register ("gorm:commit_or_rollback_transaction" , CommitOrRollbackTransaction )
updateCallback .Clauses = config .UpdateClauses
rowCallback := db .Callback ().Row ()
rowCallback .Register ("gorm:row" , RowQuery )
rowCallback .Clauses = config .QueryClauses
rawCallback := db .Callback ().Raw ()
rawCallback .Register ("gorm:raw" , RawExec )
rawCallback .Clauses = config .QueryClauses
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .