aboutsummaryrefslogtreecommitdiff
path: root/src/exchangedb/pg_select_refunds_by_coin.c
diff options
context:
space:
mode:
authorJoseph <Joseph.xu@efrei.net>2023-01-23 07:57:34 -0500
committerJoseph <Joseph.xu@efrei.net>2023-01-23 07:57:54 -0500
commit54fa07f5c7be025ee1a241deabe4a5dbcca61599 (patch)
tree28b5572dc0f18233236ea3b6872c82ae5b261880 /src/exchangedb/pg_select_refunds_by_coin.c
parenta273b176da448cd27374acb94feee22c22dd8527 (diff)
downloadexchange-54fa07f5c7be025ee1a241deabe4a5dbcca61599.tar.xz
tests for refunds_by_coin and ready_deposit
Diffstat (limited to 'src/exchangedb/pg_select_refunds_by_coin.c')
-rw-r--r--src/exchangedb/pg_select_refunds_by_coin.c196
1 files changed, 179 insertions, 17 deletions
diff --git a/src/exchangedb/pg_select_refunds_by_coin.c b/src/exchangedb/pg_select_refunds_by_coin.c
index b9db2b709..255cac342 100644
--- a/src/exchangedb/pg_select_refunds_by_coin.c
+++ b/src/exchangedb/pg_select_refunds_by_coin.c
@@ -112,17 +112,47 @@ TEH_PG_select_refunds_by_coin (
GNUNET_PQ_query_param_auto_from_type (h_contract),
GNUNET_PQ_query_param_end
};
+ struct GNUNET_PQ_QueryParam params5[] = {
+ GNUNET_PQ_query_param_auto_from_type (coin_pub),
+ GNUNET_PQ_query_param_end
+ };
+
struct SelectRefundContext srctx = {
.cb = cb,
.cb_cls = cb_cls,
.pg = pg,
.status = GNUNET_OK
};
+ static int percent_refund = -2;
+ const char *query;
+ struct GNUNET_PQ_QueryParam *xparams = params;
- if (NULL == getenv ("NEW_LOGIC"))
+ if (-2 == percent_refund)
{
+ const char *mode = getenv ("NEW_LOGIC");
+ char dummy;
+
+ if ( (NULL==mode) ||
+ (1 != sscanf (mode,
+ "%d%c",
+ &percent_refund,
+ &dummy)) )
+ {
+ if (NULL != mode)
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Bad mode `%s' specified\n",
+ mode);
+ }
+ if (NULL==mode)
+ percent_refund=0;
+ }
+
+ switch (percent_refund)
+ {
+ case 0:
+ query = "get_refunds_by_coin_and_contract-v0";
PREPARE (pg,
- "get_refunds_by_coin_and_contract",
+ query,
"SELECT"
" ref.amount_with_fee_val"
",ref.amount_with_fee_frac"
@@ -132,12 +162,26 @@ TEH_PG_select_refunds_by_coin (
" WHERE ref.coin_pub=$1"
" AND dep.merchant_pub=$2"
" AND dep.h_contract_terms=$3;");
- }
- else
- {
- // FIXME-Joseph
+ break;
+ case 1:
+ query = "get_refunds_by_coin_and_contract-v1";
+ PREPARE (pg,
+ query,
+ "SELECT"
+ " ref.amount_with_fee_val"
+ ",ref.amount_with_fee_frac"
+ " FROM refunds ref"
+ " LEFT JOIN deposits dep"
+ " ON dep.coin_pub = ref.coin_pub"
+ " AND ref.deposit_serial_id = dep.deposit_serial_id"
+ " WHERE ref.coin_pub=$1"
+ " AND dep.merchant_pub=$2"
+ " AND dep.h_contract_terms=$3;");
+ break;
+ case 2:
+ query = "get_refunds_by_coin_and_contract-v2";
PREPARE (pg,
- "get_refunds_by_coin_and_contract",
+ query,
"WITH rc AS MATERIALIZED("
"SELECT"
" amount_with_fee_val"
@@ -149,21 +193,139 @@ TEH_PG_select_refunds_by_coin (
"SELECT"
" rc.amount_with_fee_val"
" ,rc.amount_with_fee_frac"
- " FROM "
- "(SELECT"
- " rc.amount_with_fee_val"
- " ,rc.amount_with_fee_frac"
" FROM deposits dep"
+ " JOIN rc"
+ " ON rc.deposit_serial_id = dep.deposit_serial_id"
" WHERE"
- " dep.coin_pub = $1" // optional...
+ " dep.coin_pub = $1"
" AND dep.merchant_pub = $2"
- " AND dep.h_contract_terms = $3) dep"
- " JOIN rc"
- " USING (coin_pub,deposit_serial_id)");
+ " AND dep.h_contract_terms = $3");
+ break;
+ case 3:
+ query = "get_refunds_by_coin_and_contract-v3";
+ PREPARE (pg,
+ query,
+ "WITH rc AS MATERIALIZED("
+ "SELECT"
+ " amount_with_fee_val"
+ ",amount_with_fee_frac"
+ ",deposit_serial_id"
+ " FROM refunds"
+ " WHERE coin_pub=$1)"
+ "SELECT"
+ " rc.amount_with_fee_val"
+ " ,rc.amount_with_fee_frac"
+ " FROM ("
+ "SELECT"
+ " amount_with_fee_val"
+ ",amount_with_fee_frac"
+ " FROM deposits depos"
+ " WHERE"
+ " depos.coin_pub = $1"
+ " AND depos.merchant_pub = $2"
+ " AND depos.h_contract_terms = $3) dep, rc;");
+ break;
+ case 4:
+ query = "get_refunds_by_coin_and_contract-v4";
+ PREPARE (pg,
+ query,
+ "WITH rc AS MATERIALIZED("
+ "SELECT"
+ " amount_with_fee_val"
+ ",amount_with_fee_frac"
+ ",coin_pub"
+ ",deposit_serial_id"
+ " FROM refunds ref"
+ " WHERE ref.coin_pub=$1)"
+ "SELECT"
+ " rc.amount_with_fee_val"
+ " ,rc.amount_with_fee_frac"
+ " ,deposit_serial_id"
+ " FROM ("
+ "SELECT"
+ " amount_with_fee_val"
+ ",amount_with_fee_frac"
+ " FROM deposits depos"
+ " WHERE"
+ " depos.merchant_pub = $2"
+ " AND depos.h_contract_terms = $3) dep JOIN rc "
+ "USING(deposit_serial_id, coin_pub);");
+ break;
+ case 5:
+ query = "get_refunds_by_coin_and_contract-v-broken";
+ xparams = params5;
+ PREPARE (pg,
+ query,
+ "SELECT"
+ " amount_with_fee_val"
+ ",amount_with_fee_frac"
+ ",coin_pub"
+ ",deposit_serial_id"
+ " FROM refunds"
+ " WHERE coin_pub=$1;");
+ break;
+ case 8:
+ query = "get_refunds_by_coin_and_contract-v8";
+ PREPARE (pg,
+ query,
+ "WITH"
+ " rc AS MATERIALIZED("
+ " SELECT"
+ " amount_with_fee_val"
+ " ,amount_with_fee_frac"
+ " ,coin_pub"
+ " ,deposit_serial_id"
+ " FROM refunds"
+ " WHERE coin_pub=$1),"
+ " dep AS MATERIALIZED("
+ " SELECT"
+ " deposit_serial_id"
+ " FROM deposits"
+ " WHERE coin_pub = $1"
+ " AND merchant_pub = $2"
+ " AND h_contract_terms = $3"
+ ")"
+ "SELECT"
+ " rc.amount_with_fee_val"
+ " ,rc.amount_with_fee_frac"
+ " FROM "
+ " rc JOIN dep USING (deposit_serial_id);");
+ break;
+ case 9:
+ query = "get_refunds_by_coin_and_contract-v9-broken";
+ PREPARE (pg,
+ query,
+ "SELECT"
+ " ref.amount_with_fee_val"
+ " ,ref.amount_with_fee_frac"
+ " FROM deposits dep"
+ " JOIN refunds ref USING(deposit_serial_id)"
+ " WHERE dep.coin_pub IN ("
+ " SELECT coin_pub"
+ " FROM refunds"
+ " WHERE coin_pub=$1)"
+ " AND merchant_pub = $2"
+ " AND h_contract_terms = $3;");
+ break;
+ case 10:
+ query = "get_refunds_by_coin_and_contract-v10-broken";
+ PREPARE (pg,
+ query,
+ "SELECT"
+ " *"
+ " FROM"
+ " exchange_do_refund_by_coin"
+ " ($1, $2, $3) "
+ " AS (amount_with_fee_val INT8, amount_with_fee_frac INT4);");
+ break;
+ default:
+ GNUNET_break (0);
+ return GNUNET_DB_STATUS_HARD_ERROR;
}
+
qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
- "get_refunds_by_coin_and_contract",
- params,
+ query,
+ xparams,
&get_refunds_cb,
&srctx);
if (GNUNET_SYSERR == srctx.status)