1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
use crate::models::budgeting_app::{
account::Account, budget_update::BudgetUpdate, category::Category,
category_transfer::CategoryTransfer, transaction::Transaction,
transaction_categorisation::TransactionCategorisation,
};
use sqlite::Connection;
pub fn insert_accounts(connection: &Connection, accounts: &[Account]) {
for account in accounts {
let str = format!(
"
insert into
accounts(id, name, opening_balance, opening_date)
values({0}, '{1}', {2}, '{3}');
",
account.id,
escape_str(&account.name),
account.opening_balance,
account.opening_date
);
connection.execute(str).unwrap();
}
}
pub fn insert_categories(connection: &Connection, categories: &[Category]) {
for category in categories {
let str = format!(
"
insert into
categories(id, name, initial_budget, initial_period)
values({0}, '{1}', {2}, {3});
",
category.id,
escape_str(&category.name),
category.initial_budget,
category.initial_period,
);
connection.execute(str).unwrap();
}
}
pub fn insert_budget_updates(connection: &Connection, budget_updates: &[BudgetUpdate]) {
for budget_update in budget_updates {
let str = format!(
"
insert into
budget_updates(id, category_id, date, new_budget, new_period)
values({0}, {1}, '{2}', {3}, {4});
",
budget_update.id,
budget_update.category_id,
budget_update.date,
budget_update.new_budget,
budget_update.new_period,
);
connection.execute(str).unwrap();
}
}
pub fn insert_transactions(connection: &Connection, transactions: &[Transaction]) {
for transaction in transactions {
let str = format!(
"
insert into
transactions(id, description, payee, quantity, account_id)
values({0}, '{1}', '{2}', {3}, {4});
",
transaction.id,
escape_str(&transaction.description),
escape_str(&transaction.payee),
transaction.quantity,
transaction.account_id,
);
connection
.execute(str.clone())
.unwrap_or_else(|_| panic!("{}", &str.clone()));
}
}
pub fn insert_transaction_categorisations(
connection: &Connection,
transaction_categorisations: &[TransactionCategorisation],
) {
for transaction_categorisation in transaction_categorisations {
let str = format!(
"
insert into
transaction_categorisations(id, description, quantity, transaction_id, category_id)
values({0}, '{1}', {2}, {3}, {4});
",
transaction_categorisation.id,
escape_str(&transaction_categorisation.description),
transaction_categorisation.quantity,
transaction_categorisation.transaction_id,
transaction_categorisation.category_id,
);
connection.execute(str).unwrap();
}
}
pub fn insert_category_transfers(connection: &Connection, category_transfers: &[CategoryTransfer]) {
for category_transfer in category_transfers {
let str = format!(
"
insert into
category_transfers(id, description, quantity, from_category_id, to_category_id)
values({0}, '{1}', {2}, {3}, {4});
",
category_transfer.id,
escape_str(&category_transfer.description),
category_transfer.quantity,
category_transfer.from_category_id,
category_transfer.to_category_id,
);
connection.execute(str).unwrap();
}
}
fn escape_str(str: &str) -> String {
str.replace("'", "''")
}
|