diff options
author | Christian Grothoff <christian@grothoff.org> | 2022-11-27 14:05:47 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2022-11-27 14:05:47 +0100 |
commit | a322770d290cae69e7d2f7629ee575e068254428 (patch) | |
tree | 75a80ac74d165fa0dd00df6095ad0c482d706da5 /src/exchangedb/0002-refresh_transfer_keys.sql | |
parent | be2c11a1797d8d16b86439a80a4f110f82bb5829 (diff) | |
download | exchange-a322770d290cae69e7d2f7629ee575e068254428.tar.xz |
more work on SQL refactoring
Diffstat (limited to 'src/exchangedb/0002-refresh_transfer_keys.sql')
-rw-r--r-- | src/exchangedb/0002-refresh_transfer_keys.sql | 82 |
1 files changed, 71 insertions, 11 deletions
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 <http://www.gnu.org/licenses/> -- -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); |