diff options
Diffstat (limited to 'src/exchangedb')
-rw-r--r-- | src/exchangedb/0002-purse_decision.sql | 38 | ||||
-rw-r--r-- | src/exchangedb/0002-purse_deposits.sql | 38 | ||||
-rw-r--r-- | src/exchangedb/0002-recoup.sql | 14 | ||||
-rw-r--r-- | src/exchangedb/0002-recoup_refresh.sql | 51 | ||||
-rw-r--r-- | src/exchangedb/0002-refresh_commitments.sql | 36 | ||||
-rw-r--r-- | src/exchangedb/0002-refunds.sql | 38 | ||||
-rw-r--r-- | src/exchangedb/0002-reserves_open_deposits.sql | 38 | ||||
-rw-r--r-- | src/exchangedb/pg_get_coin_transactions.c | 18 |
8 files changed, 255 insertions, 16 deletions
diff --git a/src/exchangedb/0002-purse_decision.sql b/src/exchangedb/0002-purse_decision.sql index 8ebd80dac..3eeeea8a7 100644 --- a/src/exchangedb/0002-purse_decision.sql +++ b/src/exchangedb/0002-purse_decision.sql @@ -69,6 +69,39 @@ END $$; +CREATE OR REPLACE FUNCTION purse_decision_insert_trigger() + RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + SELECT + pd.coin_pub + ,'purse_decision' + ,NEW.purse_decision_serial_id + FROM purse_deposits pd + WHERE purse_pub = NEW.purse_pub; + RETURN NEW; +END $$; +COMMENT ON FUNCTION purse_decision_insert_trigger() + IS 'Automatically generate coin history entry.'; + + +CREATE FUNCTION master_table_purse_decision() +RETURNS VOID +LANGUAGE plpgsql +AS $$ +BEGIN + CREATE TRIGGER purse_decision_on_insert + AFTER INSERT + ON purse_decision + FOR EACH ROW EXECUTE FUNCTION purse_decision_insert_trigger(); +END $$; + + INSERT INTO exchange_tables (name ,version @@ -85,4 +118,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'constrain' ,TRUE + ,FALSE), + ('purse_decision' + ,'exchange-0002' + ,'master' + ,TRUE ,FALSE); diff --git a/src/exchangedb/0002-purse_deposits.sql b/src/exchangedb/0002-purse_deposits.sql index e83e07382..2d2be5152 100644 --- a/src/exchangedb/0002-purse_deposits.sql +++ b/src/exchangedb/0002-purse_deposits.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 @@ -121,6 +121,37 @@ END $$; +CREATE OR REPLACE FUNCTION purse_deposits_insert_trigger() + RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.coin_pub + ,'purse_deposits' + ,NEW.purse_deposit_serial_id); + RETURN NEW; +END $$; +COMMENT ON FUNCTION purse_deposits_insert_trigger() + IS 'Automatically generate coin history entry.'; + + +CREATE FUNCTION master_table_purse_deposits() +RETURNS VOID +LANGUAGE plpgsql +AS $$ +BEGIN + CREATE TRIGGER purse_deposits_on_insert + AFTER INSERT + ON purse_deposits + FOR EACH ROW EXECUTE FUNCTION purse_deposits_insert_trigger(); +END $$; + + INSERT INTO exchange_tables (name ,version @@ -142,4 +173,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'foreign' ,TRUE + ,FALSE), + ('purse_deposits' + ,'exchange-0002' + ,'master' + ,TRUE ,FALSE); diff --git a/src/exchangedb/0002-recoup.sql b/src/exchangedb/0002-recoup.sql index c3f96f498..600091b61 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 @@ -171,10 +171,18 @@ BEGIN VALUES (NEW.reserve_out_serial_id ,NEW.coin_pub); - RETURN NEW; + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.coin_pub + ,'recoup' + ,NEW.recoup_uuid); + 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() diff --git a/src/exchangedb/0002-recoup_refresh.sql b/src/exchangedb/0002-recoup_refresh.sql index 5234078a6..45c785572 100644 --- a/src/exchangedb/0002-recoup_refresh.sql +++ b/src/exchangedb/0002-recoup_refresh.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 @@ -126,6 +126,50 @@ END $$; +CREATE OR REPLACE FUNCTION recoup_refresh_insert_trigger() + RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.coin_pub + ,'recoup_refresh::NEW' + ,NEW.recoup_refresh_uuid); + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + SELECT + melt.old_coin_pub + ,'recoup_refresh::OLD' + ,NEW.recoup_refresh_uuid + FROM refresh_revealed_coins rrc + JOIN refresh_commitments melt + USING (melt_serial_id) + WHERE rrc.rrc_serial = NEW.rrc_serial; + RETURN NEW; +END $$; +COMMENT ON FUNCTION coin_deposits_insert_trigger() + IS 'Automatically generate coin history entry.'; + + +CREATE FUNCTION master_table_recoup_refresh() +RETURNS VOID +LANGUAGE plpgsql +AS $$ +BEGIN + CREATE TRIGGER recoup_refresh_on_insert + AFTER INSERT + ON recoup_refresh + FOR EACH ROW EXECUTE FUNCTION recoup_refresh_insert_trigger(); +END $$; + + + INSERT INTO exchange_tables (name ,version @@ -147,4 +191,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'foreign' ,TRUE + ,FALSE), + ('recoup_refresh' + ,'exchange-0002' + ,'master' + ,TRUE ,FALSE); diff --git a/src/exchangedb/0002-refresh_commitments.sql b/src/exchangedb/0002-refresh_commitments.sql index 614fc6373..50e298c2a 100644 --- a/src/exchangedb/0002-refresh_commitments.sql +++ b/src/exchangedb/0002-refresh_commitments.sql @@ -106,6 +106,37 @@ END $$; +CREATE OR REPLACE FUNCTION refresh_commitments_insert_trigger() + RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.old_coin_pub + ,'refresh_commitments' + ,NEW.melt_serial_id); + RETURN NEW; +END $$; +COMMENT ON FUNCTION refresh_commitments_insert_trigger() + IS 'Automatically generate coin history entry.'; + + +CREATE FUNCTION master_table_refresh_commitments() +RETURNS VOID +LANGUAGE plpgsql +AS $$ +BEGIN + CREATE TRIGGER refresh_commitments_on_insert + AFTER INSERT + ON refresh_commitments + FOR EACH ROW EXECUTE FUNCTION refresh_commitments_insert_trigger(); +END $$; + + INSERT INTO exchange_tables (name ,version @@ -127,4 +158,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'foreign' ,TRUE + ,FALSE), + ('refresh_commitments' + ,'exchange-0002' + ,'master' + ,TRUE ,FALSE); diff --git a/src/exchangedb/0002-refunds.sql b/src/exchangedb/0002-refunds.sql index 6eae5532b..2a40bc192 100644 --- a/src/exchangedb/0002-refunds.sql +++ b/src/exchangedb/0002-refunds.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 @@ -102,6 +102,37 @@ END $$; +CREATE OR REPLACE FUNCTION refunds_insert_trigger() + RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.coin_pub + ,'refunds' + ,NEW.refund_serial_id); + RETURN NEW; +END $$; +COMMENT ON FUNCTION refunds_insert_trigger() + IS 'Automatically generate coin history entry.'; + + +CREATE FUNCTION master_table_refunds() +RETURNS VOID +LANGUAGE plpgsql +AS $$ +BEGIN + CREATE TRIGGER refunds_on_insert + AFTER INSERT + ON refunds + FOR EACH ROW EXECUTE FUNCTION refunds_insert_trigger(); +END $$; + + INSERT INTO exchange_tables (name ,version @@ -123,4 +154,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'foreign' ,TRUE + ,FALSE), + ('refunds' + ,'exchange-0002' + ,'master' + ,TRUE ,FALSE); diff --git a/src/exchangedb/0002-reserves_open_deposits.sql b/src/exchangedb/0002-reserves_open_deposits.sql index b1a292dd4..776859df8 100644 --- a/src/exchangedb/0002-reserves_open_deposits.sql +++ b/src/exchangedb/0002-reserves_open_deposits.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 @@ -80,6 +80,37 @@ END $$; +CREATE OR REPLACE FUNCTION reserves_open_deposits_insert_trigger() + RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + INSERT INTO exchange.coin_history + (coin_pub + ,table_name + ,serial_id) + VALUES + (NEW.coin_pub + ,'reserves_open_deposits' + ,NEW.reserve_open_deposit_uuid); + RETURN NEW; +END $$; +COMMENT ON FUNCTION reserves_open_deposits_insert_trigger() + IS 'Automatically generate coin history entry.'; + + +CREATE FUNCTION master_table_reserves_open_deposits() +RETURNS VOID +LANGUAGE plpgsql +AS $$ +BEGIN + CREATE TRIGGER reserves_open_deposits_on_insert + AFTER INSERT + ON reserves_open_deposits + FOR EACH ROW EXECUTE FUNCTION reserves_open_deposits_insert_trigger(); +END $$; + + INSERT INTO exchange_tables (name ,version @@ -96,4 +127,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'constrain' ,TRUE + ,FALSE), + ('reserves_open_deposits' + ,'exchange-0002' + ,'master' + ,TRUE ,FALSE); diff --git a/src/exchangedb/pg_get_coin_transactions.c b/src/exchangedb/pg_get_coin_transactions.c index 5deb3fdcb..4f4317920 100644 --- a/src/exchangedb/pg_get_coin_transactions.c +++ b/src/exchangedb/pg_get_coin_transactions.c @@ -729,7 +729,7 @@ TEH_PG_get_coin_transactions ( .db_cls = cls }; - PREPARE (pg, + PREPARE (pg, // done! "get_deposit_with_coin_pub", "SELECT" " cdep.amount_with_fee" @@ -757,7 +757,7 @@ TEH_PG_get_coin_transactions ( " JOIN denominations denoms" " USING (denominations_serial)" " WHERE cdep.coin_pub=$1;"); - PREPARE (pg, + PREPARE (pg, // done! "get_refresh_session_by_coin", "SELECT" " rc" @@ -773,7 +773,7 @@ TEH_PG_get_coin_transactions ( " JOIN denominations denoms" " USING (denominations_serial)" " WHERE old_coin_pub=$1;"); - PREPARE (pg, + PREPARE (pg, // done! "get_purse_deposit_by_coin_pub", "SELECT" " partner_base_url" @@ -798,7 +798,7 @@ TEH_PG_get_coin_transactions ( // FIXME: use to-be-created materialized index // on coin_pub (query crosses partitions!) " WHERE pd.coin_pub=$1;"); - PREPARE (pg, + PREPARE (pg, // done! "get_refunds_by_coin", "SELECT" " bdep.merchant_pub" @@ -818,7 +818,7 @@ TEH_PG_get_coin_transactions ( " JOIN denominations denom" " USING (denominations_serial)" " WHERE ref.coin_pub=$1;"); - PREPARE (pg, + PREPARE (pg, // done! "get_purse_decision_by_coin_pub", "SELECT" " pdes.purse_pub" @@ -834,7 +834,7 @@ TEH_PG_get_coin_transactions ( " USING (denominations_serial)" " WHERE pd.coin_pub=$1" " AND pdes.refunded;"); - PREPARE (pg, + PREPARE (pg, // done! "recoup_by_old_coin", "SELECT" " coins.coin_pub" @@ -856,7 +856,7 @@ TEH_PG_get_coin_transactions ( " JOIN refresh_revealed_coins rrc" " USING (melt_serial_id)" " WHERE old_coin_pub=$1);"); - PREPARE (pg, + PREPARE (pg, // done "recoup_by_coin", "SELECT" " reserves.reserve_pub" @@ -882,7 +882,7 @@ TEH_PG_get_coin_transactions ( " WHERE coins.coin_pub=$1;"); /* Used in #postgres_get_coin_transactions() to obtain recoup transactions for a refreshed coin */ - PREPARE (pg, + PREPARE (pg, // done! "recoup_by_refreshed_coin", "SELECT" " old_coins.coin_pub AS old_coin_pub" @@ -905,7 +905,7 @@ TEH_PG_get_coin_transactions ( " JOIN denominations denoms" " ON (denoms.denominations_serial = coins.denominations_serial)" " WHERE coins.coin_pub=$1;"); - PREPARE (pg, + PREPARE (pg, // done "reserve_open_by_coin", "SELECT" " reserve_open_deposit_uuid" |