diff options
Diffstat (limited to 'src/exchangedb/0002-recoup.sql')
-rw-r--r-- | src/exchangedb/0002-recoup.sql | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/src/exchangedb/0002-recoup.sql b/src/exchangedb/0002-recoup.sql index 36e36d9d9..4b3452498 100644 --- a/src/exchangedb/0002-recoup.sql +++ b/src/exchangedb/0002-recoup.sql @@ -1,6 +1,6 @@ -- -- This file is part of TALER --- Copyright (C) 2014--2022 Taler Systems SA +-- Copyright (C) 2014--2023 Taler Systems SA -- -- TALER is free software; you can redistribute it and/or modify it under the -- terms of the GNU General Public License as published by the Free Software @@ -15,13 +15,13 @@ -- CREATE FUNCTION create_table_recoup( - IN partition_suffix VARCHAR DEFAULT NULL + IN partition_suffix TEXT DEFAULT NULL ) RETURNS VOID LANGUAGE plpgsql AS $$ DECLARE - table_name VARCHAR DEFAULT 'recoup'; + table_name TEXT DEFAULT 'recoup'; BEGIN PERFORM create_partitioned_table( 'CREATE TABLE %I' @@ -29,8 +29,7 @@ BEGIN ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' ',coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)' ',coin_blind BYTEA NOT NULL CHECK(LENGTH(coin_blind)=32)' - ',amount_val INT8 NOT NULL' - ',amount_frac INT4 NOT NULL' + ',amount taler_amount NOT NULL' ',recoup_timestamp INT8 NOT NULL' ',reserve_out_serial_id INT8 NOT NULL' ') %s ;' @@ -72,13 +71,13 @@ $$; CREATE FUNCTION constrain_table_recoup( - IN partition_suffix VARCHAR + IN partition_suffix TEXT ) RETURNS VOID LANGUAGE plpgsql AS $$ DECLARE - table_name VARCHAR DEFAULT 'recoup'; + table_name TEXT DEFAULT 'recoup'; BEGIN table_name = concat_ws('_', table_name, partition_suffix); EXECUTE FORMAT ( @@ -100,7 +99,7 @@ RETURNS VOID LANGUAGE plpgsql AS $$ DECLARE - table_name VARCHAR DEFAULT 'recoup'; + table_name TEXT DEFAULT 'recoup'; BEGIN EXECUTE FORMAT ( 'ALTER TABLE ' || table_name || @@ -116,13 +115,13 @@ $$; CREATE FUNCTION create_table_recoup_by_reserve( - IN partition_suffix VARCHAR DEFAULT NULL + IN partition_suffix TEXT DEFAULT NULL ) RETURNS VOID LANGUAGE plpgsql AS $$ DECLARE - table_name VARCHAR DEFAULT 'recoup_by_reserve'; + table_name TEXT DEFAULT 'recoup_by_reserve'; BEGIN PERFORM create_partitioned_table( 'CREATE TABLE %I' @@ -143,13 +142,13 @@ $$; CREATE FUNCTION constrain_table_recoup_by_reserve( - IN partition_suffix VARCHAR DEFAULT NULL + IN partition_suffix TEXT DEFAULT NULL ) RETURNS VOID LANGUAGE plpgsql AS $$ DECLARE - table_name VARCHAR DEFAULT 'recoup_by_reserve'; + table_name TEXT DEFAULT 'recoup_by_reserve'; BEGIN table_name = concat_ws('_', table_name, partition_suffix); EXECUTE FORMAT ( @@ -166,16 +165,36 @@ CREATE FUNCTION recoup_insert_trigger() LANGUAGE plpgsql AS $$ BEGIN - INSERT INTO exchange.recoup_by_reserve + INSERT INTO recoup_by_reserve (reserve_out_serial_id ,coin_pub) VALUES (NEW.reserve_out_serial_id ,NEW.coin_pub); + INSERT INTO coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.coin_pub + ,'recoup' + ,NEW.recoup_uuid); + INSERT INTO reserve_history + (reserve_pub + ,table_name + ,serial_id) + SELECT + res.reserve_pub + ,'recoup' + ,NEW.recoup_uuid + FROM reserves_out rout + JOIN reserves res + USING (reserve_uuid) + WHERE rout.reserve_out_serial_id = NEW.reserve_out_serial_id; RETURN NEW; END $$; COMMENT ON FUNCTION recoup_insert_trigger() - IS 'Replicate recoup inserts into recoup_by_reserve table.'; + IS 'Replicates recoup inserts into recoup_by_reserve table and updates the coin_history table.'; CREATE FUNCTION recoup_delete_trigger() @@ -183,7 +202,7 @@ CREATE FUNCTION recoup_delete_trigger() LANGUAGE plpgsql AS $$ BEGIN - DELETE FROM exchange.recoup_by_reserve + DELETE FROM recoup_by_reserve WHERE reserve_out_serial_id = OLD.reserve_out_serial_id AND coin_pub = OLD.coin_pub; RETURN OLD; |