gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: simplify batch insert: no cursor


From: gnunet
Subject: [taler-exchange] branch master updated: simplify batch insert: no cursor where not required, replace out_reserve_found with ruuid being allowed to remain NULL
Date: Sat, 22 Apr 2023 15:02:51 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new acbee867 simplify batch insert: no cursor where not required, replace 
out_reserve_found with ruuid being allowed to remain NULL
acbee867 is described below

commit acbee86745552a9b6361a8969d3c0a9d0399fc88
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Apr 22 15:02:47 2023 +0200

    simplify batch insert: no cursor where not required, replace 
out_reserve_found with ruuid being allowed to remain NULL
---
 src/exchangedb/exchange_do_reserves_in_insert.sql | 119 ++++------------------
 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"

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]