@@ -154,20 +154,24 @@ func (s *SQL) getPath(k []string, o interface{}) (interface{}, error) {
154
154
return nil , wrapErr (keyDoesNotExist , k [0 ])
155
155
}
156
156
157
- func (s * SQL ) deleteArrayItem (k string , o interface {}) bool {
157
+ func (s * SQL ) deleteArrayItem (k string , o interface {}) error {
158
158
if o == nil {
159
- return false
159
+ return wrapErr ( notArrayObj )
160
160
}
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 )
166
165
}
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
168
172
}
169
173
170
- func (s * SQL ) deleteItem (k string , o interface {}) bool {
174
+ func (s * SQL ) deleteItem (k string , o interface {}) error {
171
175
_ , ok := o .(map [interface {}]interface {})
172
176
if ! ok {
173
177
return s .deleteArrayItem (k , o )
@@ -176,10 +180,10 @@ func (s *SQL) deleteItem(k string, o interface{}) bool {
176
180
for kn := range o .(map [interface {}]interface {}) {
177
181
if kn .(string ) == k {
178
182
delete (o .(map [interface {}]interface {}), kn )
179
- return true
183
+ return nil
180
184
}
181
185
}
182
- return false
186
+ return wrapErr ( keyDoesNotExist , k )
183
187
}
184
188
185
189
func (s * SQL ) delPath (k string , o interface {}) error {
@@ -193,7 +197,7 @@ func (s *SQL) delPath(k string, o interface{}) error {
193
197
}
194
198
195
199
if len (keys ) == 1 {
196
- if ! s .deleteItem (keys [0 ], o ) {
200
+ if err := s .deleteItem (keys [0 ], o ); err != nil {
197
201
return wrapErr (keyDoesNotExist , k )
198
202
}
199
203
return nil
@@ -206,7 +210,7 @@ func (s *SQL) delPath(k string, o interface{}) error {
206
210
}
207
211
208
212
s .Cache .DropKeys ()
209
- if ! s .deleteItem (keys [len (keys )- 1 ], obj ) {
213
+ if err := s .deleteItem (keys [len (keys )- 1 ], obj ); err != nil {
210
214
return wrapErr (keyDoesNotExist , k )
211
215
}
212
216
0 commit comments