diff options
author | Masaya Tojo <masaya@tojo.tokyo> | 2023-03-12 18:24:31 +0900 |
---|---|---|
committer | Masaya Tojo <masaya@tojo.tokyo> | 2023-03-12 23:38:13 +0900 |
commit | d5ebc30b1092a89e364720b2d302b1978d62632c (patch) | |
tree | 18a3793dd83726beb14fb036928fceac93ad3be0 | |
parent | baaa9bb106af01c0d6d5fd9cde87a27852bb8622 (diff) |
Add function to delete transaction.
-rw-r--r-- | deploy/delete_transaction.sql | 15 | ||||
-rw-r--r-- | revert/delete_transaction.sql | 7 | ||||
-rw-r--r-- | sqitch.plan | 1 | ||||
-rw-r--r-- | verify/delete_transaction.sql | 43 |
4 files changed, 66 insertions, 0 deletions
diff --git a/deploy/delete_transaction.sql b/deploy/delete_transaction.sql new file mode 100644 index 0000000..d3c23de --- /dev/null +++ b/deploy/delete_transaction.sql @@ -0,0 +1,15 @@ +-- Deploy kakeibo:delete_transaction to pg +-- requires: schema +-- requires: transactions + +BEGIN; + +CREATE OR REPLACE FUNCTION kakeibo.delete_transaction( + p_transaction_id INTEGER +) RETURNS VOID AS $$ + BEGIN + DELETE FROM kakeibo.transactions WHERE id = p_transaction_id; + END; +$$ LANGUAGE plpgsql SECURITY DEFINER; + +COMMIT; diff --git a/revert/delete_transaction.sql b/revert/delete_transaction.sql new file mode 100644 index 0000000..573a0b2 --- /dev/null +++ b/revert/delete_transaction.sql @@ -0,0 +1,7 @@ +-- Revert kakeibo:delete_transaction from pg + +BEGIN; + +DROP FUNCTION kakeibo.delete_transaction; + +COMMIT; diff --git a/sqitch.plan b/sqitch.plan index 93b940a..cfe5bbe 100644 --- a/sqitch.plan +++ b/sqitch.plan @@ -8,3 +8,4 @@ items [schema transactions] 2023-03-12T04:48:30Z Masaya Tojo <masaya@tojo.tokyo> insert_transaction [schema transactions] 2023-03-12T07:06:15Z Masaya Tojo <masaya@tojo.tokyo> # Add function to create new transaction. insert_item [schema items] 2023-03-12T07:25:23Z Masaya Tojo <masaya@tojo.tokyo> # Add function to add new item. delete_item [schema items] 2023-03-12T08:14:34Z Masaya Tojo <masaya@tojo.tokyo> # Add function to delete item. +delete_transaction [schema transactions] 2023-03-12T08:40:47Z Masaya Tojo <masaya@tojo.tokyo> # Add function to delete transaction. diff --git a/verify/delete_transaction.sql b/verify/delete_transaction.sql new file mode 100644 index 0000000..9f4d1d8 --- /dev/null +++ b/verify/delete_transaction.sql @@ -0,0 +1,43 @@ +-- Verify kakeibo:delete_transaction on pg + +BEGIN; + +SELECT has_function_privilege('kakeibo.delete_transaction(INTEGER)', 'EXECUTE'); + +SET search_path = kakeibo; + +DO $$ + DECLARE + v_transaction_id INTEGER; + v_transaction_id_2 INTEGER; + v_item_id INTEGER; + BEGIN + SELECT insert_transaction(0, '2023-03-15', 'テスト') INTO v_transaction_id; + SELECT insert_transaction(1, '2023-03-15', 'テスト2') INTO v_transaction_id_2; + SELECT insert_item(v_transaction_id, 'カテ', 'サブカテ', 298, 'メモ') INTO v_item_id; + + BEGIN + PERFORM delete_transaction(v_transaction_id); + EXCEPTION + WHEN foreign_key_violation THEN + END; + PERFORM * FROM transactions WHERE id = v_transaction_id; + IF NOT FOUND THEN + RAISE EXCEPTION 'Unexpected delete data.'; + END IF; + + PERFORM delete_item(v_item_id); + PERFORM delete_transaction(v_transaction_id); + PERFORM * FROM transactions WHERE id = v_transaction_id; + IF FOUND THEN + RAISE EXCEPTION 'Deleted data still exists.'; + END IF; + + PERFORM * FROM transactions WHERE id = v_transaction_id_2; + IF NOT FOUND THEN + RAISE EXCEPTION 'Unexpected delete data.'; + END IF; + END +$$; + +ROLLBACK; |