aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasaya Tojo <masaya@tojo.tokyo>2023-03-12 16:23:41 +0900
committerMasaya Tojo <masaya@tojo.tokyo>2023-03-12 23:38:12 +0900
commit1a838c115140bdf0f35054351153fb21f2a228da (patch)
tree598cae31e6b2cbeab53a84dd46a1e62ca7f0b9df
parentcd23d52c0c5c3d3264c5a8706c2c6fe2b1649640 (diff)
Add function to create new transaction.
-rw-r--r--deploy/insert_transaction.sql24
-rw-r--r--revert/insert_transaction.sql7
-rw-r--r--sqitch.plan1
-rw-r--r--verify/insert_transaction.sql26
4 files changed, 58 insertions, 0 deletions
diff --git a/deploy/insert_transaction.sql b/deploy/insert_transaction.sql
new file mode 100644
index 0000000..eb5a38e
--- /dev/null
+++ b/deploy/insert_transaction.sql
@@ -0,0 +1,24 @@
+-- Deploy kakeibo:insert_transaction to pg
+-- requires: schema
+-- requires: transactions
+
+BEGIN;
+
+CREATE OR REPLACE FUNCTION kakeibo.insert_transaction(
+ p_type_code INTEGER,
+ p_date DATE,
+ p_note TEXT
+) RETURNS INTEGER AS $$
+ DECLARE
+ inserted_id INTEGER;
+ BEGIN
+ INSERT INTO kakeibo.transactions (
+ type_code, date, note
+ ) VALUES (
+ p_type_code, p_date, p_note
+ ) RETURNING id INTO inserted_id;
+ RETURN inserted_id;
+ END;
+$$ LANGUAGE plpgsql SECURITY DEFINER;
+
+COMMIT;
diff --git a/revert/insert_transaction.sql b/revert/insert_transaction.sql
new file mode 100644
index 0000000..d579ca6
--- /dev/null
+++ b/revert/insert_transaction.sql
@@ -0,0 +1,7 @@
+-- Revert kakeibo:insert_transaction from pg
+
+BEGIN;
+
+DROP FUNCTION kakeibo.insert_transaction;
+
+COMMIT;
diff --git a/sqitch.plan b/sqitch.plan
index 5cf4710..6e2ba7b 100644
--- a/sqitch.plan
+++ b/sqitch.plan
@@ -5,3 +5,4 @@
schema 2023-03-11T15:56:41Z Masaya Tojo <masaya@tojo.tokyo> # Add schema for use in kakeibo.
transactions [schema] 2023-03-11T16:50:25Z Masaya Tojo <masaya@tojo.tokyo> # Add table for tracking transactions.
items [schema transactions] 2023-03-12T04:48:30Z Masaya Tojo <masaya@tojo.tokyo> # Add table for tracking items.
+insert_transaction [schema transactions] 2023-03-12T07:06:15Z Masaya Tojo <masaya@tojo.tokyo> # Add function to create new transaction.
diff --git a/verify/insert_transaction.sql b/verify/insert_transaction.sql
new file mode 100644
index 0000000..7f6893c
--- /dev/null
+++ b/verify/insert_transaction.sql
@@ -0,0 +1,26 @@
+-- Verify kakeibo:insert_transaction on pg
+
+BEGIN;
+
+SELECT has_function_privilege('kakeibo.insert_transaction(INTEGER, DATE, TEXT)', 'EXECUTE');
+
+SET search_path = kakeibo;
+
+DO $$
+ DECLARE
+ v_id INTEGER;
+ BEGIN
+ SELECT insert_transaction(0, '2023-03-15', 'テスト') INTO v_id;
+ PERFORM *
+ FROM transactions
+ WHERE id = v_id
+ AND type_code = 0
+ AND date = '2023-03-15'
+ AND note = 'テスト';
+ IF NOT FOUND THEN
+ RAISE EXCEPTION 'Inserted data is not found.';
+ END IF;
+ END
+$$;
+
+ROLLBACK;