gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -finish implementation of new DB


From: gnunet
Subject: [taler-exchange] branch master updated: -finish implementation of new DB functions
Date: Sat, 31 Dec 2022 01:15:45 +0100

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 509141b6 -finish implementation of new DB functions
509141b6 is described below

commit 509141b6002d49db5a92b6d573cc7cca237fc1f0
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Dec 31 01:15:40 2022 +0100

    -finish implementation of new DB functions
---
 .../pg_select_deposits_above_serial_id.c           |   3 +-
 src/exchangedb/pg_select_kyc_attributes.c          | 132 ++++++++++++++++++++-
 src/exchangedb/pg_select_satisfied_kyc_processes.c |  15 +--
 src/exchangedb/pg_select_similar_kyc_attributes.c  | 127 +++++++++++++++++++-
 4 files changed, 259 insertions(+), 18 deletions(-)

diff --git a/src/exchangedb/pg_select_deposits_above_serial_id.c 
b/src/exchangedb/pg_select_deposits_above_serial_id.c
index 52f96e5f..b3258bd4 100644
--- a/src/exchangedb/pg_select_deposits_above_serial_id.c
+++ b/src/exchangedb/pg_select_deposits_above_serial_id.c
@@ -137,6 +137,7 @@ deposit_serial_helper_cb (void *cls,
   }
 }
 
