From ea627259fb674e4b9a962d7c8b2b283f5a0c57d1 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Tue, 21 Jun 2022 14:52:32 -0700 Subject: [PATCH] Run migrations with immediate foreign key checks This fixes an issue where unrelated foreign key violations may cause migrations to fail. --- .../src/Storage/Database/GRDBSchemaMigrator.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/SignalServiceKit/src/Storage/Database/GRDBSchemaMigrator.swift b/SignalServiceKit/src/Storage/Database/GRDBSchemaMigrator.swift index c2420ed325..63f1bc206d 100644 --- a/SignalServiceKit/src/Storage/Database/GRDBSchemaMigrator.swift +++ b/SignalServiceKit/src/Storage/Database/GRDBSchemaMigrator.swift @@ -241,7 +241,10 @@ public class GRDBSchemaMigrator: NSObject { var migrator = DatabaseMigrator() func registerMigration(_ identifier: MigrationId, migrate: @escaping (Database) -> Void) { - migrator.registerMigration(identifier.rawValue) { (database: Database) in + // Run with immediate foreign key checks so that pre-existing dangling rows + // don't cause unrelated migrations to fail. We also don't perform schema + // alterations that would necessitate disabling foreign key checks. + migrator.registerMigration(identifier.rawValue, foreignKeyChecks: .immediate) { (database: Database) in let startTime = CACurrentMediaTime() Logger.info("Running migration: \(identifier)") migrate(database)