github.com/systematiccaos/gorm@v1.22.6/callbacks/callbacks.go (about) 1 package callbacks 2 3 import ( 4 "github.com/systematiccaos/gorm" 5 ) 6 7 var ( 8 createClauses = []string{"INSERT", "VALUES", "ON CONFLICT"} 9 queryClauses = []string{"SELECT", "FROM", "WHERE", "GROUP BY", "ORDER BY", "LIMIT", "FOR"} 10 updateClauses = []string{"UPDATE", "SET", "WHERE"} 11 deleteClauses = []string{"DELETE", "FROM", "WHERE"} 12 ) 13 14 type Config struct { 15 LastInsertIDReversed bool 16 CreateClauses []string 17 QueryClauses []string 18 UpdateClauses []string 19 DeleteClauses []string 20 } 21 22 func RegisterDefaultCallbacks(db *gorm.DB, config *Config) { 23 enableTransaction := func(db *gorm.DB) bool { 24 return !db.SkipDefaultTransaction 25 } 26 27 if len(config.CreateClauses) == 0 { 28 config.CreateClauses = createClauses 29 } 30 if len(config.QueryClauses) == 0 { 31 config.QueryClauses = queryClauses 32 } 33 if len(config.DeleteClauses) == 0 { 34 config.DeleteClauses = deleteClauses 35 } 36 if len(config.UpdateClauses) == 0 { 37 config.UpdateClauses = updateClauses 38 } 39 40 createCallback := db.Callback().Create() 41 createCallback.Match(enableTransaction).Register("gorm:begin_transaction", BeginTransaction) 42 createCallback.Register("gorm:before_create", BeforeCreate) 43 createCallback.Register("gorm:save_before_associations", SaveBeforeAssociations(true)) 44 createCallback.Register("gorm:create", Create(config)) 45 createCallback.Register("gorm:save_after_associations", SaveAfterAssociations(true)) 46 createCallback.Register("gorm:after_create", AfterCreate) 47 createCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction) 48 createCallback.Clauses = config.CreateClauses 49 50 queryCallback := db.Callback().Query() 51 queryCallback.Register("gorm:query", Query) 52 queryCallback.Register("gorm:preload", Preload) 53 queryCallback.Register("gorm:after_query", AfterQuery) 54 queryCallback.Clauses = config.QueryClauses 55 56 deleteCallback := db.Callback().Delete() 57 deleteCallback.Match(enableTransaction).Register("gorm:begin_transaction", BeginTransaction) 58 deleteCallback.Register("gorm:before_delete", BeforeDelete) 59 deleteCallback.Register("gorm:delete_before_associations", DeleteBeforeAssociations) 60 deleteCallback.Register("gorm:delete", Delete(config)) 61 deleteCallback.Register("gorm:after_delete", AfterDelete) 62 deleteCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction) 63 deleteCallback.Clauses = config.DeleteClauses 64 65 updateCallback := db.Callback().Update() 66 updateCallback.Match(enableTransaction).Register("gorm:begin_transaction", BeginTransaction) 67 updateCallback.Register("gorm:setup_reflect_value", SetupUpdateReflectValue) 68 updateCallback.Register("gorm:before_update", BeforeUpdate) 69 updateCallback.Register("gorm:save_before_associations", SaveBeforeAssociations(false)) 70 updateCallback.Register("gorm:update", Update(config)) 71 updateCallback.Register("gorm:save_after_associations", SaveAfterAssociations(false)) 72 updateCallback.Register("gorm:after_update", AfterUpdate) 73 updateCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction) 74 updateCallback.Clauses = config.UpdateClauses 75 76 rowCallback := db.Callback().Row() 77 rowCallback.Register("gorm:row", RowQuery) 78 rowCallback.Clauses = config.QueryClauses 79 80 rawCallback := db.Callback().Raw() 81 rawCallback.Register("gorm:raw", RawExec) 82 rawCallback.Clauses = config.QueryClauses 83 }