@@ -366,13 +366,11 @@ DatabaseController.prototype.deleteEverything = function() {
366
366
function keysForQuery ( query ) {
367
367
var sublist = query [ '$and' ] || query [ '$or' ] ;
368
368
if ( sublist ) {
369
- var answer = new Set ( ) ;
370
- for ( var subquery of sublist ) {
371
- for ( var key of keysForQuery ( subquery ) ) {
372
- answer . add ( key ) ;
373
- }
374
- }
375
- return answer ;
369
+ let answer = sublist . reduce ( ( memo , subquery ) => {
370
+ return memo . concat ( keysForQuery ( subquery ) ) ;
371
+ } , [ ] ) ;
372
+
373
+ return new Set ( answer ) ;
376
374
}
377
375
378
376
return new Set ( Object . keys ( query ) ) ;
@@ -400,6 +398,17 @@ DatabaseController.prototype.owningIds = function(className, key, relatedIds) {
400
398
DatabaseController . prototype . reduceInRelation = function ( className , query , schema ) {
401
399
// Search for an in-relation or equal-to-relation
402
400
// Make it sequential for now, not sure of paralleization side effects
401
+ if ( query [ '$or' ] ) {
402
+ let ors = query [ '$or' ] ;
403
+ return Promise . all ( ors . map ( ( aQuery , index ) => {
404
+ return this . reduceInRelation ( className , aQuery , schema ) . then ( ( aQuery ) => {
405
+ if ( aQuery ) {
406
+ query [ '$or' ] [ index ] = aQuery ;
407
+ }
408
+ } )
409
+ } ) ) ;
410
+ }
411
+
403
412
return Object . keys ( query ) . reduce ( ( promise , key ) => {
404
413
return promise . then ( ( ) => {
405
414
if ( query [ key ] &&
@@ -420,15 +429,25 @@ DatabaseController.prototype.reduceInRelation = function(className, query, schem
420
429
delete query [ key ] ;
421
430
query . objectId = Object . assign ( { '$in' : [ ] } , query . objectId ) ;
422
431
query . objectId [ '$in' ] = query . objectId [ '$in' ] . concat ( ids ) ;
432
+ return Promise . resolve ( query ) ;
423
433
} ) ;
424
434
}
425
435
} ) ;
426
- } , Promise . resolve ( ) ) ;
436
+ } , Promise . resolve ( ) ) . then ( ( ) => {
437
+ return Promise . resolve ( query ) ;
438
+ } )
427
439
} ;
428
440
429
441
// Modifies query so that it no longer has $relatedTo
430
442
// Returns a promise that resolves when query is mutated
431
443
DatabaseController . prototype . reduceRelationKeys = function ( className , query ) {
444
+
445
+ if ( query [ '$or' ] ) {
446
+ return Promise . all ( query [ '$or' ] . map ( ( aQuery ) => {
447
+ return this . reduceRelationKeys ( className , aQuery ) ;
448
+ } ) ) ;
449
+ }
450
+
432
451
var relatedTo = query [ '$relatedTo' ] ;
433
452
if ( relatedTo ) {
434
453
return this . relatedIds (
0 commit comments