MCPcopy
hub / github.com/go-gorm/gorm / Delete

Function Delete

callbacks/delete.go:113–188  ·  view source on GitHub ↗
(config *Config)

Source from the content-addressed store, hash-verified

111}
112
113func Delete(config *Config) func(db *gorm.DB) {
114 supportReturning := utils.Contains(config.DeleteClauses, "RETURNING")
115
116 return func(db *gorm.DB) {
117 if db.Error != nil {
118 return
119 }
120
121 if db.Statement.Schema != nil {
122 for _, c := range db.Statement.Schema.DeleteClauses {
123 db.Statement.AddClause(c)
124 }
125 }
126
127 if db.Statement.SQL.Len() == 0 {
128 db.Statement.SQL.Grow(100)
129 db.Statement.AddClauseIfNotExists(clause.Delete{})
130
131 if db.Statement.Schema != nil {
132 _, queryValues := schema.GetIdentityFieldValuesMap(db.Statement.Context, db.Statement.ReflectValue, db.Statement.Schema.PrimaryFields)
133 column, values := schema.ToQueryValues(db.Statement.Table, db.Statement.Schema.PrimaryFieldDBNames, queryValues)
134
135 if len(values) > 0 {
136 db.Statement.AddClause(clause.Where{Exprs: []clause.Expression{clause.IN{Column: column, Values: values}}})
137 }
138
139 if db.Statement.ReflectValue.CanAddr() && db.Statement.Dest != db.Statement.Model && db.Statement.Model != nil {
140 _, queryValues = schema.GetIdentityFieldValuesMap(db.Statement.Context, reflect.ValueOf(db.Statement.Model), db.Statement.Schema.PrimaryFields)
141 column, values = schema.ToQueryValues(db.Statement.Table, db.Statement.Schema.PrimaryFieldDBNames, queryValues)
142
143 if len(values) > 0 {
144 db.Statement.AddClause(clause.Where{Exprs: []clause.Expression{clause.IN{Column: column, Values: values}}})
145 }
146 }
147 }
148
149 db.Statement.AddClauseIfNotExists(clause.From{})
150
151 db.Statement.Build(db.Statement.BuildClauses...)
152 }
153
154 checkMissingWhereConditions(db)
155
156 if !db.DryRun && db.Error == nil {
157 ok, mode := hasReturning(db, supportReturning)
158 if !ok {
159 result, err := db.Statement.ConnPool.ExecContext(db.Statement.Context, db.Statement.SQL.String(), db.Statement.Vars...)
160
161 if db.AddError(err) == nil {
162 db.RowsAffected, _ = result.RowsAffected()
163
164 if db.Statement.Result != nil {
165 db.Statement.Result.Result = result
166 db.Statement.Result.RowsAffected = db.RowsAffected
167 }
168 }
169
170 return

Callers 1

RegisterDefaultCallbacksFunction · 0.70

Calls 15

ContainsFunction · 0.92
ToQueryValuesFunction · 0.92
ScanFunction · 0.92
hasReturningFunction · 0.85
AddClauseMethod · 0.80
LenMethod · 0.80
AddClauseIfNotExistsMethod · 0.80
BuildMethod · 0.65
ExecContextMethod · 0.65
AddErrorMethod · 0.65

Tested by

no test coverage detected