@@ -275,7 +275,75 @@ function arraySkiplistIndexSuite () {
275
275
catch ( err ) {
276
276
assertEqual ( errors . ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED . code , err . errorNum ) ;
277
277
}
278
- }
278
+ } ,
279
+
280
+ ////////////////////////////////////////////////////////////////////////////////
281
+ /// @brief test: Test update of an array index where entries are removed:
282
+ ////////////////////////////////////////////////////////////////////////////////
283
+
284
+ testPersistentArrayIndexUpdates : function ( ) {
285
+ collection . ensureIndex ( { type :"persistent" , fields : [ "a[*].b" ] , unique : true } ) ;
286
+
287
+ let meta = collection . insert ( { a : [ { b :"xyz" } ] } ) ;
288
+
289
+ try {
290
+ collection . insert ( { a : [ { b :"xyz" } ] } ) ;
291
+ fail ( ) ;
292
+ }
293
+ catch ( err ) {
294
+ assertEqual ( errors . ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED . code , err . errorNum ) ;
295
+ }
296
+
297
+ collection . update ( meta . _key , { a : [ ] } ) ;
298
+
299
+ let meta2 = collection . insert ( { a : [ { b :"xyz" } ] } ) ; // must work again
300
+
301
+ try {
302
+ collection . insert ( { a : [ { b :"xyz" } ] } ) ;
303
+ fail ( ) ;
304
+ }
305
+ catch ( err ) {
306
+ assertEqual ( errors . ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED . code , err . errorNum ) ;
307
+ }
308
+
309
+ collection . replace ( meta2 . _key , { a : [ ] } ) ;
310
+
311
+ collection . insert ( { a : [ { b :"xyz" } ] } ) ; // must work again
312
+ } ,
313
+
314
+ ////////////////////////////////////////////////////////////////////////////////
315
+ /// @brief test: Test update of an array index where entries are changed:
316
+ ////////////////////////////////////////////////////////////////////////////////
317
+
318
+ testPersistentArrayIndexUpdates2 : function ( ) {
319
+ collection . ensureIndex ( { type :"persistent" , fields : [ "a[*].b" ] , unique : true } ) ;
320
+
321
+ let meta = collection . insert ( { a : [ { b :"xyz" } ] } ) ;
322
+
323
+ try {
324
+ collection . insert ( { a : [ { b :"xyz" } ] } ) ;
325
+ fail ( ) ;
326
+ }
327
+ catch ( err ) {
328
+ assertEqual ( errors . ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED . code , err . errorNum ) ;
329
+ }
330
+
331
+ collection . update ( meta . _key , { a : [ { b :"123" } ] } ) ;
332
+
333
+ let meta2 = collection . insert ( { a : [ { b :"xyz" } ] } ) ; // must work again
334
+
335
+ try {
336
+ collection . insert ( { a : [ { b :"xyz" } ] } ) ;
337
+ fail ( ) ;
338
+ }
339
+ catch ( err ) {
340
+ assertEqual ( errors . ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED . code , err . errorNum ) ;
341
+ }
342
+
343
+ collection . replace ( meta2 . _key , { a : [ { b :"456" } ] } ) ;
344
+
345
+ collection . insert ( { a : [ { b :"xyz" } ] } ) ; // must work again
346
+ } ,
279
347
280
348
} ;
281
349
}
0 commit comments