diff options
Diffstat (limited to 'src/exchangedb')
| -rw-r--r-- | src/exchangedb/perf_taler_exchangedb_interpreter.c | 12 | ||||
| -rw-r--r-- | src/exchangedb/plugin_exchangedb_postgres.c | 145 | ||||
| -rw-r--r-- | src/exchangedb/test_exchangedb.c | 6 | 
3 files changed, 50 insertions, 113 deletions
| diff --git a/src/exchangedb/perf_taler_exchangedb_interpreter.c b/src/exchangedb/perf_taler_exchangedb_interpreter.c index 7a591580..7ec958c4 100644 --- a/src/exchangedb/perf_taler_exchangedb_interpreter.c +++ b/src/exchangedb/perf_taler_exchangedb_interpreter.c @@ -1465,16 +1465,16 @@ interpret (struct PERF_TALER_EXCHANGEDB_interpreter_state *state)        case PERF_TALER_EXCHANGEDB_CMD_GET_DENOMINATION:          {            unsigned int denom_index; -          int ret; +          enum GNUNET_DB_QueryStatus qs;            struct PERF_TALER_EXCHANGEDB_Data *data;            denom_index = state->cmd[state->i].details.get_denomination.index_denom;            data = &state->cmd[denom_index].exposed; -          ret = state->plugin->get_denomination_info (state->plugin->cls, -                                                      state->session, -                                                      &data->data.dki->denom_pub, -                                                      &data->data.dki->issue); -          GNUNET_assert (GNUNET_SYSERR != ret); +          qs = state->plugin->get_denomination_info (state->plugin->cls, +						     state->session, +						     &data->data.dki->denom_pub, +						     &data->data.dki->issue); +          GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs);          }          break; diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index 9df7fc4f..2a47f250 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -1826,89 +1826,57 @@ postgres_insert_denomination_info (void *cls,   * @param cls the @e cls of this struct with the plugin-specific state   * @param session connection to use   * @param denom_pub the public key used for signing coins of this denomination - * @param[out] issue set to issue information with value, fees and other info about the coin, can be NULL - * @return #GNUNET_OK on success; #GNUNET_NO if no record was found, #GNUNET_SYSERR on failure + * @param[out] issue set to issue information with value, fees and other info about the coin + * @return transaction status code   */ -static int +static enum GNUNET_DB_QueryStatus  postgres_get_denomination_info (void *cls,                                  struct TALER_EXCHANGEDB_Session *session,                                  const struct TALER_DenominationPublicKey *denom_pub,                                  struct TALER_EXCHANGEDB_DenominationKeyInformationP *issue)  { -  PGresult *result; +  enum GNUNET_DB_QueryStatus qs;    struct GNUNET_PQ_QueryParam params[] = {      GNUNET_PQ_query_param_rsa_public_key (denom_pub->rsa_public_key),      GNUNET_PQ_query_param_end    }; +  struct GNUNET_PQ_ResultSpec rs[] = { +    GNUNET_PQ_result_spec_auto_from_type ("master_pub", +					  &issue->properties.master), +    GNUNET_PQ_result_spec_auto_from_type ("master_sig", +					  &issue->signature), +    GNUNET_PQ_result_spec_absolute_time_nbo ("valid_from", +					     &issue->properties.start), +    GNUNET_PQ_result_spec_absolute_time_nbo ("expire_withdraw", +					     &issue->properties.expire_withdraw), +    GNUNET_PQ_result_spec_absolute_time_nbo ("expire_deposit", +					     &issue->properties.expire_deposit), +    GNUNET_PQ_result_spec_absolute_time_nbo ("expire_legal", +					     &issue->properties.expire_legal), +    TALER_PQ_result_spec_amount_nbo ("coin", +				     &issue->properties.value), +    TALER_PQ_result_spec_amount_nbo ("fee_withdraw", +				     &issue->properties.fee_withdraw), +    TALER_PQ_result_spec_amount_nbo ("fee_deposit", +				     &issue->properties.fee_deposit), +    TALER_PQ_result_spec_amount_nbo ("fee_refresh", +				     &issue->properties.fee_refresh), +    TALER_PQ_result_spec_amount_nbo ("fee_refund", +				     &issue->properties.fee_refund), +    GNUNET_PQ_result_spec_end +  }; -  result = GNUNET_PQ_exec_prepared (session->conn, -                                    "denomination_get", -                                    params); -  if (PGRES_TUPLES_OK != PQresultStatus (result)) -  { -    QUERY_ERR (result, -               session->conn); -    PQclear (result); -    return GNUNET_SYSERR; -  } -  if (0 == PQntuples (result)) -  { -    PQclear (result); -    return GNUNET_NO; -  } -  if (1 != PQntuples (result)) -  { -    GNUNET_break (0); -    PQclear (result); -    return GNUNET_SYSERR; -  } -  if (NULL == issue) -  { -    PQclear (result); -    return GNUNET_OK; -  } -  { -    struct GNUNET_PQ_ResultSpec rs[] = { -      GNUNET_PQ_result_spec_auto_from_type ("master_pub", -                                            &issue->properties.master), -      GNUNET_PQ_result_spec_auto_from_type ("master_sig", -                                            &issue->signature), -      GNUNET_PQ_result_spec_absolute_time_nbo ("valid_from", -                                               &issue->properties.start), -      GNUNET_PQ_result_spec_absolute_time_nbo ("expire_withdraw", -                                               &issue->properties.expire_withdraw), -      GNUNET_PQ_result_spec_absolute_time_nbo ("expire_deposit", -                                               &issue->properties.expire_deposit), -      GNUNET_PQ_result_spec_absolute_time_nbo ("expire_legal", -                                               &issue->properties.expire_legal), -      TALER_PQ_result_spec_amount_nbo ("coin", -                                       &issue->properties.value), -      TALER_PQ_result_spec_amount_nbo ("fee_withdraw", -                                       &issue->properties.fee_withdraw), -      TALER_PQ_result_spec_amount_nbo ("fee_deposit", -                                       &issue->properties.fee_deposit), -      TALER_PQ_result_spec_amount_nbo ("fee_refresh", -                                       &issue->properties.fee_refresh), -      TALER_PQ_result_spec_amount_nbo ("fee_refund", -                                       &issue->properties.fee_refund), -      GNUNET_PQ_result_spec_end -    }; - -    if (GNUNET_OK != -	GNUNET_PQ_extract_result (result, -				  rs, -				  0)) -    { -      PQclear (result); -      return GNUNET_SYSERR; -    } -  } -  PQclear (result); +  qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn, +						 "denomination_get", +						 params, +						 rs); +  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs) +    return qs;    issue->properties.purpose.size = htonl (sizeof (struct TALER_DenominationKeyValidityPS));    issue->properties.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_DENOMINATION_KEY_VALIDITY);    GNUNET_CRYPTO_rsa_public_key_hash (denom_pub->rsa_public_key,                                       &issue->properties.denom_hash); -  return GNUNET_OK; +  return qs;  } @@ -6173,54 +6141,23 @@ postgres_get_reserve_by_h_blind (void *cls,   * @param session a session   * @param denom_pub_hash hash of the revoked denomination key   * @param master_sig signature affirming the revocation - * @return #GNUNET_OK on success, - *         #GNUNET_NO if the entry already exists (transaction must be rolled back!) - *         #GNUNET_SYSERR on DB errors + * @return transaction status code   */ -static int +static enum GNUNET_DB_QueryStatus  postgres_insert_denomination_revocation (void *cls,                                           struct TALER_EXCHANGEDB_Session *session,                                           const struct GNUNET_HashCode *denom_pub_hash,                                           const struct TALER_MasterSignatureP *master_sig)  { -  PGresult *result; -  int ret;    struct GNUNET_PQ_QueryParam params[] = {      GNUNET_PQ_query_param_auto_from_type (denom_pub_hash),      GNUNET_PQ_query_param_auto_from_type (master_sig),      GNUNET_PQ_query_param_end    }; -  result = GNUNET_PQ_exec_prepared (session->conn, -                                   "denomination_revocation_insert", -                                   params); -  if (PGRES_COMMAND_OK != PQresultStatus (result)) -  { -    const char *efield; - -    efield = PQresultErrorField (result, -				 PG_DIAG_SQLSTATE); -    /* FIXME: what about serialization errors? */ -    if ( (PGRES_FATAL_ERROR == PQresultStatus(result)) && -	 (NULL != strstr (PQ_DIAG_SQLSTATE_UNIQUE_VIOLATION, -			  efield)) ) -    { -      /* This means we had the same reserve/justification/details -	 before */ -      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, -                  "Uniqueness violation, revocation details already known\n"); -      PQclear (result); -      return GNUNET_NO; -    } -    ret = GNUNET_SYSERR; -    BREAK_DB_ERR (result, session->conn); -  } -  else -  { -    ret = GNUNET_OK; -  } -  PQclear (result); -  return ret; +  return GNUNET_PQ_eval_prepared_non_select (session->conn, +					     "denomination_revocation_insert", +					     params);  } diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c index 1b3797dd..f7983924 100644 --- a/src/exchangedb/test_exchangedb.c +++ b/src/exchangedb/test_exchangedb.c @@ -269,7 +269,7 @@ create_denom_key_pair (unsigned int size,      destroy_denom_key_pair (dkp);      return NULL;    } -  if (GNUNET_OK != +  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=        plugin->get_denomination_info (plugin->cls,                                       session,                                       &dki.denom_pub, @@ -1124,7 +1124,7 @@ test_gc (struct TALER_EXCHANGEDB_Session *session)      destroy_denom_key_pair (dkp);      return GNUNET_SYSERR;    } -  if (GNUNET_OK == +  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=        plugin->get_denomination_info (plugin->cls,                                       session,                                       &dkp->pub, @@ -1905,7 +1905,7 @@ run (void *cls)      struct TALER_MasterSignatureP msig;      uint64_t rev_rowid; -    FAILIF (GNUNET_OK != +    FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=              plugin->get_denomination_revocation (plugin->cls,                                                   session,                                                   &dkp_pub_hash, | 
