diff --git a/zcash_client_sqlite/src/wallet/init.rs b/zcash_client_sqlite/src/wallet/init.rs index f6cfa91a4..855d08233 100644 --- a/zcash_client_sqlite/src/wallet/init.rs +++ b/zcash_client_sqlite/src/wallet/init.rs @@ -114,13 +114,13 @@ pub fn init_wallet_db( wdb: &mut WalletDb

, seed: Option>, ) -> Result<(), MigratorError> { - init_wallet_db_internal(wdb, seed, None) + init_wallet_db_internal(wdb, seed, &[]) } fn init_wallet_db_internal( wdb: &mut WalletDb

, seed: Option>, - target_migration: Option, + target_migrations: &[Uuid], ) -> Result<(), MigratorError> { // Turn off foreign keys, and ensure that table replacement/modification // does not break views @@ -137,7 +137,13 @@ fn init_wallet_db_internal( migrator .register_multiple(migrations::all_migrations(&wdb.params, seed)) .expect("Wallet migration registration should have been successful."); - migrator.up(target_migration)?; + if target_migrations.is_empty() { + migrator.up(None)?; + } else { + for target_migration in target_migrations { + migrator.up(Some(*target_migration))?; + } + } wdb.conn .execute("PRAGMA foreign_keys = ON", []) .map_err(|e| MigratorError::Adapter(WalletMigrationError::from(e)))?; diff --git a/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs b/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs index 8fa1ab23a..ec2a0911a 100644 --- a/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs +++ b/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs @@ -34,9 +34,12 @@ impl

schemer::Migration for Migration

{ } fn dependencies(&self) -> HashSet { - [add_utxo_account::MIGRATION_ID, sent_notes_to_internal::MIGRATION_ID] - .into_iter() - .collect() + [ + add_utxo_account::MIGRATION_ID, + sent_notes_to_internal::MIGRATION_ID, + ] + .into_iter() + .collect() } fn description(&self) -> &'static str { @@ -292,7 +295,7 @@ mod tests { #[cfg(feature = "transparent-inputs")] use { - crate::wallet::init::migrations::ufvk_support, + crate::wallet::init::migrations::{ufvk_support, utxos_table}, zcash_client_backend::encoding::AddressCodec, zcash_primitives::{ consensus::{BlockHeight, BranchId}, @@ -311,7 +314,7 @@ mod tests { fn transaction_views() { let data_file = NamedTempFile::new().unwrap(); let mut db_data = WalletDb::for_path(data_file.path(), tests::network()).unwrap(); - init_wallet_db_internal(&mut db_data, None, Some(addresses_table::MIGRATION_ID)).unwrap(); + init_wallet_db_internal(&mut db_data, None, &[addresses_table::MIGRATION_ID]).unwrap(); let usk = UnifiedSpendingKey::from_seed(&tests::network(), &[0u8; 32][..], AccountId::from(0)) .unwrap(); @@ -403,7 +406,12 @@ mod tests { fn migrate_from_wm2() { let data_file = NamedTempFile::new().unwrap(); let mut db_data = WalletDb::for_path(data_file.path(), tests::network()).unwrap(); - init_wallet_db_internal(&mut db_data, None, Some(ufvk_support::MIGRATION_ID)).unwrap(); + init_wallet_db_internal( + &mut db_data, + None, + &[utxos_table::MIGRATION_ID, ufvk_support::MIGRATION_ID], + ) + .unwrap(); // create a UTXO to spend let tx = TransactionData::from_parts( diff --git a/zcash_client_sqlite/src/wallet/init/migrations/sent_notes_to_internal.rs b/zcash_client_sqlite/src/wallet/init/migrations/sent_notes_to_internal.rs index 3030c4421..ee191b957 100644 --- a/zcash_client_sqlite/src/wallet/init/migrations/sent_notes_to_internal.rs +++ b/zcash_client_sqlite/src/wallet/init/migrations/sent_notes_to_internal.rs @@ -7,7 +7,7 @@ use schemer; use schemer_rusqlite::RusqliteMigration; use uuid::Uuid; -use super::{ufvk_support}; +use super::ufvk_support; use crate::wallet::init::WalletMigrationError; /// This migration adds the `to_account` field to the `sent_notes` table. @@ -28,9 +28,7 @@ impl schemer::Migration for Migration { } fn dependencies(&self) -> HashSet { - [ufvk_support::MIGRATION_ID] - .into_iter() - .collect() + [ufvk_support::MIGRATION_ID].into_iter().collect() } fn description(&self) -> &'static str {