diff --git a/Sources/ZcashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift b/Sources/ZcashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift index 199d5eb1..c26b67f7 100644 --- a/Sources/ZcashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift +++ b/Sources/ZcashLightClientKit/Block/DatabaseStorage/DatabaseMigrationManager.swift @@ -36,7 +36,7 @@ class MigrationManager { self.network = networkType } - func performMigration(ufvks: [UnifiedFullViewingKey]) throws { + func performMigration() throws { try migrateCacheDb() try migratePendingDb() } @@ -84,60 +84,62 @@ private extension MigrationManager { createdTable.column(PendingTransactionSQLDAO.TableColumns.memo) } - try pendingDb.connection().transaction { - try pendingDb.connection().run(statement); - try self.pendingDb.connection().setUserVersion(PendingDbMigration.v1.rawValue); + try pendingDb.connection().transaction(.immediate) { + try pendingDb.connection().execute(statement); + try pendingDb.connection().setUserVersion(PendingDbMigration.v1.rawValue); } } func migratePendingDbV2() throws { - let statement = - """ - ALTER TABLE pending_transactions RENAME TO pending_transactions_old; + try pendingDb.connection().transaction(.immediate) { + let statement = + """ + ALTER TABLE pending_transactions RENAME TO pending_transactions_old; - CREATE TABLE pending_transactions( - id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - to_address TEXT, - to_internal INTEGER, - account_index INTEGER NOT NULL, - mined_height INTEGER, - expiry_height INTEGER, - cancelled INTEGER, - encode_attempts INTEGER DEFAULT (0), - error_message TEXT, - error_code INTEGER, - submit_attempts INTEGER DEFAULT (0), - create_time REAL, - txid BLOB, - value INTEGER NOT NULL, - raw BLOB, - memo BLOB - ); + CREATE TABLE pending_transactions( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + to_address TEXT, + to_internal INTEGER, + account_index INTEGER NOT NULL, + mined_height INTEGER, + expiry_height INTEGER, + cancelled INTEGER, + encode_attempts INTEGER DEFAULT (0), + error_message TEXT, + error_code INTEGER, + submit_attempts INTEGER DEFAULT (0), + create_time REAL, + txid BLOB, + value INTEGER NOT NULL, + raw BLOB, + memo BLOB + ); - INSERT INTO pending_transactions - SELECT - id, - to_address, - NULL, - account_index, - mined_height, - expiry_height, - cancelled, - encode_attempts, - error_message, - error_code, - submit_attempts, - create_time, - txid, - value, - raw, - memo - FROM pending_transactions_old; - """ + INSERT INTO pending_transactions + SELECT + id, + to_address, + NULL, + account_index, + mined_height, + expiry_height, + cancelled, + encode_attempts, + error_message, + error_code, + submit_attempts, + create_time, + txid, + value, + raw, + memo + FROM pending_transactions_old; - try pendingDb.connection().transaction { - try pendingDb.connection().run(statement); - try self.pendingDb.connection().setUserVersion(PendingDbMigration.v2.rawValue); + DROP TABLE pending_transactions_old + """ + + try pendingDb.connection().execute(statement); + try pendingDb.connection().setUserVersion(PendingDbMigration.v2.rawValue); } } @@ -167,6 +169,6 @@ extension Connection { } func setUserVersion(_ version: Int32) throws { - try run("PRAGMA user_version = \(version)") + try execute("PRAGMA user_version = \(version)") } } diff --git a/Sources/ZcashLightClientKit/Initializer.swift b/Sources/ZcashLightClientKit/Initializer.swift index 43c935dd..2395cb3f 100644 --- a/Sources/ZcashLightClientKit/Initializer.swift +++ b/Sources/ZcashLightClientKit/Initializer.swift @@ -245,6 +245,14 @@ public class Initializer { throw rustBackend.lastError() ?? InitializerError.accountInitFailed } + let migrationManager = MigrationManager( + cacheDbConnection: SimpleConnectionProvider(path: cacheDbURL.path), + pendingDbConnection: SimpleConnectionProvider(path: pendingDbURL.path), + networkType: self.network.networkType + ) + + try migrationManager.performMigration() + return .success } diff --git a/Tests/OfflineTests/PendingTransactionRepositoryTests.swift b/Tests/OfflineTests/PendingTransactionRepositoryTests.swift index 6f937cbe..ec2da1b8 100644 --- a/Tests/OfflineTests/PendingTransactionRepositoryTests.swift +++ b/Tests/OfflineTests/PendingTransactionRepositoryTests.swift @@ -22,7 +22,7 @@ class PendingTransactionRepositoryTests: XCTestCase { let pendingDbProvider = SimpleConnectionProvider(path: try! TestDbBuilder.pendingTransactionsDbURL().absoluteString) let dao = PendingTransactionSQLDAO(dbProvider: pendingDbProvider) let migrations = try! MigrationManager(cacheDbConnection: InMemoryDbProvider(), pendingDbConnection: pendingDbProvider, networkType: .testnet) - try! migrations.performMigration(ufvks: []) + try! migrations.performMigration() pendingRepository = dao }