Skip to content

Commit f7054de

Browse files
committed
Batch pointer fetch on querying from LDS.
1 parent 63b1420 commit f7054de

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -520,30 +520,34 @@ - (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState
520520
@strongify(self);
521521
PFConstraintMatcherBlock matcherBlock = [self.offlineQueryLogic createMatcherForQueryState:queryState user:user];
522522

523-
BFTask *checkAllObjectsTask = [BFTask taskWithResult:nil];
524-
for (NSString *uuid in task.result) {
525-
__block PFObject *object = nil;
526-
527-
checkAllObjectsTask = [[[[checkAllObjectsTask continueWithSuccessBlock:^id(BFTask *task) {
528-
return [self _getPointerAsyncWithUUID:uuid database:database];
529-
}] continueWithSuccessBlock:^id(BFTask *task) {
530-
object = task.result;
531-
return [self fetchObjectLocallyAsync:object database:database];
532-
}] continueWithSuccessBlock:^id(BFTask *task) {
533-
if (!object.dataAvailable) {
534-
return @NO;
523+
BFTask *checkAllTask = [BFTask taskWithResult:nil];
524+
NSArray *uuidBatches = [PFInternalUtils arrayBySplittingArray:task.result withMaximumComponentsPerSegment:64];
525+
for (NSArray *uuids in uuidBatches) {
526+
checkAllTask = [[checkAllTask continueWithSuccessBlock:^id(BFTask *_) {
527+
return [self _getObjectPointersAsyncWithUUIDs:uuids fromDatabase:database];
528+
}] continueWithSuccessBlock:^id(BFTask PF_GENERIC(NSArray<PFObject *> *)*task) {
529+
BFTask *checkBatchTask = [BFTask taskWithResult:nil];
530+
for (PFObject *object in task.result) {
531+
checkBatchTask = [[[checkBatchTask continueWithSuccessBlock:^id(BFTask *_) {
532+
return [self fetchObjectLocallyAsync:object database:database];
533+
}] continueWithSuccessBlock:^id(BFTask *_) {
534+
if (!object.dataAvailable) {
535+
return nil;
536+
}
537+
return matcherBlock(object, database);
538+
}] continueWithSuccessBlock:^id(BFTask *task) {
539+
if ([task.result boolValue]) {
540+
[mutableResults addObject:object];
541+
}
542+
return nil;
543+
}];
535544
}
536-
return matcherBlock(object, database);
537-
}] continueWithSuccessBlock:^id(BFTask *task) {
538-
if ([task.result boolValue]) {
539-
[mutableResults addObject:object];
540-
}
541-
return nil;
545+
return checkBatchTask;
542546
}];
543547
}
544-
return checkAllObjectsTask;
548+
return checkAllTask;
545549
}];
546-
}] continueWithSuccessBlock:^id(BFTask *task) {
550+
}] continueWithSuccessBlock:^id(BFTask *_) {
547551
@strongify(self);
548552

549553
// Sort, Apply Skip and Limit
@@ -561,7 +565,7 @@ - (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState
561565
ofQueryState:queryState
562566
inDatabase:database];
563567

564-
return [fetchIncludesTask continueWithSuccessBlock:^id(BFTask *task) {
568+
return [fetchIncludesTask continueWithSuccessBlock:^id(BFTask *_) {
565569
return results;
566570
}];
567571
}];

0 commit comments

Comments
 (0)