@@ -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
185189func (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
0 commit comments