gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: [pq] use GNUNET_PQ_get_oid_by_na


From: gnunet
Subject: [taler-exchange] branch master updated: [pq] use GNUNET_PQ_get_oid_by_name consistently
Date: Sun, 30 Jul 2023 00:45:30 +0200

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

oec pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new f0db6d55 [pq] use GNUNET_PQ_get_oid_by_name consistently
f0db6d55 is described below

commit f0db6d55d72d7985e5a8b1e5c4a874a415a1234f
Author: Özgür Kesim <oec-taler@kesim.org>
AuthorDate: Sun Jul 30 00:44:38 2023 +0200

    [pq] use GNUNET_PQ_get_oid_by_name consistently
---
 src/exchangedb/plugin_exchangedb_postgres.c |   6 --
 src/include/taler_pq_lib.h                  |  37 ++--------
 src/pq/Makefile.am                          |   1 -
 src/pq/pq_common.h                          |   8 ++-
 src/pq/pq_composite_types.c                 |  57 ----------------
 src/pq/pq_query_helper.c                    | 100 ++++++++++++++++++----------
 src/pq/pq_result_helper.c                   |  33 +++++----
 src/pq/test_pq.c                            |   9 ---
 8 files changed, 94 insertions(+), 157 deletions(-)

diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 4f8959ff..503a699d 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -779,12 +779,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
   plugin->batch_ensure_coin_known
     = &TEH_PG_batch_ensure_coin_known;
 
-  if (GNUNET_OK != TALER_PQ_load_oids_for_composite_types (pg->conn))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Failed to load OIDs for composite types\n");
-  }
-
   return plugin;
 }
 
diff --git a/src/include/taler_pq_lib.h b/src/include/taler_pq_lib.h
index fddfd2a2..4b2a1f5d 100644
--- a/src/include/taler_pq_lib.h
+++ b/src/include/taler_pq_lib.h
@@ -30,31 +30,6 @@
 #include <gnunet/gnunet_pq_lib.h>
 #include "taler_util.h"
 
