From a322770d290cae69e7d2f7629ee575e068254428 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 27 Nov 2022 14:05:47 +0100 Subject: more work on SQL refactoring --- src/exchangedb/0002-refresh_transfer_keys.sql | 82 +++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 11 deletions(-) (limited to 'src/exchangedb/0002-refresh_transfer_keys.sql') diff --git a/src/exchangedb/0002-refresh_transfer_keys.sql b/src/exchangedb/0002-refresh_transfer_keys.sql index 54274b262..078015907 100644 --- a/src/exchangedb/0002-refresh_transfer_keys.sql +++ b/src/exchangedb/0002-refresh_transfer_keys.sql @@ -14,8 +14,8 @@ -- TALER; see the file COPYING. If not, see -- -CREATE OR REPLACE FUNCTION create_table_refresh_transfer_keys( - IN shard_suffix VARCHAR DEFAULT NULL +CREATE FUNCTION create_table_refresh_transfer_keys( + IN partition_suffix VARCHAR DEFAULT NULL ) RETURNS VOID LANGUAGE plpgsql @@ -23,33 +23,83 @@ AS $$ DECLARE table_name VARCHAR DEFAULT 'refresh_transfer_keys'; BEGIN - PERFORM create_partitioned_table( - 'CREATE TABLE IF NOT EXISTS %I' - '(rtc_serial BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE' - ',melt_serial_id INT8 PRIMARY KEY' -- REFERENCES refresh_commitments (melt_serial_id) ON DELETE CASCADE' + 'CREATE TABLE %I' + '(rtc_serial BIGINT GENERATED BY DEFAULT AS IDENTITY' + ',melt_serial_id INT8 PRIMARY KEY' ',transfer_pub BYTEA NOT NULL CHECK(LENGTH(transfer_pub)=32)' ',transfer_privs BYTEA NOT NULL' ') %s ;' ,table_name ,'PARTITION BY HASH (melt_serial_id)' - ,shard_suffix + ,partition_suffix + ); + PERFORM comment_partitioned_table( + 'Transfer keys of a refresh operation (the data revealed to the exchange).' + ,table_name + ,partition_suffix + ); + PERFORM comment_partitioned_column( + 'needed for exchange-auditor replication logic' + ,'rtc_serial' + ,table_name + ,partition_suffix + ); + PERFORM comment_partitioned_column( + 'Identifies the refresh commitment (rc) of the operation.' + ,'melt_serial_id' + ,table_name + ,partition_suffix + ); + PERFORM comment_partitioned_column( + 'transfer public key for the gamma index' + ,'transfer_pub' + ,table_name + ,partition_suffix ); + PERFORM comment_partitioned_column( + 'array of TALER_CNC_KAPPA-1 transfer private keys that have been revealed, with the gamma entry being skipped' + ,'transfer_privs' + ,table_name + ,partition_suffix + ); +END +$$; + +CREATE FUNCTION constrain_table_refresh_transfer_keys( + IN partition_suffix VARCHAR +) +RETURNS void +LANGUAGE plpgsql +AS $$ +DECLARE + table_name VARCHAR DEFAULT 'refresh_transfer_keys'; +BEGIN + table_name = concat_ws('_', table_name, partition_suffix); + EXECUTE FORMAT ( + 'ALTER TABLE ' || table_name || + ' ADD CONSTRAINT ' || table_name || '_rtc_serial_key' + ' UNIQUE (rtc_serial)' + ); END $$; -CREATE OR REPLACE FUNCTION add_constraints_to_refresh_transfer_keys_partition( + +CREATE FUNCTION foreign_table_refresh_transfer_keys( IN partition_suffix VARCHAR ) RETURNS void LANGUAGE plpgsql AS $$ +DECLARE + table_name VARCHAR DEFAULT 'refresh_transfer_keys'; BEGIN + table_name = concat_ws('_', table_name, partition_suffix); EXECUTE FORMAT ( - 'ALTER TABLE refresh_transfer_keys_' || partition_suffix || ' ' - 'ADD CONSTRAINT refresh_transfer_keys_' || partition_suffix || '_rtc_serial_key ' - 'UNIQUE (rtc_serial)' + 'ALTER TABLE ' || table_name || + ' ADD CONSTRAINT ' || table_name || 'foreign_melt_serial_id' + ' REFERENCES refresh_commitments (melt_serial_id) ON DELETE CASCADE' ); END $$; @@ -66,4 +116,14 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'create' ,TRUE + ,FALSE), + ('refresh_transfer_keys' + ,'exchange-0002' + ,'constrain' + ,TRUE + ,FALSE), + ('refresh_transfer_keys' + ,'exchange-0002' + ,'foreign' + ,TRUE ,FALSE); -- cgit v1.2.3