diff --git a/callbacks/update.go b/callbacks/update.go index fa7640de..485f5079 100644 --- a/callbacks/update.go +++ b/callbacks/update.go @@ -73,6 +73,13 @@ func Update(config *Config) func(db *gorm.DB) { } else if _, ok := db.Statement.Clauses["SET"]; !ok { return } + + if _, ok := db.Statement.Clauses["WHERE"]; ok && db.Statement.Schema != nil && !db.Statement.Unscoped { + for _, c := range db.Statement.Schema.UpdateClauses { + db.Statement.AddClause(c) + } + } + db.Statement.Build(db.Statement.BuildClauses...) } diff --git a/tests/update_test.go b/tests/update_test.go index 14ed9820..abe520db 100644 --- a/tests/update_test.go +++ b/tests/update_test.go @@ -645,7 +645,13 @@ func TestSave(t *testing.T) { dryDB := DB.Session(&gorm.Session{DryRun: true}) stmt := dryDB.Save(&user).Statement - if !regexp.MustCompile("WHERE .id. = [^ ]+$").MatchString(stmt.SQL.String()) { + if !regexp.MustCompile(`.id. = .* AND .users.\..deleted_at. IS NULL`).MatchString(stmt.SQL.String()) { + t.Fatalf("invalid updating SQL, got %v", stmt.SQL.String()) + } + + dryDB = DB.Session(&gorm.Session{DryRun: true}) + stmt = dryDB.Unscoped().Save(&user).Statement + if !regexp.MustCompile(`WHERE .id. = [^ ]+$`).MatchString(stmt.SQL.String()) { t.Fatalf("invalid updating SQL, got %v", stmt.SQL.String()) }