-/**
- * Enumerates the composite types that Taler defines in Postgres.
- * The corresponding OIDs (which are assigned by postgres at time of
- * declaration) are stored in TALER_PQ_CompositeOIDs.
- */
-enum TALER_PQ_CompositeType
-{
-  TALER_PQ_CompositeAmount,
-  TALER_PQ_CompositeMAX /* MUST be last */
-};
-
-/**
- * The correspondence of the Composite types and their OID in Postgres
- */
-extern Oid TALER_PQ_CompositeOIDs[TALER_PQ_CompositeMAX];
-
-/**
- * Initialize the list of OIDs in TALER_PQ_CompositeOIDs.  MUST be called
- * before any composite type is used in arrays-specs/-params.
- *
- * @return GNUNET_SYSERR on failure
- */
-enum GNUNET_GenericReturnValue
-TALER_PQ_load_oids_for_composite_types (struct GNUNET_PQ_Context *db);
-
 /**
  * Generate query parameter for a currency, consisting of the three
  * components "value", "fraction" and "currency" in this order. The
@@ -177,7 +152,7 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_array_blinded_denom_sig (
   size_t num,
   const struct TALER_BlindedDenominationSignature *denom_sigs,
-  const struct GNUNET_PQ_Context *db
+  struct GNUNET_PQ_Context *db
   );
 
 /**
@@ -191,7 +166,7 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_array_blinded_coin_hash (
   size_t num,
   const struct TALER_BlindedCoinHashP *coin_evs,
-  const struct GNUNET_PQ_Context *db);
+  struct GNUNET_PQ_Context *db);
 
 /**
  * Generate query parameter for an array of mounts
@@ -332,7 +307,7 @@ TALER_PQ_result_spec_json (const char *name,
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_blinded_denom_sig (
-  const struct GNUNET_PQ_Context *db,
+  struct GNUNET_PQ_Context *db,
   const char *name,
   size_t *num,
   struct TALER_BlindedDenominationSignature **denom_sigs);
@@ -348,7 +323,7 @@ TALER_PQ_result_spec_array_blinded_denom_sig (
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_blinded_coin_hash (
-  const struct GNUNET_PQ_Context *db,
+  struct GNUNET_PQ_Context *db,
   const char *name,
   size_t *num,
   struct TALER_BlindedCoinHashP **h_coin_evs);
@@ -364,7 +339,7 @@ TALER_PQ_result_spec_array_blinded_coin_hash (
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_denom_hash (
-  const struct GNUNET_PQ_Context *db,
+  struct GNUNET_PQ_Context *db,
   const char *name,
   size_t *num,
   struct TALER_DenominationHashP **denom_hs);
@@ -381,7 +356,7 @@ TALER_PQ_result_spec_array_denom_hash (
  */
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_amount (
-  struct GNUNET_PQ_Context *db, /* not const because we need to query 
dynamically */
+  struct GNUNET_PQ_Context *db,
   const char *name,
   const char *currency,
   size_t *num,
diff --git a/src/pq/Makefile.am b/src/pq/Makefile.am
index 23fd34db..591aeae1 100644
--- a/src/pq/Makefile.am
+++ b/src/pq/Makefile.am
@@ -11,7 +11,6 @@ lib_LTLIBRARIES = \
 
 libtalerpq_la_SOURCES = \
   pq_common.h \
-  pq_composite_types.c \
   pq_query_helper.c \
   pq_result_helper.c
 libtalerpq_la_LIBADD = \
diff --git a/src/pq/pq_common.h b/src/pq/pq_common.h
index 26137f42..d479ce5b 100644
--- a/src/pq/pq_common.h
+++ b/src/pq/pq_common.h
@@ -67,11 +67,13 @@ struct TALER_PQ_Amount_P
  *
  * @param db postgres-context of type `struct GNUNET_PQ_Context *`
  * @param amount amount of type `struct TALER_Amount *`
+ * @param oid_v OID of the INT8 type in postgres
+ * @param oid_f OID of the INT4 type in postgres
  */
-#define MAKE_TALER_PQ_AMOUNT_P(db,amount) \
+#define MAKE_TALER_PQ_AMOUNT_P(db,amount,oid_v,oid_f) \
   { \
-    .oid_v = htonl (GNUNET_PQ_get_oid ((db), GNUNET_PQ_DATATYPE_INT8)), \
-    .oid_f = htonl (GNUNET_PQ_get_oid ((db), GNUNET_PQ_DATATYPE_INT4)), \
+    .oid_v = htonl (oid_v), \
+    .oid_f = htonl (oid_f), \
     .sz_v = htonl (sizeof((amount)->value)), \
     .sz_f = htonl (sizeof((amount)->fraction)), \
     .v = GNUNET_htonll ((amount)->value), \
diff --git a/src/pq/pq_composite_types.c b/src/pq/pq_composite_types.c
deleted file mode 100644
index ed51ef42..00000000
--- a/src/pq/pq_composite_types.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-  This file is part of TALER
-  Copyright (C) 2023 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 pq/pq_composite_types.c
- * @brief helper functions for Taler-specific libpq (PostGres) interactions 
with composite types
- * @author Özgür Kesim
- */
-#include "platform.h"
-#include <gnunet/gnunet_common.h>
-#include <gnunet/gnunet_util_lib.h>
-#include <gnunet/gnunet_pq_lib.h>
-#include "taler_pq_lib.h"
-#include "pq_common.h"
-
-Oid TALER_PQ_CompositeOIDs[TALER_PQ_CompositeMAX] = {0};
-
-enum GNUNET_GenericReturnValue
-TALER_PQ_load_oids_for_composite_types (
-  struct GNUNET_PQ_Context *db)
-{
-  static char *names[] = {
-    [TALER_PQ_CompositeAmount] = "taler_amount"
-  };
-  size_t num = sizeof(names) / sizeof(names[0]);
-
-  GNUNET_static_assert (num == TALER_PQ_CompositeMAX);
-
-  for (size_t i = 0; i < num; i++)
-  {
-    enum GNUNET_GenericReturnValue ret;
-    enum TALER_PQ_CompositeType typ = i;
-    ret = GNUNET_PQ_get_oid_by_name (db,
-                                     names[i],
-                                     &TALER_PQ_CompositeOIDs[typ]);
-    if (GNUNET_OK != ret)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Failed to load OID for type %s\n",
-                  names[i]);
-      return GNUNET_SYSERR;
-    }
-  }
-  return GNUNET_OK;
-}
diff --git a/src/pq/pq_query_helper.c b/src/pq/pq_query_helper.c
index a21b0b1d..a1632ac6 100644
--- a/src/pq/pq_query_helper.c
+++ b/src/pq/pq_query_helper.c
@@ -175,7 +175,7 @@ qconv_amount_tuple (void *cls,
                     void *scratch[],
                     unsigned int scratch_length)
 {
-  const struct GNUNET_PQ_Context *db = cls;
+  struct GNUNET_PQ_Context *db = cls;
   const struct TALER_Amount *amount = data;
   size_t sz;
 
@@ -188,18 +188,29 @@ qconv_amount_tuple (void *cls,
 
   {
     char *out;
-    struct TALER_PQ_Amount_P d = MAKE_TALER_PQ_AMOUNT_P (db, amount);
+    Oid oid_v, oid_f;
+    GNUNET_assert (GNUNET_OK ==
+                   GNUNET_PQ_get_oid_by_name (db, "int8", &oid_v));
+    GNUNET_assert (GNUNET_OK ==
+                   GNUNET_PQ_get_oid_by_name (db, "int4", &oid_f));
+
+    {
+      struct TALER_PQ_Amount_P d = MAKE_TALER_PQ_AMOUNT_P (db,
+                                                           amount,
+                                                           oid_v,
+                                                           oid_f);
 
-    sz = sizeof(uint32_t); /* number of elements in tuple */
-    sz += sizeof(d);
+      sz = sizeof(uint32_t); /* number of elements in tuple */
+      sz += sizeof(d);
 
-    out = GNUNET_malloc (sz);
-    scratch[0] = out;
+      out = GNUNET_malloc (sz);
+      scratch[0] = out;
 
-    *(uint32_t *) out = htonl (2);
-    out += sizeof(uint32_t);
+      *(uint32_t *) out = htonl (2);
+      out += sizeof(uint32_t);
 
-    *(struct TALER_PQ_Amount_P*) out = d;
+      *(struct TALER_PQ_Amount_P*) out = d;
+    }
 
   }
 
@@ -795,7 +806,7 @@ struct qconv_array_cls
   /**
    * db context, needed for OID-lookup of basis-types
    */
-  const struct GNUNET_PQ_Context *db;
+  struct GNUNET_PQ_Context *db;
 };
 
 /**
@@ -972,15 +983,28 @@ qconv_array (
       case TALER_PQ_array_of_amount:
         {
           const struct TALER_Amount *amounts = data;
-          struct TALER_PQ_Amount_P am = MAKE_TALER_PQ_AMOUNT_P (meta->db,
-                                                                &amounts[i]);
-
-          *(uint32_t *) out = htonl (2); /* number of elements in tuple */
-          out += sizeof(uint32_t);
-          sz -= sizeof(uint32_t);
-          GNUNET_memcpy (out,
-                         &am,
-                         sizeof(am));
+          Oid oid_v, oid_f;
+          GNUNET_assert (GNUNET_OK ==
+                         GNUNET_PQ_get_oid_by_name (meta->db,
+                                                    "int8",
+                                                    &oid_v));
+          GNUNET_assert (GNUNET_OK ==
+                         GNUNET_PQ_get_oid_by_name (meta->db,
+                                                    "int4",
+                                                    &oid_f));
+          {
+            struct TALER_PQ_Amount_P am = MAKE_TALER_PQ_AMOUNT_P (meta->db,
+                                                                  &amounts[i],
+                                                                  oid_v,
+                                                                  oid_f);
+
+            *(uint32_t *) out = htonl (2); /* number of elements in tuple */
+            out += sizeof(uint32_t);
+            sz -= sizeof(uint32_t);
+            GNUNET_memcpy (out,
+                           &am,
+                           sizeof(am));
+          }
           break;
         }
       case TALER_PQ_array_of_blinded_denom_sig:
