From 4f75bcdca35b1ce8aa1f3db444c63f4763e28301 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 27 Nov 2022 14:45:01 +0100 Subject: more work on SQL refactoring --- src/exchangedb/0002-cs_nonce_locks.sql | 52 +++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 11 deletions(-) (limited to 'src/exchangedb/0002-cs_nonce_locks.sql') diff --git a/src/exchangedb/0002-cs_nonce_locks.sql b/src/exchangedb/0002-cs_nonce_locks.sql index d34a84c8a..effc0045f 100644 --- a/src/exchangedb/0002-cs_nonce_locks.sql +++ b/src/exchangedb/0002-cs_nonce_locks.sql @@ -14,40 +14,65 @@ -- TALER; see the file COPYING. If not, see -- -CREATE OR REPLACE FUNCTION create_table_cs_nonce_locks( - shard_suffix VARCHAR DEFAULT NULL +CREATE FUNCTION create_table_cs_nonce_locks( + partition_suffix VARCHAR DEFAULT NULL ) RETURNS VOID LANGUAGE plpgsql AS $$ BEGIN - PERFORM create_partitioned_table( - 'CREATE TABLE IF NOT EXISTS %I' - '(cs_nonce_lock_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE' + 'CREATE TABLE %I' + '(cs_nonce_lock_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' ',nonce BYTEA PRIMARY KEY CHECK (LENGTH(nonce)=32)' ',op_hash BYTEA NOT NULL CHECK (LENGTH(op_hash)=64)' ',max_denomination_serial INT8 NOT NULL' ') %s ;' ,'cs_nonce_locks' ,'PARTITION BY HASH (nonce)' - ,shard_suffix + ,partition_suffix + ); + PERFORM comment_partitioned_table( + 'ensures a Clause Schnorr client nonce is locked for use with an operation identified by a hash' + ,'cs_nonce_locks' + ,partition_suffix + ); + PERFORM comment_partitioned_column( + 'actual nonce submitted by the client' + ,'nonce' + ,'cs_nonce_locks' + ,partition_suffix + ); + PERFORM comment_partitioned_column( + 'hash (RC for refresh, blind coin hash for withdraw) the nonce may be used with' + ,'op_hash' + ,'cs_nonce_locks' + ,partition_suffix + ); + PERFORM comment_partitioned_column( + 'Maximum number of a CS denomination serial the nonce could be used with, for GC' + ,'max_denomination_serial' + ,'cs_nonce_locks' + ,partition_suffix ); - END $$; -CREATE OR REPLACE FUNCTION add_constraints_to_cs_nonce_locks_partition( + +CREATE FUNCTION constrain_table_cs_nonce_locks( IN partition_suffix VARCHAR ) RETURNS VOID LANGUAGE plpgsql AS $$ +DECLARE + table_name VARCHAR DEFAULT 'cs_nonce_locks'; BEGIN + table_name = concat_ws('_', table_name, shard_suffix); EXECUTE FORMAT ( - 'ALTER TABLE cs_nonce_locks_' || partition_suffix || ' ' - 'ADD CONSTRAINT cs_nonce_locks_' || partition_suffix || '_cs_nonce_lock_serial_id_key ' - 'UNIQUE (cs_nonce_lock_serial_id)' + 'ALTER TABLE ' || table_name || + ' ADD CONSTRAINT ' || table_name || '_cs_nonce_lock_serial_id_key' + ' UNIQUE (cs_nonce_lock_serial_id)' ); END $$; @@ -64,4 +89,9 @@ INSERT INTO exchange_tables ,'exchange-0002' ,'create' ,TRUE + ,FALSE), + ('cs_nonce_locks' + ,'exchange-0002' + ,'constrain' + ,TRUE ,FALSE); -- cgit v1.2.3