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  }