From 546069e74cef62c8f5a32c8146fcc6541b66f6e6 Mon Sep 17 00:00:00 2001 From: Dan Hardman Date: Fri, 12 Aug 2016 11:23:10 +0100 Subject: [PATCH] Add primary key check before delete --- callback_delete.go | 4 ++++ errors.go | 2 ++ 2 files changed, 6 insertions(+) diff --git a/callback_delete.go b/callback_delete.go index c8ffcc82..99d5b454 100644 --- a/callback_delete.go +++ b/callback_delete.go @@ -20,6 +20,10 @@ func beforeDeleteCallback(scope *Scope) { // deleteCallback used to delete data from database or set deleted_at to current time (when using with soft delete) func deleteCallback(scope *Scope) { + if scope.PrimaryKeyZero() { + scope.db.AddError(ErrNonSpecificDelete) + } + if !scope.HasError() { var extraOption string if str, ok := scope.Get("gorm:delete_option"); ok { diff --git a/errors.go b/errors.go index ce3a25c0..ceadf587 100644 --- a/errors.go +++ b/errors.go @@ -6,6 +6,8 @@ import ( ) var ( + // ErrNonSpecificDelete no primary key specified for delete, happens when you try to `Delete` a record without a primary key set + ErrNonSpecificDelete = errors.New("no primary key specified for delete") // ErrRecordNotFound record not found error, happens when haven't find any matched data when looking up with a struct ErrRecordNotFound = errors.New("record not found") // ErrInvalidSQL invalid SQL error, happens when you passed invalid SQL