diff options
| author | Joseph <Joseph.xu@efrei.net> | 2023-01-23 07:57:34 -0500 | 
|---|---|---|
| committer | Joseph <Joseph.xu@efrei.net> | 2023-01-23 07:57:54 -0500 | 
| commit | 54fa07f5c7be025ee1a241deabe4a5dbcca61599 (patch) | |
| tree | 28b5572dc0f18233236ea3b6872c82ae5b261880 /src/exchangedb/pg_get_ready_deposit.c | |
| parent | a273b176da448cd27374acb94feee22c22dd8527 (diff) | |
tests for refunds_by_coin and ready_deposit
Diffstat (limited to 'src/exchangedb/pg_get_ready_deposit.c')
| -rw-r--r-- | src/exchangedb/pg_get_ready_deposit.c | 193 | 
1 files changed, 174 insertions, 19 deletions
diff --git a/src/exchangedb/pg_get_ready_deposit.c b/src/exchangedb/pg_get_ready_deposit.c index af123529..73ac9e47 100644 --- a/src/exchangedb/pg_get_ready_deposit.c +++ b/src/exchangedb/pg_get_ready_deposit.c @@ -41,6 +41,7 @@ TEH_PG_get_ready_deposit (void *cls,      GNUNET_PQ_query_param_uint64 (&end_shard_row),      GNUNET_PQ_query_param_end    }; +    struct GNUNET_PQ_ResultSpec rs[] = {      GNUNET_PQ_result_spec_auto_from_type ("merchant_pub",                                            merchant_pub), @@ -57,26 +58,180 @@ TEH_PG_get_ready_deposit (void *cls,                "Finding ready deposits by deadline %s (%llu)\n",                GNUNET_TIME_absolute2s (now),                (unsigned long long) now.abs_value_us); -  PREPARE (pg, -           "deposits_get_ready", -           "SELECT" -           " payto_uri" -           ",merchant_pub" -           " FROM deposits_by_ready dbr" -           "  JOIN deposits dep" -           "    ON (dbr.coin_pub = dep.coin_pub AND" -           "        dbr.deposit_serial_id = dep.deposit_serial_id)" -           "  JOIN wire_targets wt" -           "    USING (wire_target_h_payto)" -           " WHERE dbr.wire_deadline<=$1" -           "   AND dbr.shard >= $2" -           "   AND dbr.shard <= $3" -           " ORDER BY " -           "   dbr.wire_deadline ASC" -           "  ,dbr.shard ASC" -           " LIMIT 1;"); +  int choose_mode =-2; +  const char *query; + +  if (-2 == choose_mode) +  { +    const char *mode = getenv ("NEW_LOGIC"); +    char dummy; +    if ( (NULL==mode) || +         (1 != sscanf (mode, +                       "%d%c", +                       &choose_mode, +                       &dummy)) ) +      { +        if (NULL != mode) +          GNUNET_log (GNUNET_ERROR_TYPE_ERROR, +                      "Bad mode `%s' specified\n", +                      mode); +      } +    if (NULL==mode) +      choose_mode=0; + + +  } +  switch (choose_mode) +  { +  case 0: +    query="deposits_get_ready"; +    PREPARE (pg, +             query, +             "SELECT" +             " payto_uri" +             ",merchant_pub" +             " FROM deposits_by_ready dbr" +             "  JOIN deposits dep" +             "    ON (dbr.coin_pub = dep.coin_pub AND" +             "        dbr.deposit_serial_id = dep.deposit_serial_id)" +             "  JOIN wire_targets wt" +             "    USING (wire_target_h_payto)" +             " WHERE dbr.wire_deadline<=$1" +             "   AND dbr.shard >= $2" +             "   AND dbr.shard <= $3" +             " ORDER BY " +             "   dbr.wire_deadline ASC" +             "  ,dbr.shard ASC" +             " LIMIT 1;"); +    break; +  case 1: +    query="deposits_get_ready_v1"; +    PREPARE (pg, +             query, +             "WITH rc AS MATERIALIZED (" +             " SELECT" +             " coin_pub" +             ",deposit_serial_id" +             " FROM deposits_by_ready" +             " WHERE" +             " wire_deadline<=$1" +             " AND shard >= $2" +             " AND shard <= $3" +             " ORDER BY " +             "   wire_deadline ASC" +             "  ,shard ASC" +             "  LIMIT 1" +             ")" +             "SELECT" +             " wt.payto_uri" +             ",dep.merchant_pub" +             " FROM (" +             " SELECT" +             " wire_target_h_payto" +             ",merchant_pub" +             " FROM deposits" +             " WHERE coin_pub=(SELECT coin_pub FROM rc)" +             " AND deposit_serial_id=(SELECT deposit_serial_id FROM rc)" +             ") dep" +             "  JOIN wire_targets wt" +             "    ON (dep.wire_target_h_payto = wt.wire_target_h_payto)" +             ); + +    break; +  case 2: +    query = "stored_procedure_get_ready_deposit"; +    PREPARE (pg, +             query, +             "SELECT" +             " out_payto_uri AS payto_uri" +             ",out_merchant_pub AS merchant_pub" +             " FROM" +             " exchange_do_get_ready_deposit" +             " ($1, $2, $3) "); +    break; +  case 3: +    query="deposits_get_ready_v3"; +    PREPARE (pg, +             query, +             "WITH rc AS MATERIALIZED (" +             " SELECT" +             " coin_pub" +             ",deposit_serial_id" +             " FROM deposits_by_ready" +             " WHERE" +             " wire_deadline<=$1" +             " AND shard >= $2" +             " AND shard <= $3" +             " ORDER BY " +             "   wire_deadline ASC" +             "  ,shard ASC" +             "  LIMIT 1" +             ")" +             "SELECT" +             " wt.payto_uri" +             ",dep.merchant_pub" +             " FROM (" +             " SELECT" +             " wire_target_h_payto" +             ",merchant_pub" +             ",coin_pub" +             " FROM deposits" +             " WHERE coin_pub=(SELECT coin_pub FROM rc)" +             " AND deposit_serial_id=(SELECT deposit_serial_id FROM rc)" +             ") dep" +             "  JOIN wire_targets wt" +             "    ON (dep.wire_target_h_payto = wt.wire_target_h_payto)" +             "  JOIN rc" +             "    ON (dep.coin_pub=rc.coin_pub)" +             ); + +    break; +  case 4: +    query="deposits_get_ready_v4"; +    PREPARE (pg, +             query, +             "WITH rc AS MATERIALIZED (" +             " SELECT" +             " coin_pub" +             ",deposit_serial_id" +             " FROM deposits_by_ready" +             " WHERE" +             " wire_deadline<=$1" +             " AND shard >= $2" +             " AND shard <= $3" +             " ORDER BY " +             "   wire_deadline ASC" +             "  ,shard ASC" +             "  LIMIT 1" +             ")," +             "WITH rv AS MATERIALIZED (" +             " SELECT" +             " payto_uri" +             ",wire_target_h_payto" +             " FROM wire_targets" +             ")" +             "SELECT" +             " rv.payto_uri" +             ",dep.merchant_pub" +             " FROM (" +             " SELECT" +             " wire_target_h_payto" +             ",merchant_pub" +             " FROM deposits" +             " WHERE coin_pub=(SELECT coin_pub FROM rc)" +             " AND deposit_serial_id=(SELECT deposit_serial_id FROM rc)" +             ") dep" +             " JOIN rv" +             "  ON (rv.wire_target_h_payto=dep.wire_target_h_payto)" +             ); +    break; +  default: +    GNUNET_break (0); +    return GNUNET_DB_STATUS_HARD_ERROR; +  } +    return GNUNET_PQ_eval_prepared_singleton_select (pg->conn, -                                                   "deposits_get_ready", +                                                   query,                                                     params,                                                     rs);  }  | 
