diff --git a/schema/0000-init.sql b/schema/0000-init.sql index d658398..52afd7e 100644 --- a/schema/0000-init.sql +++ b/schema/0000-init.sql @@ -180,9 +180,9 @@ BEGIN -- -------------------------------- -- Transaction splits - CREATE SEQUENCE public.transaction_splits_id_seq + CREATE SEQUENCE IF NOT EXISTS public.transaction_splits_id_seq START WITH 1 INCREMENT BY 1; - CREATE TABLE public.transaction_splits ( + CREATE TABLE IF NOT EXISTS public.transaction_splits ( id INTEGER PRIMARY KEY NOT NULL DEFAULT NEXTVAL('public.transaction_splits_id_seq'::regclass), transaction INTEGER NOT NULL, @@ -268,8 +268,46 @@ BEGIN GROUP BY t.id, a.name ORDER BY t.id DESC; + -- -------------------------------- + -- Function to check schema version (used in migrations) + + CREATE OR REPLACE FUNCTION brmbar_privileged.has_exact_schema_version( + IN i_ver INTEGER + ) RETURNS INTEGER + VOLATILE NOT LEAKPROOF LANGUAGE plpgsql AS $x$ + DECLARE + v_ver INTEGER; + BEGIN + SELECT ver INTO v_ver FROM brmbar_privileged.brmbar_schema; + IF v_ver is NULL THEN + RETURN false; + ELSE + RETURN v_ver = i_ver; + END IF; + END; + $x$; + + -- -------------------------------- + -- + + CREATE OR REPLACE FUNCTION brmbar_privileged.upgrade_schema_version_to( + IN i_ver INTEGER + ) RETURNS INTEGER + VOLATILE NOT LEAKPROOF LANGUAGE plpgsql AS $x$ + DECLARE + v_ver INTEGER; + BEGIN + SELECT ver FROM brmbar_privileged.brmbar_schema INTO v_ver; + IF v_ver=(i_ver-1) THEN + UPDATE brmbar_privileged.brmbar_schema SET ver = i_ver; + ELSE + RAISE EXCEPTION 'Invalid brmbar schema version transition (% -> %)', v_ver, i_ver; + END IF; + END; + $x$; + -- Initialize version 1 - -- INSERT INTO brmbar_privileged.brmbar_schema(ver) VALUES(1); + INSERT INTO brmbar_privileged.brmbar_schema(ver) VALUES(1); END IF; END; $$;