diff --git a/Scripts/sds_codegen/sds_generate.py b/Scripts/sds_codegen/sds_generate.py index 82d8cfb98a..72fc633b26 100755 --- a/Scripts/sds_codegen/sds_generate.py +++ b/Scripts/sds_codegen/sds_generate.py @@ -2153,54 +2153,26 @@ public extension %(class_name)s { // Records are not visited in any particular order. class func anyEnumerate( transaction: DBReadTransaction, - block: (%s, UnsafeMutablePointer) -> Void - ) { - anyEnumerate(transaction: transaction, batched: false, block: block) - } - - // Traverses all records. - // Records are not visited in any particular order. - class func anyEnumerate( - transaction: DBReadTransaction, - batched: Bool = false, - block: (%s, UnsafeMutablePointer) -> Void - ) { - let batchSize = batched ? Batching.kDefaultBatchSize : 0 - anyEnumerate(transaction: transaction, batchSize: batchSize, block: block) - } - - // Traverses all records. - // Records are not visited in any particular order. - // - // If batchSize > 0, the enumeration is performed in autoreleased batches. - class func anyEnumerate( - transaction: DBReadTransaction, - batchSize: UInt, - block: (%s, UnsafeMutablePointer) -> Void + block: (%s) -> Void, ) { let cursor = %s.grdbFetchCursor(transaction: transaction) - Batching.loop(batchSize: batchSize, - loopBlock: { stop in - do { - guard let value = try cursor.next() else { - stop.pointee = true - return - } - block(value, stop) - } catch let error { - owsFailDebug("Couldn't fetch model: \\(error)") - } - }) + do { + while let value = try cursor.next() { + block(value) + } + } catch let error { + owsFailDebug("Couldn't fetch model: \\(error)") + } } """ % ( - (str(clazz.name),) * 4 + (str(clazz.name),) * 2 ) swift_body += """ // Does not order the results. class func anyFetchAll(transaction: DBReadTransaction) -> [%s] { var result = [%s]() - anyEnumerate(transaction: transaction) { (model, _) in + anyEnumerate(transaction: transaction) { model in result.append(model) } return result diff --git a/Signal/OrphanData/OWSOrphanDataCleaner.swift b/Signal/OrphanData/OWSOrphanDataCleaner.swift index 9b34c56aba..39b29add25 100644 --- a/Signal/OrphanData/OWSOrphanDataCleaner.swift +++ b/Signal/OrphanData/OWSOrphanDataCleaner.swift @@ -145,7 +145,7 @@ enum OWSOrphanDataCleaner { OWSReaction.anyEnumerate(transaction: transaction, batchingPreference: .batched()) { reaction, stop in if Task.isCancelled { - stop.pointee = true + stop = true return } if !allInteractionIds.contains(reaction.uniqueMessageId) { @@ -156,7 +156,7 @@ enum OWSOrphanDataCleaner { TSMention.anyEnumerate(transaction: transaction, batchingPreference: .batched()) { mention, stop in if Task.isCancelled { - stop.pointee = true + stop = true return } if !allInteractionIds.contains(mention.uniqueMessageId) { diff --git a/SignalServiceKit/Groups/GroupV2UpdatesImpl.swift b/SignalServiceKit/Groups/GroupV2UpdatesImpl.swift index a675d15351..f2dde6f957 100644 --- a/SignalServiceKit/Groups/GroupV2UpdatesImpl.swift +++ b/SignalServiceKit/Groups/GroupV2UpdatesImpl.swift @@ -92,7 +92,7 @@ public class GroupV2UpdatesImpl: GroupV2Updates { groupSecretParams: groupSecretParams, lastRefreshDate: nil, ) - stop.pointee = true + stop = true return } diff --git a/SignalServiceKit/Messages/Interactions/TSInteraction+SDS.swift b/SignalServiceKit/Messages/Interactions/TSInteraction+SDS.swift index bd65e9d231..2894f0f657 100644 --- a/SignalServiceKit/Messages/Interactions/TSInteraction+SDS.swift +++ b/SignalServiceKit/Messages/Interactions/TSInteraction+SDS.swift @@ -4993,50 +4993,22 @@ public extension TSInteraction { // Records are not visited in any particular order. class func anyEnumerate( transaction: DBReadTransaction, - block: (TSInteraction, UnsafeMutablePointer) -> Void - ) { - anyEnumerate(transaction: transaction, batched: false, block: block) - } - - // Traverses all records. - // Records are not visited in any particular order. - class func anyEnumerate( - transaction: DBReadTransaction, - batched: Bool = false, - block: (TSInteraction, UnsafeMutablePointer) -> Void - ) { - let batchSize = batched ? Batching.kDefaultBatchSize : 0 - anyEnumerate(transaction: transaction, batchSize: batchSize, block: block) - } - - // Traverses all records. - // Records are not visited in any particular order. - // - // If batchSize > 0, the enumeration is performed in autoreleased batches. - class func anyEnumerate( - transaction: DBReadTransaction, - batchSize: UInt, - block: (TSInteraction, UnsafeMutablePointer) -> Void + block: (TSInteraction) -> Void, ) { let cursor = TSInteraction.grdbFetchCursor(transaction: transaction) - Batching.loop(batchSize: batchSize, - loopBlock: { stop in - do { - guard let value = try cursor.next() else { - stop.pointee = true - return - } - block(value, stop) - } catch let error { - owsFailDebug("Couldn't fetch model: \(error)") - } - }) + do { + while let value = try cursor.next() { + block(value) + } + } catch let error { + owsFailDebug("Couldn't fetch model: \(error)") + } } // Does not order the results. class func anyFetchAll(transaction: DBReadTransaction) -> [TSInteraction] { var result = [TSInteraction]() - anyEnumerate(transaction: transaction) { (model, _) in + anyEnumerate(transaction: transaction) { model in result.append(model) } return result diff --git a/SignalServiceKit/Storage/Database/DatabaseRecovery.swift b/SignalServiceKit/Storage/Database/DatabaseRecovery.swift index 544656d7cf..42e08cf38b 100644 --- a/SignalServiceKit/Storage/Database/DatabaseRecovery.swift +++ b/SignalServiceKit/Storage/Database/DatabaseRecovery.swift @@ -711,7 +711,7 @@ public enum DatabaseRecovery { } databaseStorage.write { tx in - TSInteraction.anyEnumerate(transaction: tx) { interaction, _ in + TSInteraction.anyEnumerate(transaction: tx) { interaction in guard let message = interaction as? TSMessage else { return } diff --git a/SignalServiceKit/Storage/Database/GRDBSchemaMigrator.swift b/SignalServiceKit/Storage/Database/GRDBSchemaMigrator.swift index f07cfa548b..f48ceb1b75 100644 --- a/SignalServiceKit/Storage/Database/GRDBSchemaMigrator.swift +++ b/SignalServiceKit/Storage/Database/GRDBSchemaMigrator.swift @@ -5081,7 +5081,7 @@ public class GRDBSchemaMigrator { } migrator.registerMigration(.dataMigration_groupIdMapping) { transaction in - TSThread.anyEnumerate(transaction: transaction) { (thread: TSThread, _: UnsafeMutablePointer) in + TSThread.anyEnumerate(transaction: transaction) { thread, _ in guard let groupThread = thread as? TSGroupThread else { return } @@ -5118,7 +5118,7 @@ public class GRDBSchemaMigrator { groupThread.update(with: newGroupModel, transaction: transaction) } catch { thrownError = error - stop.pointee = true + stop = true } } return thrownError.map { .failure($0) } ?? .success(()) @@ -5211,7 +5211,7 @@ public class GRDBSchemaMigrator { migrator.registerMigration(.dataMigration_moveToThreadAssociatedData) { transaction in var thrownError: Error? - TSThread.anyEnumerate(transaction: transaction) { (thread, stop: UnsafeMutablePointer) in + TSThread.anyEnumerate(transaction: transaction) { thread, stop in do { try ThreadAssociatedData( threadUniqueId: thread.uniqueId, @@ -5223,7 +5223,7 @@ public class GRDBSchemaMigrator { ).insert(transaction.database) } catch { thrownError = error - stop.pointee = true + stop = true } } return thrownError.map { .failure($0) } ?? .success(()) diff --git a/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModel.swift b/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModel.swift index 27a7739f45..cf7172070f 100644 --- a/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModel.swift +++ b/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModel.swift @@ -216,7 +216,7 @@ public extension SDSCodableModel { static func anyEnumerate( transaction: DBReadTransaction, batchingPreference: BatchingPreference = .unbatched, - block: (Self, UnsafeMutablePointer) -> Void, + block: (Self, inout Bool) -> Void, ) { SDSCodableModelDatabaseInterfaceImpl().enumerateModels( modelType: Self.self, @@ -232,7 +232,7 @@ public extension SDSCodableModel { transaction: DBReadTransaction, sql: String, arguments: StatementArguments, - block: (Self, UnsafeMutablePointer) -> Void, + block: (Self, inout Bool) -> Void, ) { SDSCodableModelDatabaseInterfaceImpl().enumerateModels( modelType: Self.self, diff --git a/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface+Enumerate.swift b/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface+Enumerate.swift index 2fb6ad8384..0fff5dcacf 100644 --- a/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface+Enumerate.swift +++ b/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface+Enumerate.swift @@ -16,7 +16,7 @@ extension SDSCodableModelDatabaseInterfaceImpl { modelType: Model.Type, transaction: DBReadTransaction, batchingPreference: BatchingPreference, - block: (Model, UnsafeMutablePointer) -> Void, + block: (Model, inout Bool) -> Void, ) { let batchSize = batchSize(batchingPreference: batchingPreference) enumerateModels( @@ -36,7 +36,7 @@ extension SDSCodableModelDatabaseInterfaceImpl { sql: String, arguments: StatementArguments, batchingPreference: BatchingPreference, - block: (Model, UnsafeMutablePointer) -> Void, + block: (Model, inout Bool) -> Void, ) { let batchSize = batchSize(batchingPreference: batchingPreference) enumerateModels( @@ -68,7 +68,7 @@ extension SDSCodableModelDatabaseInterfaceImpl { sql: String? = nil, arguments: StatementArguments? = nil, batchSize: UInt, - block: (Model, UnsafeMutablePointer) -> Void, + block: (Model, inout Bool) -> Void, ) { failIfThrows { var recordCursor: RecordCursor @@ -84,11 +84,11 @@ extension SDSCodableModelDatabaseInterfaceImpl { try Batching.loop(batchSize: batchSize) { stop in guard let value = try recordCursor.next() else { - stop.pointee = true + stop = true return } value.anyDidEnumerateOne(transaction: transaction) - block(value, stop) + block(value, &stop) } } } diff --git a/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface.swift b/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface.swift index 9b3501477a..e4e568ed74 100644 --- a/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface.swift +++ b/SignalServiceKit/Storage/Database/SDSCodableModel/SDSCodableModelDatabaseInterface.swift @@ -74,7 +74,7 @@ protocol SDSCodableModelDatabaseInterface { modelType: Model.Type, transaction: DBReadTransaction, batchingPreference: BatchingPreference, - block: @escaping (Model, UnsafeMutablePointer) -> Void, + block: @escaping (Model, inout Bool) -> Void, ) /// Traverse all records, in no particular order. @@ -84,7 +84,7 @@ protocol SDSCodableModelDatabaseInterface { sql: String, arguments: StatementArguments, batchingPreference: BatchingPreference, - block: @escaping (Model, UnsafeMutablePointer) -> Void, + block: @escaping (Model, inout Bool) -> Void, ) } diff --git a/SignalServiceKit/Util/Batching.swift b/SignalServiceKit/Util/Batching.swift index 2938ae019a..1fe0897ad6 100644 --- a/SignalServiceKit/Util/Batching.swift +++ b/SignalServiceKit/Util/Batching.swift @@ -15,22 +15,22 @@ public enum Batching { // autoreleasepool is used. public static func loop( batchSize: UInt, - loopBlock: (UnsafeMutablePointer) throws -> Void, + loopBlock: (_ stop: inout Bool) throws -> Void, ) rethrows { - var stop: ObjCBool = false + var stop = false guard batchSize > 0 else { // No batching. - while !stop.boolValue { + while !stop { try loopBlock(&stop) } return } // With batching. - while !stop.boolValue { + while !stop { try autoreleasepool { for _ in 0..