mirror of
https://github.com/timshannon/bolthold.git
synced 2026-04-23 00:27:06 +08:00
Handle deleting already deleted records properly
This commit is contained in:
@@ -50,6 +50,9 @@ func (s *Store) delete(source BucketSource, key, dataType interface{}) error {
|
||||
value := reflect.New(reflect.TypeOf(dataType)).Interface()
|
||||
|
||||
bVal := b.Get(gk)
|
||||
if bVal == nil {
|
||||
return ErrNotFound
|
||||
}
|
||||
|
||||
err = s.decode(bVal, value)
|
||||
if err != nil {
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
package bolthold_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/timshannon/bolthold"
|
||||
bh "github.com/timshannon/bolthold"
|
||||
bolt "go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
@@ -179,3 +181,20 @@ func TestDeleteNotFound(t *testing.T) {
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeleteEOFIssue116(t *testing.T) {
|
||||
testWrap(t, func(store *bolthold.Store, t *testing.T) {
|
||||
type Item struct{ Name string }
|
||||
|
||||
ok(t, store.Insert("key", &Item{"Name"}))
|
||||
|
||||
empty := &Item{}
|
||||
|
||||
for i := 1; i < 5; i++ {
|
||||
err := store.Delete("key", empty)
|
||||
if err != nil && !errors.Is(err, bh.ErrNotFound) {
|
||||
t.Fatalf("unexpected error after delete #%d: %v", i, err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user