diff --git a/src/blockchain/compact_filters/mod.rs b/src/blockchain/compact_filters/mod.rs index 7845d513d..354cdc828 100644 --- a/src/blockchain/compact_filters/mod.rs +++ b/src/blockchain/compact_filters/mod.rs @@ -151,7 +151,7 @@ impl CompactFiltersBlockchain { internal_max_deriv: &mut Option, external_max_deriv: &mut Option, ) -> Result<(), Error> { - let mut updates = database.begin_batch(); + let mut updates = database.begin_batch()?; let mut incoming: u64 = 0; let mut outgoing: u64 = 0; @@ -410,7 +410,7 @@ impl WalletSync for CompactFiltersBlockchain { "Dropping transactions newer than `last_synced_block` = {}", last_synced_block ); - let mut updates = database.begin_batch(); + let mut updates = database.begin_batch()?; for details in database.iter_txs(false)? { match details.confirmation_time { Some(c) if (c.height as usize) < last_synced_block => continue, diff --git a/src/blockchain/rpc.rs b/src/blockchain/rpc.rs index da19e20c6..a86687f73 100644 --- a/src/blockchain/rpc.rs +++ b/src/blockchain/rpc.rs @@ -621,7 +621,7 @@ impl<'a, D: BatchDatabase> DbState<'a, D> { /// Prepare db batch operations. fn as_db_batch(&self) -> Result { - let mut batch = self.db.begin_batch(); + let mut batch = self.db.begin_batch()?; let mut del_txs = 0_u32; // delete stale (not retained) txs from db diff --git a/src/blockchain/script_sync.rs b/src/blockchain/script_sync.rs index 2c4b26cef..be6ed26f2 100644 --- a/src/blockchain/script_sync.rs +++ b/src/blockchain/script_sync.rs @@ -364,7 +364,7 @@ impl<'a, D: BatchDatabase> State<'a, D> { }) .collect::, _>>()?; - let mut batch = self.db.begin_batch(); + let mut batch = self.db.begin_batch()?; // Delete old txs that no longer exist for txid in txids_to_delete { diff --git a/src/database/any.rs b/src/database/any.rs index bbd9d41a5..d3b9e6ec4 100644 --- a/src/database/any.rs +++ b/src/database/any.rs @@ -319,13 +319,13 @@ impl BatchOperations for AnyBatch { impl BatchDatabase for AnyDatabase { type Batch = AnyBatch; - fn begin_batch(&self) -> Self::Batch { + fn begin_batch(&self) -> Result { match self { - AnyDatabase::Memory(inner) => inner.begin_batch().into(), + AnyDatabase::Memory(inner) => inner.begin_batch().map(Into::into), #[cfg(feature = "key-value-db")] - AnyDatabase::Sled(inner) => inner.begin_batch().into(), + AnyDatabase::Sled(inner) => inner.begin_batch().map(Into::into), #[cfg(feature = "sqlite")] - AnyDatabase::Sqlite(inner) => inner.begin_batch().into(), + AnyDatabase::Sqlite(inner) => inner.begin_batch().map(Into::into), } } fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { diff --git a/src/database/keyvalue.rs b/src/database/keyvalue.rs index f586ebeba..ee3085669 100644 --- a/src/database/keyvalue.rs +++ b/src/database/keyvalue.rs @@ -393,8 +393,8 @@ fn ivec_to_u32(b: sled::IVec) -> Result { impl BatchDatabase for Tree { type Batch = sled::Batch; - fn begin_batch(&self) -> Self::Batch { - sled::Batch::default() + fn begin_batch(&self) -> Result { + Ok(sled::Batch::default()) } fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { diff --git a/src/database/memory.rs b/src/database/memory.rs index 6cfca6fc9..86831c824 100644 --- a/src/database/memory.rs +++ b/src/database/memory.rs @@ -454,8 +454,8 @@ impl Database for MemoryDatabase { impl BatchDatabase for MemoryDatabase { type Batch = Self; - fn begin_batch(&self) -> Self::Batch { - MemoryDatabase::new() + fn begin_batch(&self) -> Result { + Ok(MemoryDatabase::new()) } fn commit_batch(&mut self, mut batch: Self::Batch) -> Result<(), Error> { diff --git a/src/database/mod.rs b/src/database/mod.rs index 7f26a1320..39750e7ad 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -168,7 +168,7 @@ pub trait BatchDatabase: Database { type Batch: BatchOperations; /// Create a new batch container - fn begin_batch(&self) -> Self::Batch; + fn begin_batch(&self) -> Result; /// Consume and apply a batch of operations fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error>; } @@ -243,7 +243,7 @@ pub mod test { } pub fn test_batch_script_pubkey(mut db: D) { - let mut batch = db.begin_batch(); + let mut batch = db.begin_batch().unwrap(); let script = Script::from( Vec::::from_hex("76a91402306a7c23f3e8010de41e9e591348bb83f11daa88ac").unwrap(), diff --git a/src/database/sqlite.rs b/src/database/sqlite.rs index fc7150856..2f8f46c46 100644 --- a/src/database/sqlite.rs +++ b/src/database/sqlite.rs @@ -918,10 +918,10 @@ impl Database for SqliteDatabase { impl BatchDatabase for SqliteDatabase { type Batch = SqliteDatabase; - fn begin_batch(&self) -> Self::Batch { + fn begin_batch(&self) -> Result { let db = SqliteDatabase::new(self.path.clone()); - db.connection.execute("BEGIN TRANSACTION", []).unwrap(); - db + db.connection.execute("BEGIN TRANSACTION", [])?; + Ok(db) } fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> { diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index f6fd26b49..1db7ca532 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -1379,7 +1379,7 @@ where count = 1; } - let mut address_batch = self.database.borrow().begin_batch(); + let mut address_batch = self.database.borrow().begin_batch()?; let start_time = time::Instant::new(); for i in from..(from + count) {