gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: factor out lookup_reserves shit


From: gnunet
Subject: [taler-merchant] branch master updated: factor out lookup_reserves shit job
Date: Tue, 02 May 2023 19:31:37 +0200

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

grothoff pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new f1d8b299 factor out lookup_reserves shit job
f1d8b299 is described below

commit f1d8b299384d02c9dcd88f69ac2395fc8286e9ce
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue May 2 19:31:27 2023 +0200

    factor out lookup_reserves shit job
---
 src/backenddb/Makefile.am                  |   1 +
 src/backenddb/pg_lookup_reserves.c         | 221 +++++++++++++++++++++++++++++
 src/backenddb/pg_lookup_reserves.h         |  51 +++++++
 src/backenddb/plugin_merchantdb_postgres.c | 211 +--------------------------
 4 files changed, 276 insertions(+), 208 deletions(-)

diff --git a/src/backenddb/Makefile.am b/src/backenddb/Makefile.am
index 5a3611e7..2debd00e 100644
--- a/src/backenddb/Makefile.am
+++ b/src/backenddb/Makefile.am
@@ -62,6 +62,7 @@ libtaler_plugin_merchantdb_postgres_la_SOURCES = \
   pg_delete_exchange_accounts.h pg_delete_exchange_accounts.c \
   pg_select_accounts_by_exchange.h pg_select_accounts_by_exchange.c \
   pg_insert_exchange_account.h pg_insert_exchange_account.c \
+  pg_lookup_reserves.h pg_lookup_reserves.c \
   plugin_merchantdb_postgres.c  pg_helper.h
 libtaler_plugin_merchantdb_postgres_la_LIBADD = \
   $(LTLIBINTL)
