1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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
- WithReturning 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
- }
- 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)
- if len(config.CreateClauses) == 0 {
- config.CreateClauses = createClauses
- }
- createCallback.Clauses = config.CreateClauses
- queryCallback := db.Callback().Query()
- queryCallback.Register("gorm:query", Query)
- queryCallback.Register("gorm:preload", Preload)
- queryCallback.Register("gorm:after_query", AfterQuery)
- if len(config.QueryClauses) == 0 {
- config.QueryClauses = queryClauses
- }
- 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)
- deleteCallback.Register("gorm:after_delete", AfterDelete)
- deleteCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction)
- if len(config.DeleteClauses) == 0 {
- config.DeleteClauses = deleteClauses
- }
- 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)
- updateCallback.Register("gorm:save_after_associations", SaveAfterAssociations(false))
- updateCallback.Register("gorm:after_update", AfterUpdate)
- updateCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction)
- if len(config.UpdateClauses) == 0 {
- config.UpdateClauses = updateClauses
- }
- 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
- }
|