Add memo counts to transaction views.

This commit is contained in:
Kris Nuttycombe 2022-09-01 08:09:46 -06:00
parent 81c948a37e
commit 66c9f31e14
1 changed files with 45 additions and 23 deletions

View File

@ -458,6 +458,7 @@ impl RusqliteMigration for WalletMigrationAddTxViews {
transactions.raw AS raw, transactions.raw AS raw,
SUM(sent_notes.value) AS sent_total, SUM(sent_notes.value) AS sent_total,
COUNT(sent_notes.id_note) AS sent_note_count, COUNT(sent_notes.id_note) AS sent_note_count,
SUM(CASE WHEN sent_notes.memo IS NULL OR sent_notes.memo = '' THEN 0 ELSE 1 END) AS memo_count,
blocks.time AS block_time blocks.time AS block_time
FROM transactions FROM transactions
JOIN sent_notes JOIN sent_notes
@ -472,6 +473,7 @@ impl RusqliteMigration for WalletMigrationAddTxViews {
transactions.txid AS txid, transactions.txid AS txid,
SUM(received_notes.value) AS received_total, SUM(received_notes.value) AS received_total,
COUNT(received_notes.id_note) AS received_note_count, COUNT(received_notes.id_note) AS received_note_count,
SUM(CASE WHEN received_notes.memo IS NULL OR received_notes.memo = '' THEN 0 ELSE 1 END) AS memo_count,
blocks.time AS block_time blocks.time AS block_time
FROM transactions FROM transactions
JOIN received_notes JOIN received_notes
@ -487,7 +489,8 @@ impl RusqliteMigration for WalletMigrationAddTxViews {
expiry_height, expiry_height,
raw, raw,
SUM(value) AS net_value, SUM(value) AS net_value,
SUM(is_change) > 0 AS has_change SUM(is_change) > 0 AS has_change,
SUM(memo_present) AS memo_count
FROM ( FROM (
SELECT transactions.id_tx AS id_tx, SELECT transactions.id_tx AS id_tx,
transactions.block AS mined_height, transactions.block AS mined_height,
@ -496,7 +499,8 @@ impl RusqliteMigration for WalletMigrationAddTxViews {
transactions.expiry_height AS expiry_height, transactions.expiry_height AS expiry_height,
transactions.raw AS raw, transactions.raw AS raw,
received_notes.value AS value, received_notes.value AS value,
received_notes.is_change AS is_change received_notes.is_change AS is_change,
CASE WHEN received_notes.memo IS NULL OR received_notes.memo = '' THEN 0 ELSE 1 END AS memo_present
FROM transactions FROM transactions
JOIN received_notes ON transactions.id_tx = received_notes.tx JOIN received_notes ON transactions.id_tx = received_notes.tx
UNION UNION
@ -507,7 +511,8 @@ impl RusqliteMigration for WalletMigrationAddTxViews {
transactions.expiry_height AS expiry_height, transactions.expiry_height AS expiry_height,
transactions.raw AS raw, transactions.raw AS raw,
-sent_notes.value AS value, -sent_notes.value AS value,
false AS is_change false AS is_change,
CASE WHEN sent_notes.memo IS NULL OR sent_notes.memo = '' THEN 0 ELSE 1 END AS memo_present
FROM transactions FROM transactions
JOIN sent_notes ON transactions.id_tx = sent_notes.tx JOIN sent_notes ON transactions.id_tx = sent_notes.tx
) )
@ -904,7 +909,8 @@ mod tests {
expiry_height, expiry_height,
raw, raw,
SUM(value) AS net_value, SUM(value) AS net_value,
SUM(is_change) > 0 AS has_change SUM(is_change) > 0 AS has_change,
SUM(memo_present) AS memo_count
FROM ( FROM (
SELECT transactions.id_tx AS id_tx, SELECT transactions.id_tx AS id_tx,
transactions.block AS mined_height, transactions.block AS mined_height,
@ -913,7 +919,8 @@ mod tests {
transactions.expiry_height AS expiry_height, transactions.expiry_height AS expiry_height,
transactions.raw AS raw, transactions.raw AS raw,
received_notes.value AS value, received_notes.value AS value,
received_notes.is_change AS is_change received_notes.is_change AS is_change,
CASE WHEN received_notes.memo IS NULL OR received_notes.memo = '' THEN 0 ELSE 1 END AS memo_present
FROM transactions FROM transactions
JOIN received_notes ON transactions.id_tx = received_notes.tx JOIN received_notes ON transactions.id_tx = received_notes.tx
UNION UNION
@ -924,7 +931,8 @@ mod tests {
transactions.expiry_height AS expiry_height, transactions.expiry_height AS expiry_height,
transactions.raw AS raw, transactions.raw AS raw,
-sent_notes.value AS value, -sent_notes.value AS value,
false AS is_change false AS is_change,
CASE WHEN sent_notes.memo IS NULL OR sent_notes.memo = '' THEN 0 ELSE 1 END AS memo_present
FROM transactions FROM transactions
JOIN sent_notes ON transactions.id_tx = sent_notes.tx JOIN sent_notes ON transactions.id_tx = sent_notes.tx
) )
@ -936,6 +944,7 @@ mod tests {
transactions.txid AS txid, transactions.txid AS txid,
SUM(received_notes.value) AS received_total, SUM(received_notes.value) AS received_total,
COUNT(received_notes.id_note) AS received_note_count, COUNT(received_notes.id_note) AS received_note_count,
SUM(CASE WHEN received_notes.memo IS NULL OR received_notes.memo = '' THEN 0 ELSE 1 END) AS memo_count,
blocks.time AS block_time blocks.time AS block_time
FROM transactions FROM transactions
JOIN received_notes JOIN received_notes
@ -952,6 +961,7 @@ mod tests {
transactions.raw AS raw, transactions.raw AS raw,
SUM(sent_notes.value) AS sent_total, SUM(sent_notes.value) AS sent_total,
COUNT(sent_notes.id_note) AS sent_note_count, COUNT(sent_notes.id_note) AS sent_note_count,
SUM(CASE WHEN sent_notes.memo IS NULL OR sent_notes.memo = '' THEN 0 ELSE 1 END) AS memo_count,
blocks.time AS block_time blocks.time AS block_time
FROM transactions FROM transactions
JOIN sent_notes JOIN sent_notes
@ -1394,15 +1404,21 @@ mod tests {
"INSERT INTO accounts (account, ufvk) VALUES (0, ''); "INSERT INTO accounts (account, ufvk) VALUES (0, '');
INSERT INTO blocks (height, hash, time, sapling_tree) VALUES (0, 0, 0, ''); INSERT INTO blocks (height, hash, time, sapling_tree) VALUES (0, 0, 0, '');
INSERT INTO transactions (block, id_tx, txid) VALUES (0, 0, ''); INSERT INTO transactions (block, id_tx, txid) VALUES (0, 0, '');
INSERT INTO sent_notes (tx, output_pool, output_index, from_account, address, value) VALUES (0, 2, 0, 0, '', 2);
INSERT INTO sent_notes (tx, output_pool, output_index, from_account, address, value) VALUES (0, 2, 1, 0, '', 3); INSERT INTO sent_notes (tx, output_pool, output_index, from_account, address, value)
INSERT INTO received_notes (tx, output_index, account, diversifier, value, rcm, nf, is_change) VALUES (0, 0, 0, '', 5, '', 'a', false); VALUES (0, 2, 0, 0, '', 2);
INSERT INTO received_notes (tx, output_index, account, diversifier, value, rcm, nf, is_change) VALUES (0, 1, 0, '', 7, '', 'b', true);", INSERT INTO sent_notes (tx, output_pool, output_index, from_account, address, value, memo)
VALUES (0, 2, 1, 0, '', 3, 'a');
INSERT INTO received_notes (tx, output_index, account, diversifier, value, rcm, nf, is_change, memo)
VALUES (0, 0, 0, '', 5, '', 'a', false, 'b');
INSERT INTO received_notes (tx, output_index, account, diversifier, value, rcm, nf, is_change, memo)
VALUES (0, 1, 0, '', 7, '', 'b', true, 'c');",
).unwrap(); ).unwrap();
let mut q = db_data let mut q = db_data
.conn .conn
.prepare("SELECT received_total, received_note_count FROM v_tx_received") .prepare("SELECT received_total, received_note_count, memo_count FROM v_tx_received")
.unwrap(); .unwrap();
let mut rows = q.query(NO_PARAMS).unwrap(); let mut rows = q.query(NO_PARAMS).unwrap();
let mut row_count = 0; let mut row_count = 0;
@ -1410,14 +1426,16 @@ mod tests {
row_count += 1; row_count += 1;
let total: i64 = row.get(0).unwrap(); let total: i64 = row.get(0).unwrap();
let count: i64 = row.get(1).unwrap(); let count: i64 = row.get(1).unwrap();
let memo_count: i64 = row.get(2).unwrap();
assert_eq!(total, 12); assert_eq!(total, 12);
assert_eq!(count, 2); assert_eq!(count, 2);
assert_eq!(memo_count, 2);
} }
assert_eq!(row_count, 1); assert_eq!(row_count, 1);
let mut q = db_data let mut q = db_data
.conn .conn
.prepare("SELECT sent_total, sent_note_count FROM v_tx_sent") .prepare("SELECT sent_total, sent_note_count, memo_count FROM v_tx_sent")
.unwrap(); .unwrap();
let mut rows = q.query(NO_PARAMS).unwrap(); let mut rows = q.query(NO_PARAMS).unwrap();
let mut row_count = 0; let mut row_count = 0;
@ -1425,14 +1443,16 @@ mod tests {
row_count += 1; row_count += 1;
let total: i64 = row.get(0).unwrap(); let total: i64 = row.get(0).unwrap();
let count: i64 = row.get(1).unwrap(); let count: i64 = row.get(1).unwrap();
let memo_count: i64 = row.get(2).unwrap();
assert_eq!(total, 5); assert_eq!(total, 5);
assert_eq!(count, 2); assert_eq!(count, 2);
assert_eq!(memo_count, 1);
} }
assert_eq!(row_count, 1); assert_eq!(row_count, 1);
let mut q = db_data let mut q = db_data
.conn .conn
.prepare("SELECT net_value, has_change FROM v_transactions") .prepare("SELECT net_value, has_change, memo_count FROM v_transactions")
.unwrap(); .unwrap();
let mut rows = q.query(NO_PARAMS).unwrap(); let mut rows = q.query(NO_PARAMS).unwrap();
let mut row_count = 0; let mut row_count = 0;
@ -1440,8 +1460,10 @@ mod tests {
row_count += 1; row_count += 1;
let net_value: i64 = row.get(0).unwrap(); let net_value: i64 = row.get(0).unwrap();
let has_change: bool = row.get(1).unwrap(); let has_change: bool = row.get(1).unwrap();
let memo_count: i64 = row.get(2).unwrap();
assert_eq!(net_value, 7); assert_eq!(net_value, 7);
assert!(has_change); assert!(has_change);
assert_eq!(memo_count, 3);
} }
assert_eq!(row_count, 1); assert_eq!(row_count, 1);
} }