diff --git a/src/backenddb/pg_lookup_reserves.c 
b/src/backenddb/pg_lookup_reserves.c
new file mode 100644
index 00000000..90b81f30
--- /dev/null
+++ b/src/backenddb/pg_lookup_reserves.c
@@ -0,0 +1,221 @@
+/*
+   This file is part of TALER
+   Copyright (C) 2022 Taler Systems SA
+
+   TALER is free software; you can redistribute it and/or modify it under the
+   terms of the GNU General Public License as published by the Free Software
+   Foundation; either version 3, or (at your option) any later version.
+
+   TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along with
+   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+/**
+ * @file backenddb/pg_lookup_reserves.c
+ * @brief Implementation of the lookup_reserves function for Postgres
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include <taler/taler_error_codes.h>
+#include <taler/taler_dbevents.h>
+#include <taler/taler_pq_lib.h>
+#include "pg_lookup_reserves.h"
+#include "pg_helper.h"
+
+
+/**
+ * Closure for #lookup_reserves_cb.
+ */
+struct LookupReservesContext
+{
+  /**
+   * Postgres context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
+   * Function to call with the results
+   */
+  TALER_MERCHANTDB_ReservesCallback cb;
+
+  /**
+   * Closure for @e cb
+   */
+  void *cb_cls;
+
+  /**
+   * Filter by active reserves.
+   */
+  enum TALER_EXCHANGE_YesNoAll active;
+
+  /**
+   * Filter by failures (mismatch in exchange claimed and
+   * merchant claimed initial amounts).
+   */
+  enum TALER_EXCHANGE_YesNoAll failures;
+
+  /**
+   * Set in case of errors.
+   */
+  enum GNUNET_DB_QueryStatus qs;
+
+};
+
+
+/**
+ * Function to be called with the results of a SELECT statement
+ * that has returned @a num_results results about accounts.
+ *
+ * @param[in,out] cls of type `struct LookupReservesContext *`
+ * @param result the postgres result
+ * @param num_results the number of results in @a result
+ */
+static void
+lookup_reserves_cb (void *cls,
+                    PGresult *result,
+                    unsigned int num_results)
+{
+  struct LookupReservesContext *lrc = cls;
+  struct PostgresClosure *pg = lrc->pg;
+
+  for (unsigned int i = 0; i < num_results; i++)
+  {
+    struct TALER_ReservePublicKeyP reserve_pub;
+    struct GNUNET_TIME_Timestamp creation_time;
+    struct GNUNET_TIME_Timestamp expiration_time;
+    struct TALER_Amount merchant_initial_balance;
+    struct TALER_Amount exchange_initial_balance;
+    struct TALER_Amount pickup_amount;
+    struct TALER_Amount committed_amount;
+    uint8_t active;
+    struct GNUNET_PQ_ResultSpec rs[] = {
+      GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
+                                            &reserve_pub),
+      GNUNET_PQ_result_spec_timestamp ("creation_time",
+                                       &creation_time),
+      GNUNET_PQ_result_spec_timestamp ("expiration",
+                                       &expiration_time),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("merchant_initial_balance",
+                                   &merchant_initial_balance),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_initial_balance",
+                                   &exchange_initial_balance),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("tips_committed",
+                                   &committed_amount),
+      TALER_PQ_RESULT_SPEC_AMOUNT ("tips_picked_up",
+                                   &pickup_amount),
+      GNUNET_PQ_result_spec_auto_from_type ("active",
+                                            &active),
+      GNUNET_PQ_result_spec_end
+    };
+
+    if (GNUNET_OK !=
+        GNUNET_PQ_extract_result (result,
+                                  rs,
+                                  i))
+    {
+      GNUNET_break (0);
+      lrc->qs = GNUNET_DB_STATUS_HARD_ERROR;
+      return;
+    }
+    switch (lrc->active)
+    {
+    case TALER_EXCHANGE_YNA_YES:
+      if (0 == active)
+        continue;
+      break;
+    case TALER_EXCHANGE_YNA_NO:
+      if (0 != active)
+        continue;
+      break;
+    case TALER_EXCHANGE_YNA_ALL:
+      break;
+    }
+    switch (lrc->failures)
+    {
+    case TALER_EXCHANGE_YNA_YES:
+      if (0 ==
+          TALER_amount_cmp (&merchant_initial_balance,
+                            &exchange_initial_balance))
+        continue;
+      break;
+    case TALER_EXCHANGE_YNA_NO:
+      if (0 !=
+          TALER_amount_cmp (&merchant_initial_balance,
+                            &exchange_initial_balance))
+        continue;
+      break;
+    case TALER_EXCHANGE_YNA_ALL:
+      break;
+    }
+    lrc->cb (lrc->cb_cls,
+             &reserve_pub,
+             creation_time,
+             expiration_time,
+             &merchant_initial_balance,
+             &exchange_initial_balance,
+             &pickup_amount,
+             &committed_amount,
+             (0 != active));
+  }
+}
+
+
+enum GNUNET_DB_QueryStatus
+TMH_PG_lookup_reserves (void *cls,
+                        const char *instance_id,
+                        struct GNUNET_TIME_Timestamp created_after,
+                        enum TALER_EXCHANGE_YesNoAll active,
+                        enum TALER_EXCHANGE_YesNoAll failures,
+                        TALER_MERCHANTDB_ReservesCallback cb,
+                        void *cb_cls)
+{
+  struct PostgresClosure *pg = cls;
+  struct LookupReservesContext lrc = {
+    .pg = pg,
+    .active = active,
+    .failures = failures,
+    .cb = cb,
+    .cb_cls = cb_cls
+  };
+  struct GNUNET_PQ_QueryParam params[] = {
+    GNUNET_PQ_query_param_string (instance_id),
+    GNUNET_PQ_query_param_timestamp (&created_after),
+    GNUNET_PQ_query_param_end
+  };
+  enum GNUNET_DB_QueryStatus qs;
+
+  check_connection (pg);
+  PREPARE (pg,
+           "lookup_reserves",
+           "SELECT"
+           " reserve_pub"
+           ",creation_time"
+           ",expiration"
+           ",merchant_initial_balance_val"
+           ",merchant_initial_balance_frac"
+           ",exchange_initial_balance_val"
+           ",exchange_initial_balance_frac"
+           ",tips_committed_val"
+           ",tips_committed_frac"
+           ",tips_picked_up_val"
+           ",tips_picked_up_frac"
+           ",reserve_priv IS NOT NULL AS active"
+           " FROM merchant_tip_reserves"
+           " FULL OUTER JOIN merchant_tip_reserve_keys USING (reserve_serial)"
+           " WHERE creation_time > $2"
+           "   AND merchant_serial ="
+           "     (SELECT merchant_serial"
+           "        FROM merchant_instances"
+           "       WHERE merchant_id=$1)");
+  qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
+                                             "lookup_reserves",
+                                             params,
+                                             &lookup_reserves_cb,
+                                             &lrc);
+  if (lrc.qs < 0)
+    return lrc.qs;
+  return qs;
+}
diff --git a/src/backenddb/pg_lookup_reserves.h 
b/src/backenddb/pg_lookup_reserves.h
new file mode 100644
index 00000000..bf16edc1
--- /dev/null
+++ b/src/backenddb/pg_lookup_reserves.h
@@ -0,0 +1,51 @@
+/*
+   This file is part of TALER
+   Copyright (C) 2022 Taler Systems SA
+
+   TALER is free software; you can redistribute it and/or modify it under the
+   terms of the GNU General Public License as published by the Free Software
+   Foundation; either version 3, or (at your option) any later version.
+
+   TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along with
+   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+/**
+ * @file backenddb/pg_lookup_reserves.h
+ * @brief implementation of the lookup_reserves function for Postgres
+ * @author Christian Grothoff
+ */
+#ifndef PG_LOOKUP_RESERVES_H
+#define PG_LOOKUP_RESERVES_H
+
+#include <taler/taler_util.h>
+#include <taler/taler_json_lib.h>
+#include "taler_merchantdb_plugin.h"
+
+
+/**
+ * Lookup reserves.
+ *
+ * @param cls closure
+ * @param instance_id instance to lookup payments for
+ * @param created_after filter by reserves created after this date
+ * @param active filter by active reserves
+ * @param failures filter by reserves with a disagreement on the initial 
balance
+ * @param cb function to call with reserve summary data
+ * @param cb_cls closure for @a cb
+ * @return transaction status
+ */
+enum GNUNET_DB_QueryStatus
+TMH_PG_lookup_reserves (void *cls,
+                        const char *instance_id,
+                        struct GNUNET_TIME_Timestamp created_after,
+                        enum TALER_EXCHANGE_YesNoAll active,
+                        enum TALER_EXCHANGE_YesNoAll failures,
+                        TALER_MERCHANTDB_ReservesCallback cb,
+                        void *cb_cls);
+
+
+#endif
diff --git a/src/backenddb/plugin_merchantdb_postgres.c 
b/src/backenddb/plugin_merchantdb_postgres.c
index c7ffe2a5..72ebd7e4 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -40,6 +40,7 @@
 #include "pg_delete_exchange_accounts.h"
 #include "pg_select_accounts_by_exchange.h"
 #include "pg_insert_exchange_account.h"
