Skip to content

Commit 57de231

Browse files
authored
fix: query findAll() throwing hang risk warning (#14)
1 parent 4a52629 commit 57de231

3 files changed

Lines changed: 51 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
# Parse-Swift Changelog
22

33
### main
4-
[Full Changelog](https://github.com/netreconlab/Parse-Swift/compare/4.16.0...main), [Documentation](https://swiftpackageindex.com/netreconlab/Parse-Swift/main/documentation/parseswift)
4+
[Full Changelog](https://github.com/netreconlab/Parse-Swift/compare/4.16.1...main), [Documentation](https://swiftpackageindex.com/netreconlab/Parse-Swift/main/documentation/parseswift)
55
* _Contributing to this repo? Add info about your change here to be included in the next release_
66

7+
### 4.16.0
8+
[Full Changelog](https://github.com/netreconlab/Parse-Swift/compare/4.16.0...4.16.1), [Documentation](https://swiftpackageindex.com/netreconlab/Parse-Swift/4.16.1/documentation/parseswift)
9+
10+
__Fixes__
11+
- Querying using findAll throws a hang risk warning in Xcode 14 ([#14](https://github.com/netreconlab/Parse-Swift/pull/10)), thanks to [Corey Baker](https://github.com/cbaker6).
12+
713
### 4.16.0
814
[Full Changelog](https://github.com/netreconlab/Parse-Swift/compare/4.15.2...4.16.0), [Documentation](https://swiftpackageindex.com/netreconlab/Parse-Swift/4.16.0/documentation/parseswift)
915

Sources/ParseSwift/ParseConstants.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Foundation
1010

1111
enum ParseConstants {
1212
static let sdk = "swift"
13-
static let version = "4.16.0"
13+
static let version = "4.16.1"
1414
static let fileManagementDirectory = "parse/"
1515
static let fileManagementPrivateDocumentsDirectory = "Private Documents/"
1616
static let fileManagementLibraryDirectory = "Library/"

Sources/ParseSwift/Types/Query.swift

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -642,20 +642,55 @@ extension Query: Queryable {
642642
completion(.failure(error))
643643
return
644644
}
645+
646+
#if compiler(>=5.5.2) && canImport(_Concurrency)
647+
Task {
648+
var query = self
649+
.order([.ascending("objectId")])
650+
query.limit = limit ?? ParseConstants.batchLimit
651+
var results = [ResultType]()
652+
var finished = false
653+
while !finished {
654+
do {
655+
let currentResults = try await query.findCommand().executeAsync(options: options,
656+
callbackQueue: callbackQueue)
657+
results.append(contentsOf: currentResults)
658+
if currentResults.count >= query.limit {
659+
guard let lastObjectId = results[results.count - 1].objectId else {
660+
throw ParseError(code: .unknownError, message: "Last object should have an id.")
661+
}
662+
query.where.add("objectId" > lastObjectId)
663+
} else {
664+
finished = true
665+
}
666+
} catch {
667+
let defaultError = ParseError(code: .unknownError,
668+
message: error.localizedDescription)
669+
let parseError = error as? ParseError ?? defaultError
670+
callbackQueue.async {
671+
completion(.failure(parseError))
672+
}
673+
return
674+
}
675+
}
676+
let finalResults = results
677+
callbackQueue.async {
678+
completion(.success(finalResults))
679+
}
680+
}
681+
#else
682+
var query = self
683+
.order([.ascending("objectId")])
684+
query.limit = limit ?? ParseConstants.batchLimit
685+
var results = [ResultType]()
686+
var finished = false
645687
let uuid = UUID()
646688
let queue = DispatchQueue(label: "com.parse.findAll.\(uuid)",
647689
qos: .default,
648690
attributes: .concurrent,
649691
autoreleaseFrequency: .inherit,
650692
target: nil)
651693
queue.sync {
652-
653-
var query = self
654-
.order([.ascending("objectId")])
655-
query.limit = limit ?? ParseConstants.batchLimit
656-
var results = [ResultType]()
657-
var finished = false
658-
659694
while !finished {
660695
do {
661696
let currentResults = try query.findCommand().execute(options: options)
@@ -683,6 +718,7 @@ extension Query: Queryable {
683718
completion(.success(results))
684719
}
685720
}
721+
#endif
686722
}
687723

688724
/**

0 commit comments

Comments
 (0)