File tree Expand file tree Collapse file tree 4 files changed +14
-2
lines changed Expand file tree Collapse file tree 4 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -135,7 +135,7 @@ func Delete(db *gorm.DB) {
135135 db .Statement .Build ("DELETE" , "FROM" , "WHERE" )
136136 }
137137
138- if _ , ok := db .Statement .Clauses ["WHERE" ]; ! db .AllowGlobalUpdate && ! ok {
138+ if _ , ok := db .Statement .Clauses ["WHERE" ]; ! db .AllowGlobalUpdate && ! ok && db . Error == nil {
139139 db .AddError (gorm .ErrMissingWhereClause )
140140 return
141141 }
Original file line number Diff line number Diff line change @@ -124,6 +124,12 @@ func (sd SoftDeleteDeleteClause) ModifyStatement(stmt *Statement) {
124124 }
125125 }
126126
127+ if _ , ok := stmt .Clauses ["WHERE" ]; ! stmt .DB .AllowGlobalUpdate && ! ok {
128+ stmt .DB .AddError (ErrMissingWhereClause )
129+ } else {
130+ SoftDeleteQueryClause {Field : sd .Field }.ModifyStatement (stmt )
131+ }
132+
127133 stmt .AddClauseIfNotExists (clause.Update {})
128134 stmt .Build ("UPDATE" , "SET" , "WHERE" )
129135 }
Original file line number Diff line number Diff line change @@ -49,7 +49,7 @@ func TestDelete(t *testing.T) {
4949 t .Errorf ("errors happened when delete: %v" , err )
5050 }
5151
52- if err := DB .Delete (User {}).Error ; err != gorm .ErrMissingWhereClause {
52+ if err := DB .Delete (& User {}).Error ; err != gorm .ErrMissingWhereClause {
5353 t .Errorf ("errors happened when delete: %v" , err )
5454 }
5555
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package tests_test
33import (
44 "encoding/json"
55 "errors"
6+ "regexp"
67 "testing"
78
89 "gorm.io/gorm"
@@ -28,6 +29,11 @@ func TestSoftDelete(t *testing.T) {
2829 t .Fatalf ("No error should happen when soft delete user, but got %v" , err )
2930 }
3031
32+ sql := DB .Session (& gorm.Session {DryRun : true }).Delete (& user ).Statement .SQL .String ()
33+ if ! regexp .MustCompile (`UPDATE .users. SET .deleted_at.=.* WHERE .users.\..id. = .* AND .users.\..deleted_at. IS NULL` ).MatchString (sql ) {
34+ t .Fatalf ("invalid sql generated, got %v" , sql )
35+ }
36+
3137 if DB .First (& User {}, "name = ?" , user .Name ).Error == nil {
3238 t .Errorf ("Can't find a soft deleted record" )
3339 }
You can’t perform that action at this time.
0 commit comments