+#include "pg_lookup_reserves.h"
 
 
 /**
@@ -4678,191 +4679,6 @@ postgres_activate_reserve (void *cls,
 }
 
 
-/**
- * Closure for #lookup_reserves_cb.
- */
-struct LookupReservesContext
-{
-  /**
-   * Postgres context.
-   */
-  struct PostgresClosure *pg;
-
-  /**
-   * Function to call with the results
-   */
-  TALER_MERCHANTDB_ReservesCallback cb;
-
-  /**
-   * Closure for @e cb
-   */
-  void *cb_cls;
-
-  /**
-   * Filter by active reserves.
-   */
-  enum TALER_EXCHANGE_YesNoAll active;
-
-  /**
-   * Filter by failures (mismatch in exchange claimed and
-   * merchant claimed initial amounts).
-   */
-  enum TALER_EXCHANGE_YesNoAll failures;
-
-  /**
-   * Set in case of errors.
-   */
-  enum GNUNET_DB_QueryStatus qs;
-
-};
-
-
-/**
- * Function to be called with the results of a SELECT statement
- * that has returned @a num_results results about accounts.
- *
- * @param[in,out] cls of type `struct LookupReservesContext *`
- * @param result the postgres result
- * @param num_results the number of results in @a result
- */
-static void
-lookup_reserves_cb (void *cls,
-                    PGresult *result,
-                    unsigned int num_results)
-{
-  struct LookupReservesContext *lrc = cls;
-  struct PostgresClosure *pg = lrc->pg;
-
-  for (unsigned int i = 0; i < num_results; i++)
-  {
-    struct TALER_ReservePublicKeyP reserve_pub;
-    struct GNUNET_TIME_Timestamp creation_time;
-    struct GNUNET_TIME_Timestamp expiration_time;
-    struct TALER_Amount merchant_initial_balance;
-    struct TALER_Amount exchange_initial_balance;
-    struct TALER_Amount pickup_amount;
-    struct TALER_Amount committed_amount;
-    uint8_t active;
-    struct GNUNET_PQ_ResultSpec rs[] = {
-      GNUNET_PQ_result_spec_auto_from_type ("reserve_pub",
-                                            &reserve_pub),
-      GNUNET_PQ_result_spec_timestamp ("creation_time",
-                                       &creation_time),
-      GNUNET_PQ_result_spec_timestamp ("expiration",
-                                       &expiration_time),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("merchant_initial_balance",
-                                   &merchant_initial_balance),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("exchange_initial_balance",
-                                   &exchange_initial_balance),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("tips_committed",
-                                   &committed_amount),
-      TALER_PQ_RESULT_SPEC_AMOUNT ("tips_picked_up",
-                                   &pickup_amount),
-      GNUNET_PQ_result_spec_auto_from_type ("active",
-                                            &active),
-      GNUNET_PQ_result_spec_end
-    };
-
-    if (GNUNET_OK !=
-        GNUNET_PQ_extract_result (result,
-                                  rs,
-                                  i))
-    {
-      GNUNET_break (0);
-      lrc->qs = GNUNET_DB_STATUS_HARD_ERROR;
-      return;
-    }
-    switch (lrc->active)
-    {
-    case TALER_EXCHANGE_YNA_YES:
-      if (0 == active)
-        continue;
-      break;
-    case TALER_EXCHANGE_YNA_NO:
-      if (0 != active)
-        continue;
-      break;
-    case TALER_EXCHANGE_YNA_ALL:
-      break;
-    }
-    switch (lrc->failures)
-    {
-    case TALER_EXCHANGE_YNA_YES:
-      if (0 ==
-          TALER_amount_cmp (&merchant_initial_balance,
-                            &exchange_initial_balance))
-        continue;
-      break;
-    case TALER_EXCHANGE_YNA_NO:
-      if (0 !=
-          TALER_amount_cmp (&merchant_initial_balance,
-                            &exchange_initial_balance))
-        continue;
-      break;
-    case TALER_EXCHANGE_YNA_ALL:
-      break;
-    }
-    lrc->cb (lrc->cb_cls,
-             &reserve_pub,
-             creation_time,
-             expiration_time,
-             &merchant_initial_balance,
-             &exchange_initial_balance,
-             &pickup_amount,
-             &committed_amount,
-             (0 != active));
-  }
-}
-
-
-/**
- * Lookup reserves.
- *
- * @param cls closure
- * @param instance_id instance to lookup payments for
- * @param created_after filter by reserves created after this date
- * @param active filter by active reserves
- * @param failures filter by reserves with a disagreement on the initial 
balance
- * @param cb function to call with reserve summary data
- * @param cb_cls closure for @a cb
- * @return transaction status
- */
-static enum GNUNET_DB_QueryStatus
-postgres_lookup_reserves (void *cls,
-                          const char *instance_id,
-                          struct GNUNET_TIME_Timestamp created_after,
-                          enum TALER_EXCHANGE_YesNoAll active,
-                          enum TALER_EXCHANGE_YesNoAll failures,
-                          TALER_MERCHANTDB_ReservesCallback cb,
-                          void *cb_cls)
-{
-  struct PostgresClosure *pg = cls;
-  struct LookupReservesContext lrc = {
-    .pg = pg,
-    .active = active,
-    .failures = failures,
-    .cb = cb,
-    .cb_cls = cb_cls
-  };
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_string (instance_id),
-    GNUNET_PQ_query_param_timestamp (&created_after),
-    GNUNET_PQ_query_param_end
-  };
-  enum GNUNET_DB_QueryStatus qs;
-
-  check_connection (pg);
-  qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
-                                             "lookup_reserves",
-                                             params,
-                                             &lookup_reserves_cb,
-                                             &lrc);
-  if (lrc.qs < 0)
-    return lrc.qs;
-  return qs;
-}
-
-
 /**
  * Closure for #lookup_pending_reserves_cb.
  */