@@ -1086,7 +1110,7 @@ query_param_array_generic (
   size_t same_size,
   enum TALER_PQ_ArrayType typ,
   Oid oid,
-  const struct GNUNET_PQ_Context *db)
+  struct GNUNET_PQ_Context *db)
 {
   struct qconv_array_cls *meta = GNUNET_new (struct qconv_array_cls);
   meta->typ = typ;
@@ -1113,16 +1137,18 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_array_blinded_denom_sig (
   size_t num,
   const struct TALER_BlindedDenominationSignature *denom_sigs,
-  const struct GNUNET_PQ_Context *db)
+  struct GNUNET_PQ_Context *db)
 {
+  Oid oid;
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db, "bytea", &oid));
   return query_param_array_generic (num,
                                     true,
                                     denom_sigs,
                                     NULL,
                                     0,
                                     TALER_PQ_array_of_blinded_denom_sig,
-                                    GNUNET_PQ_get_oid (db,
-                                                       
GNUNET_PQ_DATATYPE_BYTEA),
+                                    oid,
                                     NULL);
 }
 
@@ -1131,16 +1157,18 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_array_blinded_coin_hash (
   size_t num,
   const struct TALER_BlindedCoinHashP *coin_hs,
-  const struct GNUNET_PQ_Context *db)
+  struct GNUNET_PQ_Context *db)
 {
+  Oid oid;
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db, "bytea", &oid));
   return query_param_array_generic (num,
                                     true,
                                     coin_hs,
                                     NULL,
                                     sizeof(struct TALER_BlindedCoinHashP),
                                     TALER_PQ_array_of_blinded_coin_hash,
-                                    GNUNET_PQ_get_oid (db,
-                                                       
GNUNET_PQ_DATATYPE_BYTEA),
+                                    oid,
                                     NULL);
 }
 