+
 enum GNUNET_DB_QueryStatus
 TEH_PG_select_deposits_above_serial_id (
   void *cls,
@@ -157,7 +158,7 @@ TEH_PG_select_deposits_above_serial_id (
   };
   enum GNUNET_DB_QueryStatus qs;
 
-      /* Fetch deposits with rowid '\geq' the given parameter */
+  /* Fetch deposits with rowid '\geq' the given parameter */
   PREPARE (pg,
            "audit_get_deposits_incr",
            "SELECT"
diff --git a/src/exchangedb/pg_select_kyc_attributes.c 
b/src/exchangedb/pg_select_kyc_attributes.c
index 4832df7e..e8b2e43d 100644
--- a/src/exchangedb/pg_select_kyc_attributes.c
+++ b/src/exchangedb/pg_select_kyc_attributes.c
@@ -26,6 +26,103 @@
 #include "pg_helper.h"
 
 
+/**
+ * Closure for #get_attributes_cb().
+ */
+struct GetAttributesContext
+{
+  /**
+   * Function to call per result.
+   */
+  TALER_EXCHANGEDB_AttributeCallback cb;
+
+  /**
+   * Closure for @e cb.
+   */
+  void *cb_cls;
+
+  /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
+   * Key of our query.
+   */
+  const struct TALER_PaytoHashP *h_payto;
+
+  /**
+   * Flag set to #GNUNET_OK as long as everything is fine.
+   */
+  enum GNUNET_GenericReturnValue status;
+
+};
+
+
+/**
+ * Invoke the callback for each result.
+ *
+ * @param cls a `struct GetAttributesContext *`
+ * @param result SQL result
+ * @param num_results number of rows in @a result
+ */
+static void
+get_attributes_cb (void *cls,
+                   PGresult *result,
+                   unsigned int num_results)
+{
+  struct GetAttributesContext *ctx = cls;
+
+  for (unsigned int i = 0; i < num_results; i++)
+  {
+    struct TALER_PaytoHashP h_payto;
+    struct GNUNET_TIME_Timestamp collection_time;
+    struct GNUNET_TIME_Timestamp expiration_time;
+    size_t enc_attributes_size;
+    void *enc_attributes;
+    char *provider;
+    char *birthdate = NULL;
+    struct GNUNET_PQ_ResultSpec rs[] = {
+      GNUNET_PQ_result_spec_auto_from_type ("h_payto",
+                                            &h_payto),
+      GNUNET_PQ_result_spec_string ("provider",
+                                    &provider),
+      GNUNET_PQ_result_spec_allow_null (
+        GNUNET_PQ_result_spec_string ("birthdate",
+                                      &birthdate),
+        NULL),
+      GNUNET_PQ_result_spec_timestamp ("collection_time",
+                                       &collection_time),
+      GNUNET_PQ_result_spec_timestamp ("expiration_time",
+                                       &expiration_time),
+      GNUNET_PQ_result_spec_variable_size ("encrypted_attributes",
+                                           &enc_attributes,
+                                           &enc_attributes_size),
+      GNUNET_PQ_result_spec_end
+    };
+
+    if (GNUNET_OK !=
+        GNUNET_PQ_extract_result (result,
+                                  rs,
+                                  i))
+    {
+      GNUNET_break (0);
+      ctx->status = GNUNET_SYSERR;
+      return;
+    }
+    ctx->cb (ctx->cb_cls,
+             ctx->h_payto,
+             provider,
+             birthdate,
+             collection_time,
+             expiration_time,
+             enc_attributes_size,
+             enc_attributes);
+    GNUNET_PQ_cleanup_result (rs);
+  }
+}
+
+
 enum GNUNET_DB_QueryStatus
 TEH_PG_select_kyc_attributes (
   void *cls,
@@ -33,6 +130,37 @@ TEH_PG_select_kyc_attributes (
   TALER_EXCHANGEDB_AttributeCallback cb,
   void *cb_cls)
 {
-  GNUNET_break (0); // FIXME: not implemeted!
-  return GNUNET_DB_STATUS_HARD_ERROR;
+  struct PostgresClosure *pg = cls;
+  struct GNUNET_PQ_QueryParam params[] = {
+    GNUNET_PQ_query_param_auto_from_type (h_payto),
+    GNUNET_PQ_query_param_end
+  };
+  struct GetAttributesContext ctx = {
+    .cb = cb,
+    .cb_cls = cb_cls,
+    .pg = pg,
+    .h_payto = h_payto,
+    .status = GNUNET_OK
+  };
+  enum GNUNET_DB_QueryStatus qs;
+
+  PREPARE (pg,
+           "select_kyc_attributes",
+           "SELECT "
+           " provider"
+           ",birthdate"
+           ",collection_time"
+           ",expiration_time"
+           ",encrypted_attributes"
+           " FROM kyc_attributes"
+           " WHERE h_payto=$1");
+  qs = GNUNET_PQ_eval_prepared_multi_select (
+    pg->conn,
+    "select_kyc_attributes",
+    params,
+    &get_attributes_cb,
+    &ctx);
+  if (GNUNET_OK != ctx.status)
+    return GNUNET_DB_STATUS_HARD_ERROR;
+  return qs;
 }
diff --git a/src/exchangedb/pg_select_satisfied_kyc_processes.c 
b/src/exchangedb/pg_select_satisfied_kyc_processes.c
index f2191581..e0d884ef 100644
--- a/src/exchangedb/pg_select_satisfied_kyc_processes.c
+++ b/src/exchangedb/pg_select_satisfied_kyc_processes.c
@@ -26,17 +26,8 @@
 #include "pg_helper.h"
 
 
-
-
-
-
-
-
-
-
-
 /**
- * Closure for #get_wire_fees_cb().
+ * Closure for #get_legitimizations_cb().
  */
 struct GetLegitimizationsContext
 {
@@ -105,7 +96,6 @@ get_legitimizations_cb (void *cls,
 }
 
 
-
 enum GNUNET_DB_QueryStatus
 TEH_PG_select_satisfied_kyc_processes (
   void *cls,
@@ -128,7 +118,7 @@ TEH_PG_select_satisfied_kyc_processes (
     .status = GNUNET_OK
   };
   enum GNUNET_DB_QueryStatus qs;
-   /* Used in #postgres_select_satisfied_kyc_processes() */
+
   PREPARE (pg,
            "get_satisfied_legitimizations",
            "SELECT "
@@ -136,7 +126,6 @@ TEH_PG_select_satisfied_kyc_processes (
            " FROM legitimization_processes"
            " WHERE h_payto=$1"
            "   AND expiration_time>=$2;");
-
   qs = GNUNET_PQ_eval_prepared_multi_select (
     pg->conn,
     "get_satisfied_legitimizations",
diff --git a/src/exchangedb/pg_select_similar_kyc_attributes.c 
b/src/exchangedb/pg_select_similar_kyc_attributes.c
index 27621837..a07f2a14 100644
--- a/src/exchangedb/pg_select_similar_kyc_attributes.c
+++ b/src/exchangedb/pg_select_similar_kyc_attributes.c
@@ -26,6 +26,98 @@
 #include "pg_helper.h"
 
 
+/**
+ * Closure for #get_similar_attributes_cb().
+ */
+struct GetAttributesContext
+{
+  /**
+   * Function to call per result.
+   */
+  TALER_EXCHANGEDB_AttributeCallback cb;
+
+  /**
+   * Closure for @e cb.
+   */
+  void *cb_cls;
+
+  /**
+   * Plugin context.
+   */
+  struct PostgresClosure *pg;
+
+  /**
+   * Flag set to #GNUNET_OK as long as everything is fine.
+   */
+  enum GNUNET_GenericReturnValue status;
+
+};
+
+
+/**
+ * Invoke the callback for each result.
+ *
+ * @param cls a `struct GetAttributesContext *`
+ * @param result SQL result
+ * @param num_results number of rows in @a result
+ */
+static void
+get_attributes_cb (void *cls,
+                   PGresult *result,
+                   unsigned int num_results)
+{
+  struct GetAttributesContext *ctx = cls;
+
+  for (unsigned int i = 0; i < num_results; i++)
+  {
+    struct TALER_PaytoHashP h_payto;
+    struct GNUNET_TIME_Timestamp collection_time;
+    struct GNUNET_TIME_Timestamp expiration_time;
+    size_t enc_attributes_size;
+    void *enc_attributes;
+    char *provider;
+    char *birthdate = NULL;
+    struct GNUNET_PQ_ResultSpec rs[] = {
+      GNUNET_PQ_result_spec_auto_from_type ("h_payto",
+                                            &h_payto),
+      GNUNET_PQ_result_spec_string ("provider",
+                                    &provider),
+      GNUNET_PQ_result_spec_allow_null (
+        GNUNET_PQ_result_spec_string ("birthdate",
+                                      &birthdate),
+        NULL),
+      GNUNET_PQ_result_spec_timestamp ("collection_time",
+                                       &collection_time),
+      GNUNET_PQ_result_spec_timestamp ("expiration_time",
+                                       &expiration_time),
+      GNUNET_PQ_result_spec_variable_size ("encrypted_attributes",
+                                           &enc_attributes,
+                                           &enc_attributes_size),
+      GNUNET_PQ_result_spec_end
+    };
+
+    if (GNUNET_OK !=
+        GNUNET_PQ_extract_result (result,
+                                  rs,
+                                  i))
+    {
+      GNUNET_break (0);
+      ctx->status = GNUNET_SYSERR;
+      return;
+    }
+    ctx->cb (ctx->cb_cls,
+             &h_payto,
+             provider,
+             birthdate,
+             collection_time,
+             expiration_time,
+             enc_attributes_size,
+             enc_attributes);
+    GNUNET_PQ_cleanup_result (rs);
+  }
+}
+
+
 enum GNUNET_DB_QueryStatus
 TEH_PG_select_similar_kyc_attributes (
   void *cls,
@@ -33,6 +125,37 @@ TEH_PG_select_similar_kyc_attributes (
   TALER_EXCHANGEDB_AttributeCallback cb,
   void *cb_cls)
 {
-  GNUNET_break (0); // FIXME: not implemeted!
-  return GNUNET_DB_STATUS_HARD_ERROR;
+  struct PostgresClosure *pg = cls;
+  struct GNUNET_PQ_QueryParam params[] = {
+    GNUNET_PQ_query_param_auto_from_type (kyc_prox),
+    GNUNET_PQ_query_param_end
+  };
+  struct GetAttributesContext ctx = {
+    .cb = cb,
+    .cb_cls = cb_cls,
+    .pg = pg,
+    .status = GNUNET_OK
+  };
+  enum GNUNET_DB_QueryStatus qs;
+
+  PREPARE (pg,
+           "select_similar_kyc_attributes",
+           "SELECT "
+           " h_payto"
+           ",provider"
+           ",birthdate"
+           ",collection_time"
+           ",expiration_time"
+           ",encrypted_attributes"
+           " FROM kyc_attributes"
+           " WHERE kyc_prox=$1");
+  qs = GNUNET_PQ_eval_prepared_multi_select (
+    pg->conn,
+    "select_similar_kyc_attributes",
+    params,
+    &get_attributes_cb,
+    &ctx);
+  if (GNUNET_OK != ctx.status)
+    return GNUNET_DB_STATUS_HARD_ERROR;
+  return qs;
 }

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