Skip to content

Commit b8da80e

Browse files
authored
Merge pull request #117 from timshannon/issue116
Handle deleting already deleted records properly
2 parents 3be86da + 29bdf90 commit b8da80e

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

delete.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ func (s *Store) delete(source BucketSource, key, dataType interface{}) error {
5050
value := reflect.New(reflect.TypeOf(dataType)).Interface()
5151

5252
bVal := b.Get(gk)
53+
if bVal == nil {
54+
return ErrNotFound
55+
}
5356

5457
err = s.decode(bVal, value)
5558
if err != nil {

delete_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
package bolthold_test
66

77
import (
8+
"errors"
89
"testing"
910
"time"
1011

1112
"github.com/timshannon/bolthold"
13+
bh "github.com/timshannon/bolthold"
1214
bolt "go.etcd.io/bbolt"
1315
)
1416

@@ -179,3 +181,20 @@ func TestDeleteNotFound(t *testing.T) {
179181

180182
})
181183
}
184+
185+
func TestDeleteEOFIssue116(t *testing.T) {
186+
testWrap(t, func(store *bolthold.Store, t *testing.T) {
187+
type Item struct{ Name string }
188+
189+
ok(t, store.Insert("key", &Item{"Name"}))
190+
191+
empty := &Item{}
192+
193+
for i := 1; i < 5; i++ {
194+
err := store.Delete("key", empty)
195+
if err != nil && !errors.Is(err, bh.ErrNotFound) {
196+
t.Fatalf("unexpected error after delete #%d: %v", i, err)
197+
}
198+
}
199+
})
200+
}

0 commit comments

Comments
 (0)