@@ -1149,16 +1177,18 @@ struct GNUNET_PQ_QueryParam
 TALER_PQ_query_param_array_denom_hash (
   size_t num,
   const struct TALER_DenominationHashP *denom_hs,
-  const struct GNUNET_PQ_Context *db)
+  struct GNUNET_PQ_Context *db)
 {
+  Oid oid;
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db, "bytea", &oid));
   return query_param_array_generic (num,
                                     true,
                                     denom_hs,
                                     NULL,
                                     sizeof(struct TALER_DenominationHashP),
                                     TALER_PQ_array_of_denom_hash,
-                                    GNUNET_PQ_get_oid (db,
-                                                       
GNUNET_PQ_DATATYPE_BYTEA),
+                                    oid,
                                     NULL);
 }
 
@@ -1169,19 +1199,17 @@ TALER_PQ_query_param_array_amount (
   const struct TALER_Amount *amounts,
   struct GNUNET_PQ_Context *db)
 {
-  if (TALER_PQ_CompositeOIDs[0] == 0)
-    GNUNET_assert (GNUNET_OK ==
-                   TALER_PQ_load_oids_for_composite_types (db));
-
+  Oid oid;
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db, "taler_amount", &oid));
   return query_param_array_generic (
     num,
     true,
     amounts,
     NULL,
-    sizeof(uint32_t) /* the # of elements in the tuple, here: 2 */
-    + sizeof(struct TALER_PQ_Amount_P),
+    sizeof(uint32_t) + sizeof(struct TALER_PQ_Amount_P),
     TALER_PQ_array_of_amount,
-    TALER_PQ_CompositeOIDs[TALER_PQ_CompositeAmount],
+    oid,
     db);
 }
 
