From 7bf2f9348eaab29732b64570e5c9357bd76172ca Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 7 Sep 2023 19:30:46 +0200 Subject: [PATCH] delete returning preload --- callbacks/callbacks.go | 1 + tests/delete_test.go | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/callbacks/callbacks.go b/callbacks/callbacks.go index 63c90249..eebbce61 100644 --- a/callbacks/callbacks.go +++ b/callbacks/callbacks.go @@ -58,6 +58,7 @@ func RegisterDefaultCallbacks(db *gorm.DB, config *Config) { deleteCallback.Register("gorm:before_delete", BeforeDelete) deleteCallback.Register("gorm:delete_before_associations", DeleteBeforeAssociations) deleteCallback.Register("gorm:delete", Delete(config)) + deleteCallback.Register("gorm:preload", Preload) deleteCallback.Register("gorm:after_delete", AfterDelete) deleteCallback.Match(enableTransaction).Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction) deleteCallback.Clauses = config.DeleteClauses diff --git a/tests/delete_test.go b/tests/delete_test.go index 5cb4b91e..9c1b6483 100644 --- a/tests/delete_test.go +++ b/tests/delete_test.go @@ -216,6 +216,7 @@ func TestSoftDeleteReturning(t *testing.T) { GetUser("delete-returning-1", Config{}), GetUser("delete-returning-2", Config{}), GetUser("delete-returning-3", Config{}), + GetUser("delete-returning-4", Config{Pets: 1}), } DB.Create(&users) @@ -226,10 +227,26 @@ func TestSoftDeleteReturning(t *testing.T) { } var count int64 - DB.Model(&User{}).Where("name IN ?", []string{users[0].Name, users[1].Name, users[2].Name}).Count(&count) + DB.Model(&User{}).Where("name IN ?", []string{users[0].Name, users[1].Name, users[2].Name, users[3].Name}).Count(&count) + if count != 2 { + t.Errorf("failed to delete data, current count %v", count) + } + + var result User + if err := DB.Model(&User{}).Where("name = ?", users[3].Name).Clauses(clause.Returning{}).Preload("Pets").Delete(&result).Error; err != nil { + t.Errorf("failed to delete data, got %v", err) + } + + DB.Model(&User{}).Where("name IN ?", []string{users[0].Name, users[1].Name, users[2].Name, users[3].Name}).Count(&count) if count != 1 { t.Errorf("failed to delete data, current count %v", count) } + + if len(result.Pets) != 1 { + t.Errorf("failed to preload pets, got %v", result.Pets) + } + + CheckPet(t, *result.Pets[0], *users[3].Pets[0]) } func TestDeleteReturning(t *testing.T) {