summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/db.rs b/src/db.rs
index c781f71..a84534b 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -215,28 +215,41 @@ pub fn get_income_vs_expenses_filtered(
(Some(from), Some(to)) => {
let mut stmt = conn.prepare("SELECT SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) as income, SUM(CASE WHEN amount < 0 THEN -amount ELSE 0 END) as expenses FROM transactions WHERE date >= ? AND date <= ?")?;
let row = stmt.query_row(params![from, to], |row| {
- Ok((row.get::<_, f64>(0)?, row.get::<_, f64>(1)?))
+ Ok((
+ row.get::<_, Option<f64>>(0)?.unwrap_or(0.0),
+ row.get::<_, Option<f64>>(1)?.unwrap_or(0.0),
+ ))
})?;
Ok(row)
}
(Some(from), None) => {
let mut stmt = conn.prepare("SELECT SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) as income, SUM(CASE WHEN amount < 0 THEN -amount ELSE 0 END) as expenses FROM transactions WHERE date >= ?")?;
let row = stmt.query_row(params![from], |row| {
- Ok((row.get::<_, f64>(0)?, row.get::<_, f64>(1)?))
+ Ok((
+ row.get::<_, Option<f64>>(0)?.unwrap_or(0.0),
+ row.get::<_, Option<f64>>(1)?.unwrap_or(0.0),
+ ))
})?;
Ok(row)
}
(None, Some(to)) => {
let mut stmt = conn.prepare("SELECT SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) as income, SUM(CASE WHEN amount < 0 THEN -amount ELSE 0 END) as expenses FROM transactions WHERE date <= ?")?;
let row = stmt.query_row(params![to], |row| {
- Ok((row.get::<_, f64>(0)?, row.get::<_, f64>(1)?))
+ Ok((
+ row.get::<_, Option<f64>>(0)?.unwrap_or(0.0),
+ row.get::<_, Option<f64>>(1)?.unwrap_or(0.0),
+ ))
})?;
Ok(row)
}
(None, None) => {
let mut stmt = conn.prepare("SELECT SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) as income, SUM(CASE WHEN amount < 0 THEN -amount ELSE 0 END) as expenses FROM transactions")?;
- let row =
- stmt.query_row([], |row| Ok((row.get::<_, f64>(0)?, row.get::<_, f64>(1)?)))?;
+ let row = stmt.query_row([], |row| {
+ Ok((
+ row.get::<_, Option<f64>>(0)?.unwrap_or(0.0),
+ row.get::<_, Option<f64>>(1)?.unwrap_or(0.0),
+ ))
+ })?;
Ok(row)
}
}
@@ -676,6 +689,7 @@ mod tests {
fn create_test_transactions() -> Vec<Transaction> {
vec![
Transaction {
+ id: 0,
date: NaiveDate::from_ymd_opt(2024, 6, 15).unwrap(),
description: "WAL-MART #3011 CALGARY, AB".to_string(),
amount: -27.26,
@@ -683,6 +697,7 @@ mod tests {
category: Some("Groceries".to_string()),
},
Transaction {
+ id: 0,
date: NaiveDate::from_ymd_opt(2024, 6, 15).unwrap(),
description: "SQ *EARLS DALHOUSIE Calgary, AB".to_string(),
amount: -10.89,
@@ -690,6 +705,7 @@ mod tests {
category: Some("Dining".to_string()),
},
Transaction {
+ id: 0,
date: NaiveDate::from_ymd_opt(2024, 6, 14).unwrap(),
description: "PAYROLL DEPOSIT Gitlab Canada".to_string(),
amount: 5578.40,