diff --git a/src/pq/pq_result_helper.c b/src/pq/pq_result_helper.c
index 52e42562..ed8100a1 100644
--- a/src/pq/pq_result_helper.c
+++ b/src/pq/pq_result_helper.c
@@ -1385,7 +1385,7 @@ array_cleanup (void *cls,
 
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_blinded_denom_sig (
-  const struct GNUNET_PQ_Context *db,
+  struct GNUNET_PQ_Context *db,
   const char *name,
   size_t *num,
   struct TALER_BlindedDenominationSignature **denom_sigs)
@@ -1394,8 +1394,10 @@ TALER_PQ_result_spec_array_blinded_denom_sig (
 
   info->num = num;
   info->typ = TALER_PQ_array_of_blinded_denom_sig;
-  info->oid = GNUNET_PQ_get_oid (db,
-                                 GNUNET_PQ_DATATYPE_BYTEA);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db,
+                                            "bytea",
+                                            &info->oid));
 
   struct GNUNET_PQ_ResultSpec res = {
     .conv = extract_array_generic,
@@ -1410,7 +1412,7 @@ TALER_PQ_result_spec_array_blinded_denom_sig (
 
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_blinded_coin_hash (
-  const struct GNUNET_PQ_Context *db,
+  struct GNUNET_PQ_Context *db,
   const char *name,
   size_t *num,
   struct TALER_BlindedCoinHashP **h_coin_evs)
@@ -1419,8 +1421,10 @@ TALER_PQ_result_spec_array_blinded_coin_hash (
 
   info->num = num;
   info->typ = TALER_PQ_array_of_blinded_coin_hash;
-  info->oid = GNUNET_PQ_get_oid (db,
-                                 GNUNET_PQ_DATATYPE_BYTEA);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db,
+                                            "bytea",
+                                            &info->oid));
 
   struct GNUNET_PQ_ResultSpec res = {
     .conv = extract_array_generic,
@@ -1435,7 +1439,7 @@ TALER_PQ_result_spec_array_blinded_coin_hash (
 
 struct GNUNET_PQ_ResultSpec
 TALER_PQ_result_spec_array_denom_hash (
-  const struct GNUNET_PQ_Context *db,
+  struct GNUNET_PQ_Context *db,
   const char *name,
   size_t *num,
   struct TALER_DenominationHashP **denom_hs)
@@ -1444,8 +1448,10 @@ TALER_PQ_result_spec_array_denom_hash (
 
   info->num = num;
   info->typ = TALER_PQ_array_of_denom_hash;
-  info->oid = GNUNET_PQ_get_oid (db,
-                                 GNUNET_PQ_DATATYPE_BYTEA);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db,
+                                            "bytea",
+                                            &info->oid));
 
   struct GNUNET_PQ_ResultSpec res = {
     .conv = extract_array_generic,
@@ -1466,16 +1472,15 @@ TALER_PQ_result_spec_array_amount (
   size_t *num,
   struct TALER_Amount **amounts)
 {
-  if (TALER_PQ_CompositeOIDs[0] == 0)
-    GNUNET_assert (GNUNET_OK ==
-                   TALER_PQ_load_oids_for_composite_types (db));
-
   struct ArrayResultCls *info = GNUNET_new (struct ArrayResultCls);
 
   info->num = num;
   info->typ = TALER_PQ_array_of_amount;
-  info->oid = TALER_PQ_CompositeOIDs[TALER_PQ_CompositeAmount];
   info->db = db;
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_PQ_get_oid_by_name (db,
+                                            "taler_amount",
+                                            &info->oid));
 
   {
     size_t clen = GNUNET_MIN (TALER_CURRENCY_LEN - 1,
diff --git a/src/pq/test_pq.c b/src/pq/test_pq.c
index a09e500f..218d9ad2 100644
--- a/src/pq/test_pq.c
+++ b/src/pq/test_pq.c
@@ -244,15 +244,6 @@ main (int argc,
     return 1;
   }
 
-  ret = TALER_PQ_load_oids_for_composite_types (conn);
-  if (GNUNET_OK != ret)
-  {
-    fprintf (stderr,
-             "Failed to load oids for composites\n");
-    GNUNET_PQ_disconnect (conn);
-    return 1;
-  }
-
   ret = run_queries (conn);
   {
     struct GNUNET_PQ_ExecuteStatement ds[] = {

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