Skip to content

Commit 27c6735

Browse files
Fix failing test: test_del_tx
Before this PR, the `test_del_tx` test was failing for sqlite. This was because `del_tx` pulls the TransactionDetails object using `select_transaction_details_by_txid` method which gets the transaction details' data with a non-None transaction field even if the `include_raw` argument is `false`. So the test was expecting a TransactionDetails object with a None transaction field but will get one with a non-None transaction field. Furthermore, it is not always necessary to get a transaction after getting the transaction details, but `select_transaction_details_by_txid` does it all the time, whether `include_raw` is false or true.
1 parent d8f5026 commit 27c6735

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

src/database/sqlite.rs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ impl SqliteDatabase {
467467
&self,
468468
txid: &[u8],
469469
) -> Result<Option<TransactionDetails>, Error> {
470-
let mut statement = self.connection.prepare_cached("SELECT transaction_details.timestamp, transaction_details.received, transaction_details.sent, transaction_details.fee, transaction_details.height, transactions.raw_tx FROM transaction_details, transactions WHERE transaction_details.txid=transactions.txid AND transaction_details.txid=:txid")?;
470+
let mut statement = self.connection.prepare_cached("SELECT timestamp, received, sent, fee, height FROM transaction_details WHERE txid=:txid")?;
471471
let mut rows = statement.query(named_params! { ":txid": txid })?;
472472

473473
match rows.next()? {
@@ -478,22 +478,13 @@ impl SqliteDatabase {
478478
let fee: Option<u64> = row.get(3)?;
479479
let height: Option<u32> = row.get(4)?;
480480

481-
let raw_tx: Option<Vec<u8>> = row.get(5)?;
482-
let tx: Option<Transaction> = match raw_tx {
483-
Some(raw_tx) => {
484-
let tx: Transaction = deserialize(&raw_tx)?;
485-
Some(tx)
486-
}
487-
None => None,
488-
};
489-
490481
let confirmation_time = match (height, timestamp) {
491482
(Some(height), Some(timestamp)) => Some(BlockTime { height, timestamp }),
492483
_ => None,
493484
};
494485

495486
Ok(Some(TransactionDetails {
496-
transaction: tx,
487+
transaction: None,
497488
txid: deserialize(txid)?,
498489
received,
499490
sent,
@@ -663,19 +654,24 @@ impl BatchOperations for SqliteDatabase {
663654
}
664655

665656
fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
657+
// insert the raw_tx if present
658+
if let Some(ref tx) = transaction.transaction {
659+
self.set_raw_tx(tx)?;
660+
}
661+
662+
// remove the raw tx from the serialized version
663+
let mut transaction = transaction.clone();
664+
transaction.transaction = None;
665+
666666
match self.select_transaction_details_by_txid(&transaction.txid)? {
667667
Some(_) => {
668-
self.update_transaction_details(transaction)?;
668+
self.update_transaction_details(&transaction)?;
669669
}
670670
None => {
671-
self.insert_transaction_details(transaction)?;
671+
self.insert_transaction_details(&transaction)?;
672672
}
673673
}
674674

675-
if let Some(tx) = &transaction.transaction {
676-
self.set_raw_tx(tx)?;
677-
}
678-
679675
Ok(())
680676
}
681677

@@ -744,12 +740,15 @@ impl BatchOperations for SqliteDatabase {
744740
include_raw: bool,
745741
) -> Result<Option<TransactionDetails>, Error> {
746742
match self.select_transaction_details_by_txid(txid)? {
747-
Some(transaction_details) => {
743+
Some(mut transaction_details) => {
748744
self.delete_transaction_details_by_txid(txid)?;
749745

750-
if include_raw {
751-
self.delete_transaction_by_txid(txid)?;
752-
}
746+
let raw_tx = if include_raw {
747+
self.del_raw_tx(txid)?
748+
} else {
749+
None
750+
};
751+
transaction_details.transaction = raw_tx;
753752
Ok(Some(transaction_details))
754753
}
755754
None => Ok(None),
@@ -864,8 +863,8 @@ impl Database for SqliteDatabase {
864863
fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
865864
match self.select_transaction_details_by_txid(txid)? {
866865
Some(mut transaction_details) => {
867-
if !include_raw {
868-
transaction_details.transaction = None;
866+
if include_raw {
867+
transaction_details.transaction = self.get_raw_tx(txid)?;
869868
}
870869
Ok(Some(transaction_details))
871870
}

0 commit comments

Comments
 (0)