57 lines
1.5 KiB
MySQL
57 lines
1.5 KiB
MySQL
|
BEGIN TRANSACTION;
|
||
|
|
||
|
DROP VIEW IF EXISTS v_transactions_layer2;
|
||
|
CREATE VIEW v_transactions_layer2 AS
|
||
|
SELECT
|
||
|
t.id AS id,
|
||
|
t.isParent AS is_parent,
|
||
|
t.isChild AS is_child,
|
||
|
t.acct AS account,
|
||
|
CASE WHEN t.isChild = 0 THEN NULL ELSE t.parent_id END AS parent_id,
|
||
|
CASE WHEN t.isParent = 1 THEN NULL ELSE cm.transferId END AS category,
|
||
|
pm.targetId AS payee,
|
||
|
t.imported_description AS imported_payee,
|
||
|
IFNULL(t.amount, 0) AS amount,
|
||
|
t.notes AS notes,
|
||
|
t.date AS date,
|
||
|
t.financial_id AS imported_id,
|
||
|
t.error AS error,
|
||
|
t.starting_balance_flag AS starting_balance_flag,
|
||
|
t.transferred_id AS transfer_id,
|
||
|
t.sort_order AS sort_order,
|
||
|
t.cleared AS cleared,
|
||
|
t.tombstone AS tombstone
|
||
|
FROM transactions t
|
||
|
LEFT JOIN category_mapping cm ON cm.id = t.category
|
||
|
LEFT JOIN payee_mapping pm ON pm.id = t.description
|
||
|
WHERE
|
||
|
t.date IS NOT NULL AND
|
||
|
t.acct IS NOT NULL;
|
||
|
|
||
|
CREATE INDEX trans_sorted ON transactions(date desc, starting_balance_flag, sort_order desc, id);
|
||
|
|
||
|
DROP VIEW IF EXISTS v_transactions_layer1;
|
||
|
CREATE VIEW v_transactions_layer1 AS
|
||
|
SELECT t.* FROM v_transactions_layer2 t
|
||
|
LEFT JOIN transactions t2 ON (t.is_child = 1 AND t2.id = t.parent_id)
|
||
|
WHERE IFNULL(t.tombstone, 0) = 0 AND IFNULL(t2.tombstone, 0) = 0;
|
||
|
|
||
|
DROP VIEW IF EXISTS v_transactions;
|
||
|
CREATE VIEW v_transactions AS
|
||
|
SELECT t.* FROM v_transactions_layer1 t
|
||
|
ORDER BY t.date desc, t.starting_balance_flag, t.sort_order desc, t.id;
|
||
|
|
||
|
|
||
|
DROP VIEW IF EXISTS v_categories;
|
||
|
CREATE VIEW v_categories AS
|
||
|
SELECT
|
||
|
id,
|
||
|
name,
|
||
|
is_income,
|
||
|
cat_group AS "group",
|
||
|
sort_order,
|
||
|
tombstone
|
||
|
FROM categories;
|
||
|
|
||
|
COMMIT;
|