diff options
Diffstat (limited to 'src/db.rs')
| -rw-r--r-- | src/db.rs | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -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