From d9b9b3dc464d6a9cd4157cc4135a2e7b88ce4ab3 Mon Sep 17 00:00:00 2001 From: Philipp Hoenisch Date: Fri, 3 Jun 2022 15:28:43 +1000 Subject: [PATCH] Fix InvalidColumnIndex error This query returns 7 columns, so last columns is index 6 --- src/database/mod.rs | 28 ++++++++++++++++++++++++++++ src/database/sqlite.rs | 7 ++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/database/mod.rs b/src/database/mod.rs index ac355d7c..80e5a2a5 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -376,6 +376,34 @@ pub mod test { ); } + pub fn test_list_transaction(mut tree: D) { + let hex_tx = Vec::::from_hex("0100000001a15d57094aa7a21a28cb20b59aab8fc7d1149a3bdbcddba9c622e4f5f6a99ece010000006c493046022100f93bb0e7d8db7bd46e40132d1f8242026e045f03a0efe71bbb8e3f475e970d790221009337cd7f1f929f00cc6ff01f03729b069a7c21b59b1736ddfee5db5946c5da8c0121033b9b137ee87d5a812d6f506efdd37f0affa7ffc310711c06c7f3e097c9447c52ffffffff0100e1f505000000001976a9140389035a9225b3839e2bbf32d826a1e222031fd888ac00000000").unwrap(); + let tx: Transaction = deserialize(&hex_tx).unwrap(); + let txid = tx.txid(); + let mut tx_details = TransactionDetails { + transaction: Some(tx), + txid, + received: 1337, + sent: 420420, + fee: Some(140), + confirmation_time: Some(BlockTime { + timestamp: 123456, + height: 1000, + }), + }; + + tree.set_tx(&tx_details).unwrap(); + + // get raw tx + assert_eq!(tree.iter_txs(true).unwrap(), vec![tx_details.clone()]); + + // now get without raw tx + tx_details.transaction = None; + + // get not raw tx + assert_eq!(tree.iter_txs(false).unwrap(), vec![tx_details.clone()]); + } + pub fn test_last_index(mut tree: D) { tree.set_last_index(KeychainKind::External, 1337).unwrap(); diff --git a/src/database/sqlite.rs b/src/database/sqlite.rs index 645cda09..fbdf1ad6 100644 --- a/src/database/sqlite.rs +++ b/src/database/sqlite.rs @@ -400,7 +400,7 @@ impl SqliteDatabase { let sent: u64 = row.get(3)?; let fee: Option = row.get(4)?; let height: Option = row.get(5)?; - let raw_tx: Option> = row.get(7)?; + let raw_tx: Option> = row.get(6)?; let tx: Option = match raw_tx { Some(raw_tx) => { let tx: Transaction = deserialize(&raw_tx)?; @@ -1030,4 +1030,9 @@ pub mod test { fn test_sync_time() { crate::database::test::test_sync_time(get_database()); } + + #[test] + fn test_txs() { + crate::database::test::test_list_transaction(get_database()); + } }