@@ -9076,28 +8892,6 @@ postgres_connect (void *cls)
                             "     (SELECT merchant_serial"
                             "        FROM merchant_instances"
                             "       WHERE merchant_id=$1)"),
-    /* For postgres_lookup_reserves() */
-    GNUNET_PQ_make_prepare ("lookup_reserves",
-                            "SELECT"
-                            " reserve_pub"
-                            ",creation_time"
-                            ",expiration"
-                            ",merchant_initial_balance_val"
-                            ",merchant_initial_balance_frac"
-                            ",exchange_initial_balance_val"
-                            ",exchange_initial_balance_frac"
-                            ",tips_committed_val"
-                            ",tips_committed_frac"
-                            ",tips_picked_up_val"
-                            ",tips_picked_up_frac"
-                            ",reserve_priv IS NOT NULL AS active"
-                            " FROM merchant_tip_reserves"
-                            " FULL OUTER JOIN merchant_tip_reserve_keys USING 
(reserve_serial)"
-                            " WHERE creation_time > $2"
-                            "   AND merchant_serial ="
-                            "     (SELECT merchant_serial"
-                            "        FROM merchant_instances"
-                            "       WHERE merchant_id=$1)"),
     /* For postgres_lookup_pending_reserves() */
     GNUNET_PQ_make_prepare ("lookup_pending_reserves",
                             "SELECT"
@@ -9775,7 +9569,8 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
   plugin->store_wire_fee_by_exchange = &postgres_store_wire_fee_by_exchange;
   plugin->insert_reserve = &postgres_insert_reserve;
   plugin->activate_reserve = &postgres_activate_reserve;
-  plugin->lookup_reserves = &postgres_lookup_reserves;
+  plugin->lookup_reserves
+    = &TMH_PG_lookup_reserves;
   plugin->lookup_pending_reserves = &postgres_lookup_pending_reserves;
   plugin->lookup_reserve = &postgres_lookup_reserve;
   plugin->delete_reserve = &postgres_delete_reserve;

-- 
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]