summaryrefslogtreecommitdiff
path: root/src/exchangedb/plugin_exchangedb_postgres.c
diff options
context:
space:
mode:
authorMarcello Stanisci <marcello.stanisci@inria.fr>2016-10-17 01:48:59 +0200
committerMarcello Stanisci <marcello.stanisci@inria.fr>2016-10-17 01:48:59 +0200
commit448a8be76d41e97222711b83de777e1b332a3964 (patch)
treea01fb9833c4340223ff446b20e7ab2668b7a4d2e /src/exchangedb/plugin_exchangedb_postgres.c
parentecce56c052fd3c580d4b85fb2b60270ea51cca0e (diff)
downloadexchange-448a8be76d41e97222711b83de777e1b332a3964.tar.gz
exchange-448a8be76d41e97222711b83de777e1b332a3964.tar.bz2
exchange-448a8be76d41e97222711b83de777e1b332a3964.zip
starting with #4709
Diffstat (limited to 'src/exchangedb/plugin_exchangedb_postgres.c')
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c59
1 files changed, 58 insertions, 1 deletions
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index c53b0a25..972d7080 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -921,6 +921,29 @@ postgres_prepare (PGconn *db_conn)
" )",
3, NULL);
+ /* Fetch an existing deposit request, used to ensure idempotency
+ during /deposit processing. Used in #postgres_have_deposit(). */
+ PREPARE ("audit_get_deposits_incr",
+ "SELECT"
+ " amount_with_fee_val"
+ ",amount_with_fee_frac"
+ ",amount_with_fee_curr"
+ ",timestamp"
+ ",merchant_pub"
+ ",coin_pub"
+ ",coin_sig"
+ ",transaction_id"
+ ",refund_deadline"
+ ",wire_deadline"
+ ",h_contract"
+ ",wire"
+ " FROM deposits"
+ " WHERE ("
+ " (deposit_serial_id>=$1)"
+ " )"
+ " ORDER BY deposit_serial_id",
+ 1, NULL);
+
/* Fetch an existing deposit request.
Used in #postgres_wire_lookup_deposit_wtid(). */
PREPARE ("get_deposit_for_wtid",
@@ -1407,7 +1430,7 @@ postgres_insert_denomination_info (void *cls,
&issue->properties.fee_refresh));
GNUNET_assert (GNUNET_YES ==
TALER_amount_cmp_currency_nbo (&issue->properties.value,
- &issue->properties.fee_refund));
+ &issue->properties.fee_refund));
result = GNUNET_PQ_exec_prepared (session->conn,
"denomination_insert",
@@ -4262,6 +4285,40 @@ postgres_select_deposits_above_serial_id (void *cls,
TALER_EXCHANGEDB_DepositCallback cb,
void *cb_cls)
{
+ struct GNUNET_PQ_QueryParam params[] = {
+ GNUNET_PQ_query_param_uint64 (&serial_id),
+ GNUNET_PQ_query_param_end
+ };
+ PGresult *result;
+ result = GNUNET_PQ_exec_prepared (session->conn,
+ "audit_get_deposits_incr",
+ params);
+ if (PGRES_COMMAND_OK !=
+ PQresultStatus (result))
+ {
+ BREAK_DB_ERR (result);
+ PQclear (result);
+ return GNUNET_SYSERR;
+ }
+ int nrows;
+ int i;
+
+ nrows = PQntuples (result);
+ if (0 == nrows)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "audit_get_deposit_incr() returned 0 matching rows\n");
+ PQclear (result);
+ return GNUNET_NO;
+ }
+ for (i=0;i<nrows;i++)
+ {
+
+ }
+
+ PQclear (result);
+ return GNUNET_OK;
+
GNUNET_break (0); // FIXME: not implemented
return GNUNET_SYSERR;
}