diff options
Diffstat (limited to 'src/exchangedb')
| -rw-r--r-- | src/exchangedb/exchange_do_reserves_in_insert.sql | 119 | ||||
| -rw-r--r-- | src/exchangedb/pg_reserves_in_insert.c | 31 | 
2 files changed, 25 insertions, 125 deletions
| diff --git a/src/exchangedb/exchange_do_reserves_in_insert.sql b/src/exchangedb/exchange_do_reserves_in_insert.sql index 6cd5847d..dffcd8b5 100644 --- a/src/exchangedb/exchange_do_reserves_in_insert.sql +++ b/src/exchangedb/exchange_do_reserves_in_insert.sql @@ -26,21 +26,11 @@ CREATE OR REPLACE FUNCTION exchange_do_batch_reserves_in_insert(    IN in_wire_source_h_payto BYTEA,    IN in_payto_uri VARCHAR,    IN in_notify TEXT, -  OUT out_reserve_found0 BOOLEAN,    OUT transaction_duplicate0 BOOLEAN,    OUT ruuid0 INT8)  LANGUAGE plpgsql  AS $$ -DECLARE -  curs REFCURSOR; -DECLARE -  i RECORD; -DECLARE -  curs_trans REFCURSOR;  BEGIN -  ruuid0 = 0; -  out_reserve_found0 = TRUE; -  transaction_duplicate0 = TRUE;    INSERT INTO wire_targets      (wire_target_h_payto @@ -50,35 +40,22 @@ BEGIN      ,in_payto_uri)    ON CONFLICT DO NOTHING; -  OPEN curs FOR -  WITH reserve_changes AS ( -    INSERT INTO reserves -      (reserve_pub -      ,current_balance_val -      ,current_balance_frac -      ,expiration_date -      ,gc_date) -      VALUES -      (in_reserve_pub -      ,in_credit_val -      ,in_credit_frac -      ,in_reserve_expiration -      ,in_gc_date) -    ON CONFLICT DO NOTHING -    RETURNING reserve_uuid, reserve_pub) -  SELECT reserve_uuid, reserve_pub FROM reserve_changes; - -  FETCH FROM curs INTO i; -  IF FOUND -  THEN -    -- We made a change, so the reserve did not previously exist. -    out_reserve_found0 = FALSE; -    ruuid0 = i.reserve_uuid; -  END IF; -  CLOSE curs; +  INSERT INTO reserves +    (reserve_pub +    ,current_balance_val +    ,current_balance_frac +    ,expiration_date +    ,gc_date) +    VALUES +    (in_reserve_pub +    ,in_credit_val +    ,in_credit_frac +    ,in_reserve_expiration +    ,in_gc_date) +  ON CONFLICT DO NOTHING +  RETURNING reserve_uuid +  INTO ruuid0; -  OPEN curs_trans FOR -  WITH reserve_transaction AS(    INSERT INTO reserves_in      (reserve_pub      ,wire_reference @@ -95,21 +72,15 @@ BEGIN      ,in_exchange_account_name      ,in_wire_source_h_payto      ,in_execution_date) -    ON CONFLICT DO NOTHING -    RETURNING reserve_pub) -  SELECT reserve_pub FROM reserve_transaction; +    ON CONFLICT DO NOTHING; -  FETCH FROM curs_trans INTO i; +  transaction_duplicate0 = NOT FOUND;    IF FOUND    THEN -    transaction_duplicate0 = FALSE;      EXECUTE FORMAT (           'NOTIFY %s'           ,in_notify);    END IF; - -  CLOSE curs_trans; -    RETURN;  END $$; @@ -135,8 +106,6 @@ CREATE OR REPLACE FUNCTION exchange_do_batch2_reserves_insert(    IN in1_wire_source_h_payto BYTEA,    IN in1_payto_uri VARCHAR,    IN in1_notify TEXT, -  OUT out_reserve_found0 BOOLEAN, -  OUT out_reserve_found1 BOOLEAN,    OUT transaction_duplicate0 BOOLEAN,    OUT transaction_duplicate1 BOOLEAN,    OUT ruuid0 INT8, @@ -154,10 +123,6 @@ DECLARE  BEGIN    transaction_duplicate0 = TRUE;    transaction_duplicate1 = TRUE; -  out_reserve_found0 = TRUE; -  out_reserve_found1 = TRUE; -  ruuid0=0; -  ruuid1=0;    INSERT INTO wire_targets      (wire_target_h_payto @@ -207,7 +172,6 @@ BEGIN            IF in0_reserve_pub = i.reserve_pub            THEN              ruuid0 = i.reserve_uuid; -            out_reserve_found0 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -215,7 +179,6 @@ BEGIN            IF in1_reserve_pub = i.reserve_pub            THEN              ruuid1 = i.reserve_uuid; -            out_reserve_found1 = FALSE;            END IF;            EXIT loop_reserve;        END CASE; @@ -332,10 +295,6 @@ CREATE OR REPLACE FUNCTION exchange_do_batch4_reserves_insert(    IN in3_wire_source_h_payto BYTEA,    IN in3_payto_uri VARCHAR,    IN in3_notify TEXT, -  OUT out_reserve_found0 BOOLEAN, -  OUT out_reserve_found1 BOOLEAN, -  OUT out_reserve_found2 BOOLEAN, -  OUT out_reserve_found3 BOOLEAN,    OUT transaction_duplicate0 BOOLEAN,    OUT transaction_duplicate1 BOOLEAN,    OUT transaction_duplicate2 BOOLEAN, @@ -359,14 +318,6 @@ BEGIN    transaction_duplicate1=TRUE;    transaction_duplicate2=TRUE;    transaction_duplicate3=TRUE; -  out_reserve_found0 = TRUE; -  out_reserve_found1 = TRUE; -  out_reserve_found2 = TRUE; -  out_reserve_found3 = TRUE; -  ruuid0=0; -  ruuid1=0; -  ruuid2=0; -  ruuid3=0;    INSERT INTO wire_targets      (wire_target_h_payto @@ -430,7 +381,6 @@ BEGIN            IF in0_reserve_pub = i.reserve_pub            THEN              ruuid0 = i.reserve_uuid; -            out_reserve_found0 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -439,7 +389,6 @@ BEGIN            IF in1_reserve_pub = i.reserve_pub            THEN              ruuid1 = i.reserve_uuid; -            out_reserve_found1 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -448,7 +397,6 @@ BEGIN            IF in2_reserve_pub = i.reserve_pub            THEN              ruuid2 = i.reserve_uuid; -            out_reserve_found2 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -456,7 +404,6 @@ BEGIN            IF in3_reserve_pub = i.reserve_pub            THEN              ruuid3 = i.reserve_uuid; -            out_reserve_found3 = FALSE;            END IF;            EXIT loop_reserve;        END CASE; @@ -645,14 +592,6 @@ CREATE OR REPLACE FUNCTION exchange_do_batch8_reserves_insert(    IN in7_wire_source_h_payto BYTEA,    IN in7_payto_uri VARCHAR,    IN in7_notify TEXT, -  OUT out_reserve_found0 BOOLEAN, -  OUT out_reserve_found1 BOOLEAN, -  OUT out_reserve_found2 BOOLEAN, -  OUT out_reserve_found3 BOOLEAN, -  OUT out_reserve_found4 BOOLEAN, -  OUT out_reserve_found5 BOOLEAN, -  OUT out_reserve_found6 BOOLEAN, -  OUT out_reserve_found7 BOOLEAN,    OUT transaction_duplicate0 BOOLEAN,    OUT transaction_duplicate1 BOOLEAN,    OUT transaction_duplicate2 BOOLEAN, @@ -691,22 +630,6 @@ BEGIN    transaction_duplicate5=TRUE;    transaction_duplicate6=TRUE;    transaction_duplicate7=TRUE; -  out_reserve_found0 = TRUE; -  out_reserve_found1 = TRUE; -  out_reserve_found2 = TRUE; -  out_reserve_found3 = TRUE; -  out_reserve_found4 = TRUE; -  out_reserve_found5 = TRUE; -  out_reserve_found6 = TRUE; -  out_reserve_found7 = TRUE; -  ruuid0=0; -  ruuid1=0; -  ruuid2=0; -  ruuid3=0; -  ruuid4=0; -  ruuid5=0; -  ruuid6=0; -  ruuid7=0;    INSERT INTO wire_targets      (wire_target_h_payto @@ -803,7 +726,6 @@ BEGIN            IF in0_reserve_pub = i.reserve_pub            THEN              ruuid0 = i.reserve_uuid; -            out_reserve_found0 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -812,7 +734,6 @@ BEGIN            IF in1_reserve_pub = i.reserve_pub            THEN              ruuid1 = i.reserve_uuid; -            out_reserve_found1 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -821,7 +742,6 @@ BEGIN            IF in2_reserve_pub = i.reserve_pub            THEN              ruuid2 = i.reserve_uuid; -            out_reserve_found2 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -830,7 +750,6 @@ BEGIN            IF in3_reserve_pub = i.reserve_pub            THEN              ruuid3 = i.reserve_uuid; -            out_reserve_found3 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -839,7 +758,6 @@ BEGIN            IF in4_reserve_pub = i.reserve_pub            THEN              ruuid4 = i.reserve_uuid; -            out_reserve_found4 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -848,7 +766,6 @@ BEGIN            IF in5_reserve_pub = i.reserve_pub            THEN              ruuid5 = i.reserve_uuid; -            out_reserve_found5 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -857,7 +774,6 @@ BEGIN            IF in6_reserve_pub = i.reserve_pub            THEN              ruuid6 = i.reserve_uuid; -            out_reserve_found6 = FALSE;              CONTINUE loop_reserve;            END IF;            CONTINUE loop_k; @@ -865,7 +781,6 @@ BEGIN            IF in7_reserve_pub = i.reserve_pub            THEN              ruuid7 = i.reserve_uuid; -            out_reserve_found7 = FALSE;            END IF;            EXIT loop_reserve;        END CASE; diff --git a/src/exchangedb/pg_reserves_in_insert.c b/src/exchangedb/pg_reserves_in_insert.c index 2e29a185..691c57d3 100644 --- a/src/exchangedb/pg_reserves_in_insert.c +++ b/src/exchangedb/pg_reserves_in_insert.c @@ -113,12 +113,12 @@ struct ReserveRecord   * index @a index   */  #define RR_RESULT_PARAM(rr,index) \ -  GNUNET_PQ_result_spec_bool ("conflicted" TALER_S (index),            \ -                              &rr[index].conflicts),                   \    GNUNET_PQ_result_spec_bool ("transaction_duplicate" TALER_S (index), \                                &rr[index].transaction_duplicate),       \ -  GNUNET_PQ_result_spec_uint64 ("reserve_uuid" TALER_S (index),        \ -                                &rr[index].reserve_uuid) +  GNUNET_PQ_result_spec_allow_null ( \ +    GNUNET_PQ_result_spec_uint64 ("reserve_uuid" TALER_S (index),        \ +                                  &rr[index].reserve_uuid),              \ +    &rr[index].conflicts)  /** @@ -151,8 +151,7 @@ insert1 (struct PostgresClosure *pg,    PREPARE (pg,             "batch1_reserve_create",             "SELECT " -           " out_reserve_found0 AS conflicted0" -           ",transaction_duplicate0 AS transaction_duplicate0" +           " transaction_duplicate0 AS transaction_duplicate0"             ",ruuid0 AS reserve_uuid0"             " FROM exchange_do_batch_reserves_in_insert"             " ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);"); @@ -210,9 +209,7 @@ insert2 (struct PostgresClosure *pg,    PREPARE (pg,             "batch2_reserve_create",             "SELECT" -           " out_reserve_found0 AS conflicted0" -           ",out_reserve_found1 AS conflicted1" -           ",transaction_duplicate0" +           " transaction_duplicate0"             ",transaction_duplicate1"             ",ruuid0 AS reserve_uuid0"             ",ruuid1 AS reserve_uuid1" @@ -279,11 +276,7 @@ insert4 (struct PostgresClosure *pg,    PREPARE (pg,             "batch4_reserve_create",             "SELECT" -           " out_reserve_found0 AS conflicted0" -           ",out_reserve_found1 AS conflicted1" -           ",out_reserve_found2 AS conflicted2" -           ",out_reserve_found3 AS conflicted3" -           ",transaction_duplicate0" +           " transaction_duplicate0"             ",transaction_duplicate1"             ",transaction_duplicate2"             ",transaction_duplicate3" @@ -363,15 +356,7 @@ insert8 (struct PostgresClosure *pg,    PREPARE (pg,             "batch8_reserve_create",             "SELECT" -           " out_reserve_found0 AS conflicted0" -           ",out_reserve_found1 AS conflicted1" -           ",out_reserve_found2 AS conflicted2" -           ",out_reserve_found3 AS conflicted3" -           ",out_reserve_found4 AS conflicted4" -           ",out_reserve_found5 AS conflicted5" -           ",out_reserve_found6 AS conflicted6" -           ",out_reserve_found7 AS conflicted7" -           ",transaction_duplicate0" +           " transaction_duplicate0"             ",transaction_duplicate1"             ",transaction_duplicate2"             ",transaction_duplicate3" | 
