Skip to content

Commit 11eaa40

Browse files
authored
Merge pull request #27 from ulfox/fix/delete-array-item
fix: [issues/26] deleteArrayItem
2 parents db7c95e + bca151e commit 11eaa40

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

db/sql.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -154,20 +154,24 @@ func (s *SQL) getPath(k []string, o interface{}) (interface{}, error) {
154154
return nil, wrapErr(keyDoesNotExist, k[0])
155155
}
156156

157-
func (s *SQL) deleteArrayItem(k string, o interface{}) bool {
157+
func (s *SQL) deleteArrayItem(k string, o interface{}) error {
158158
if o == nil {
159-
return false
159+
return wrapErr(notArrayObj)
160160
}
161-
for ki, kn := range o.([]interface{}) {
162-
if kn.(map[interface{}]interface{})[k] != nil {
163-
o.([]interface{})[ki] = emptyMap()
164-
return true
165-
}
161+
162+
i, err := s.getIndex(k)
163+
if err != nil {
164+
return wrapErr(err)
166165
}
167-
return false
166+
167+
o.([]interface{})[i] = o.([]interface{})[len(o.([]interface{}))-1]
168+
o.([]interface{})[len(o.([]interface{}))-1] = ""
169+
o = o.([]interface{})[:len(o.([]interface{}))-1]
170+
171+
return nil
168172
}
169173

170-
func (s *SQL) deleteItem(k string, o interface{}) bool {
174+
func (s *SQL) deleteItem(k string, o interface{}) error {
171175
_, ok := o.(map[interface{}]interface{})
172176
if !ok {
173177
return s.deleteArrayItem(k, o)
@@ -176,10 +180,10 @@ func (s *SQL) deleteItem(k string, o interface{}) bool {
176180
for kn := range o.(map[interface{}]interface{}) {
177181
if kn.(string) == k {
178182
delete(o.(map[interface{}]interface{}), kn)
179-
return true
183+
return nil
180184
}
181185
}
182-
return false
186+
return wrapErr(keyDoesNotExist, k)
183187
}
184188

185189
func (s *SQL) delPath(k string, o interface{}) error {
@@ -193,7 +197,7 @@ func (s *SQL) delPath(k string, o interface{}) error {
193197
}
194198

195199
if len(keys) == 1 {
196-
if !s.deleteItem(keys[0], o) {
200+
if err := s.deleteItem(keys[0], o); err != nil {
197201
return wrapErr(keyDoesNotExist, k)
198202
}
199203
return nil
@@ -206,7 +210,7 @@ func (s *SQL) delPath(k string, o interface{}) error {
206210
}
207211

208212
s.Cache.DropKeys()
209-
if !s.deleteItem(keys[len(keys)-1], obj) {
213+
if err := s.deleteItem(keys[len(keys)-1], obj); err != nil {
210214
return wrapErr(keyDoesNotExist, k)
211215
}
212216

tests/delete_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ func TestDelete(t *testing.T) {
3939
err = storage.Delete("test.path.key-12")
4040
assert.NotEqual(t, err, nil)
4141

42+
err = storage.Upsert(
43+
"key-33",
44+
map[string][]string{
45+
"key-5": {"value-5"},
46+
"key-6": {"value-6"},
47+
},
48+
)
49+
50+
assert.Equal(t, err, nil)
51+
err = storage.Delete("key-33.key-5")
52+
assert.Equal(t, err, nil)
53+
err = storage.Delete("key-33.key-6.[0]")
54+
assert.Equal(t, err, nil)
55+
4256
err = os.Remove(path)
4357
assert.Equal(t, err, nil)
4458
}

0 commit comments

Comments
 (0)