LCOV - code coverage report
Current view: top level - exchangedb - lookup_serial_by_table.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 163 0
Test Date: 2026-04-14 15:39:31 Functions: 0.0 % 1 0

            Line data    Source code
       1              : /*
       2              :    This file is part of TALER
       3              :    Copyright (C) 2022-2024 Taler Systems SA
       4              : 
       5              :    TALER is free software; you can redistribute it and/or modify it under the
       6              :    terms of the GNU General Public License as published by the Free Software
       7              :    Foundation; either version 3, or (at your option) any later version.
       8              : 
       9              :    TALER is distributed in the hope that it will be useful, but WITHOUT ANY
      10              :    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
      11              :    A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
      12              : 
      13              :    You should have received a copy of the GNU General Public License along with
      14              :    TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
      15              :  */
      16              : /**
      17              :  * @file lookup_serial_by_table.c
      18              :  * @brief Low-level (statement-level) Postgres database access for the exchange
      19              :  * @author Christian Grothoff
      20              :  */
      21              : #include "taler/taler_pq_lib.h"
      22              : #include "exchange-database/lookup_serial_by_table.h"
      23              : #include "helper.h"
      24              : 
      25              : 
      26              : /**
      27              :  * Assign statement to @a n and PREPARE
      28              :  * @a sql under name @a n.
      29              :  */
      30              : #define XPREPARE(n,sql) \
      31              :         statement = n;        \
      32              :         PREPARE (pg, n, sql);
      33              : 
      34              : 
      35              : enum GNUNET_DB_QueryStatus
      36            0 : TALER_EXCHANGEDB_lookup_serial_by_table (struct
      37              :                                          TALER_EXCHANGEDB_PostgresContext *pg,
      38              :                                          enum TALER_EXCHANGEDB_ReplicatedTable
      39              :                                          table,
      40              :                                          uint64_t *serial)
      41              : {
      42            0 :   struct GNUNET_PQ_QueryParam params[] = {
      43              :     GNUNET_PQ_query_param_end
      44              :   };
      45            0 :   struct GNUNET_PQ_ResultSpec rs[] = {
      46            0 :     GNUNET_PQ_result_spec_uint64 ("serial",
      47              :                                   serial),
      48              :     GNUNET_PQ_result_spec_end
      49              :   };
      50            0 :   const char *statement = NULL;
      51              : 
      52            0 :   switch (table)
      53              :   {
      54            0 :   case TALER_EXCHANGEDB_RT_DENOMINATIONS:
      55            0 :     XPREPARE ("select_serial_by_table_denominations",
      56              :               "SELECT"
      57              :               " denominations_serial AS serial"
      58              :               " FROM denominations"
      59              :               " ORDER BY denominations_serial DESC"
      60              :               " LIMIT 1;");
      61            0 :     break;
      62            0 :   case TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS:
      63            0 :     XPREPARE ("select_serial_by_table_denomination_revocations",
      64              :               "SELECT"
      65              :               " denom_revocations_serial_id AS serial"
      66              :               " FROM denomination_revocations"
      67              :               " ORDER BY denom_revocations_serial_id DESC"
      68              :               " LIMIT 1;");
      69            0 :     break;
      70            0 :   case TALER_EXCHANGEDB_RT_WIRE_TARGETS:
      71            0 :     XPREPARE ("select_serial_by_table_wire_targets",
      72              :               "SELECT"
      73              :               " wire_target_serial_id AS serial"
      74              :               " FROM wire_targets"
      75              :               " ORDER BY wire_target_serial_id DESC"
      76              :               " LIMIT 1;");
      77            0 :     break;
      78            0 :   case TALER_EXCHANGEDB_RT_KYC_TARGETS:
      79            0 :     XPREPARE ("select_serial_by_table_kyc_targets",
      80              :               "SELECT"
      81              :               " kyc_target_serial_id AS serial"
      82              :               " FROM kyc_targets"
      83              :               " ORDER BY kyc_target_serial_id DESC"
      84              :               " LIMIT 1;");
      85            0 :     break;
      86            0 :   case TALER_EXCHANGEDB_RT_RESERVES:
      87            0 :     XPREPARE ("select_serial_by_table_reserves",
      88              :               "SELECT"
      89              :               " reserve_uuid AS serial"
      90              :               " FROM reserves"
      91              :               " ORDER BY reserve_uuid DESC"
      92              :               " LIMIT 1;");
      93            0 :     break;
      94            0 :   case TALER_EXCHANGEDB_RT_RESERVES_IN:
      95            0 :     XPREPARE ("select_serial_by_table_reserves_in",
      96              :               "SELECT"
      97              :               " reserve_in_serial_id AS serial"
      98              :               " FROM reserves_in"
      99              :               " ORDER BY reserve_in_serial_id DESC"
     100              :               " LIMIT 1;");
     101            0 :     break;
     102            0 :   case TALER_EXCHANGEDB_RT_KYCAUTHS_IN:
     103            0 :     XPREPARE ("select_serial_by_table_kycauths_in",
     104              :               "SELECT"
     105              :               " kycauth_in_serial_id AS serial"
     106              :               " FROM kycauths_in"
     107              :               " ORDER BY kycauths_in_serial_id DESC"
     108              :               " LIMIT 1;");
     109            0 :     break;
     110            0 :   case TALER_EXCHANGEDB_RT_RESERVES_CLOSE:
     111            0 :     XPREPARE ("select_serial_by_table_reserves_close",
     112              :               "SELECT"
     113              :               " close_uuid AS serial"
     114              :               " FROM reserves_close"
     115              :               " ORDER BY close_uuid DESC"
     116              :               " LIMIT 1;");
     117            0 :     break;
     118            0 :   case TALER_EXCHANGEDB_RT_RESERVES_OPEN_REQUESTS:
     119            0 :     XPREPARE ("select_serial_by_table_reserves_open_requests",
     120              :               "SELECT"
     121              :               " open_request_uuid AS serial"
     122              :               " FROM reserves_open_requests"
     123              :               " ORDER BY open_request_uuid DESC"
     124              :               " LIMIT 1;");
     125            0 :     break;
     126            0 :   case TALER_EXCHANGEDB_RT_RESERVES_OPEN_DEPOSITS:
     127            0 :     XPREPARE ("select_serial_by_table_reserves_open_deposits",
     128              :               "SELECT"
     129              :               " reserve_open_deposit_uuid AS serial"
     130              :               " FROM reserves_open_deposits"
     131              :               " ORDER BY reserve_open_deposit_uuid DESC"
     132              :               " LIMIT 1;");
     133            0 :     break;
     134            0 :   case TALER_EXCHANGEDB_RT_AUDITORS:
     135            0 :     XPREPARE ("select_serial_by_table_auditors",
     136              :               "SELECT"
     137              :               " auditor_uuid AS serial"
     138              :               " FROM auditors"
     139              :               " ORDER BY auditor_uuid DESC"
     140              :               " LIMIT 1;");
     141            0 :     break;
     142            0 :   case TALER_EXCHANGEDB_RT_AUDITOR_DENOM_SIGS:
     143            0 :     XPREPARE ("select_serial_by_table_auditor_denom_sigs",
     144              :               "SELECT"
     145              :               " auditor_denom_serial AS serial"
     146              :               " FROM auditor_denom_sigs"
     147              :               " ORDER BY auditor_denom_serial DESC"
     148              :               " LIMIT 1;");
     149            0 :     break;
     150            0 :   case TALER_EXCHANGEDB_RT_EXCHANGE_SIGN_KEYS:
     151            0 :     XPREPARE ("select_serial_by_table_exchange_sign_keys",
     152              :               "SELECT"
     153              :               " esk_serial AS serial"
     154              :               " FROM exchange_sign_keys"
     155              :               " ORDER BY esk_serial DESC"
     156              :               " LIMIT 1;");
     157            0 :     break;
     158            0 :   case TALER_EXCHANGEDB_RT_SIGNKEY_REVOCATIONS:
     159            0 :     XPREPARE ("select_serial_by_table_signkey_revocations",
     160              :               "SELECT"
     161              :               " signkey_revocations_serial_id AS serial"
     162              :               " FROM signkey_revocations"
     163              :               " ORDER BY signkey_revocations_serial_id DESC"
     164              :               " LIMIT 1;");
     165            0 :     break;
     166            0 :   case TALER_EXCHANGEDB_RT_KNOWN_COINS:
     167            0 :     XPREPARE ("select_serial_by_table_known_coins",
     168              :               "SELECT"
     169              :               " known_coin_id AS serial"
     170              :               " FROM known_coins"
     171              :               " ORDER BY known_coin_id DESC"
     172              :               " LIMIT 1;");
     173            0 :     break;
     174            0 :   case TALER_EXCHANGEDB_RT_REFRESH:
     175            0 :     XPREPARE ("select_serial_by_table_refresh",
     176              :               "SELECT"
     177              :               " refresh_id AS serial"
     178              :               " FROM refresh"
     179              :               " ORDER BY refresh_id DESC"
     180              :               " LIMIT 1;");
     181            0 :     break;
     182            0 :   case TALER_EXCHANGEDB_RT_BATCH_DEPOSITS:
     183            0 :     XPREPARE ("select_serial_by_table_batch_deposits",
     184              :               "SELECT"
     185              :               " batch_deposit_serial_id AS serial"
     186              :               " FROM batch_deposits"
     187              :               " ORDER BY batch_deposit_serial_id DESC"
     188              :               " LIMIT 1;");
     189            0 :     break;
     190            0 :   case TALER_EXCHANGEDB_RT_COIN_DEPOSITS:
     191            0 :     XPREPARE ("select_serial_by_table_coin_deposits",
     192              :               "SELECT"
     193              :               " coin_deposit_serial_id AS serial"
     194              :               " FROM coin_deposits"
     195              :               " ORDER BY coin_deposit_serial_id DESC"
     196              :               " LIMIT 1;");
     197            0 :     break;
     198            0 :   case TALER_EXCHANGEDB_RT_REFUNDS:
     199            0 :     XPREPARE ("select_serial_by_table_refunds",
     200              :               "SELECT"
     201              :               " refund_serial_id AS serial"
     202              :               " FROM refunds"
     203              :               " ORDER BY refund_serial_id DESC"
     204              :               " LIMIT 1;");
     205            0 :     break;
     206            0 :   case TALER_EXCHANGEDB_RT_WIRE_OUT:
     207            0 :     XPREPARE ("select_serial_by_table_wire_out",
     208              :               "SELECT"
     209              :               " wireout_uuid AS serial"
     210              :               " FROM wire_out"
     211              :               " ORDER BY wireout_uuid DESC"
     212              :               " LIMIT 1;");
     213            0 :     break;
     214            0 :   case TALER_EXCHANGEDB_RT_AGGREGATION_TRACKING:
     215            0 :     XPREPARE ("select_serial_by_table_aggregation_tracking",
     216              :               "SELECT"
     217              :               " aggregation_serial_id AS serial"
     218              :               " FROM aggregation_tracking"
     219              :               " ORDER BY aggregation_serial_id DESC"
     220              :               " LIMIT 1;");
     221            0 :     break;
     222            0 :   case TALER_EXCHANGEDB_RT_WIRE_FEE:
     223            0 :     XPREPARE ("select_serial_by_table_wire_fee",
     224              :               "SELECT"
     225              :               " wire_fee_serial AS serial"
     226              :               " FROM wire_fee"
     227              :               " ORDER BY wire_fee_serial DESC"
     228              :               " LIMIT 1;");
     229            0 :     break;
     230            0 :   case TALER_EXCHANGEDB_RT_GLOBAL_FEE:
     231            0 :     XPREPARE ("select_serial_by_table_global_fee",
     232              :               "SELECT"
     233              :               " global_fee_serial AS serial"
     234              :               " FROM global_fee"
     235              :               " ORDER BY global_fee_serial DESC"
     236              :               " LIMIT 1;");
     237            0 :     break;
     238            0 :   case TALER_EXCHANGEDB_RT_RECOUP:
     239            0 :     XPREPARE ("select_serial_by_table_recoup",
     240              :               "SELECT"
     241              :               " recoup_uuid AS serial"
     242              :               " FROM recoup"
     243              :               " ORDER BY recoup_uuid DESC"
     244              :               " LIMIT 1;");
     245            0 :     break;
     246            0 :   case TALER_EXCHANGEDB_RT_RECOUP_REFRESH:
     247            0 :     XPREPARE ("select_serial_by_table_recoup_refresh",
     248              :               "SELECT"
     249              :               " recoup_refresh_uuid AS serial"
     250              :               " FROM recoup_refresh"
     251              :               " ORDER BY recoup_refresh_uuid DESC"
     252              :               " LIMIT 1;");
     253            0 :     break;
     254            0 :   case TALER_EXCHANGEDB_RT_EXTENSIONS:
     255            0 :     XPREPARE ("select_serial_by_table_extensions",
     256              :               "SELECT"
     257              :               " extension_id AS serial"
     258              :               " FROM extensions"
     259              :               " ORDER BY extension_id DESC"
     260              :               " LIMIT 1;");
     261            0 :     break;
     262            0 :   case TALER_EXCHANGEDB_RT_POLICY_DETAILS:
     263            0 :     XPREPARE ("select_serial_by_table_policy_details",
     264              :               "SELECT"
     265              :               " policy_details_serial_id AS serial"
     266              :               " FROM policy_details"
     267              :               " ORDER BY policy_details_serial_id DESC"
     268              :               " LIMIT 1;");
     269            0 :     break;
     270            0 :   case TALER_EXCHANGEDB_RT_POLICY_FULFILLMENTS:
     271            0 :     XPREPARE ("select_serial_by_table_policy_fulfillments",
     272              :               "SELECT"
     273              :               " fulfillment_id AS serial"
     274              :               " FROM policy_fulfillments"
     275              :               " ORDER BY fulfillment_id DESC"
     276              :               " LIMIT 1;");
     277            0 :     break;
     278            0 :   case TALER_EXCHANGEDB_RT_PURSE_REQUESTS:
     279            0 :     XPREPARE ("select_serial_by_table_purse_requests",
     280              :               "SELECT"
     281              :               " purse_requests_serial_id AS serial"
     282              :               " FROM purse_requests"
     283              :               " ORDER BY purse_requests_serial_id DESC"
     284              :               " LIMIT 1;")
     285            0 :     break;
     286            0 :   case TALER_EXCHANGEDB_RT_PURSE_DECISION:
     287            0 :     XPREPARE ("select_serial_by_table_purse_decision",
     288              :               "SELECT"
     289              :               " purse_decision_serial_id AS serial"
     290              :               " FROM purse_decision"
     291              :               " ORDER BY purse_decision_serial_id DESC"
     292              :               " LIMIT 1;");
     293            0 :     break;
     294            0 :   case TALER_EXCHANGEDB_RT_PURSE_MERGES:
     295            0 :     XPREPARE ("select_serial_by_table_purse_merges",
     296              :               "SELECT"
     297              :               " purse_merge_request_serial_id AS serial"
     298              :               " FROM purse_merges"
     299              :               " ORDER BY purse_merge_request_serial_id DESC"
     300              :               " LIMIT 1;");
     301            0 :     break;
     302            0 :   case TALER_EXCHANGEDB_RT_PURSE_DEPOSITS:
     303            0 :     XPREPARE ("select_serial_by_table_purse_deposits",
     304              :               "SELECT"
     305              :               " purse_deposit_serial_id AS serial"
     306              :               " FROM purse_deposits"
     307              :               " ORDER BY purse_deposit_serial_id DESC"
     308              :               " LIMIT 1;");
     309            0 :     break;
     310            0 :   case TALER_EXCHANGEDB_RT_ACCOUNT_MERGES:
     311            0 :     XPREPARE ("select_serial_by_table_account_merges",
     312              :               "SELECT"
     313              :               " account_merge_request_serial_id AS serial"
     314              :               " FROM account_merges"
     315              :               " ORDER BY account_merge_request_serial_id DESC"
     316              :               " LIMIT 1;");
     317            0 :     break;
     318            0 :   case TALER_EXCHANGEDB_RT_HISTORY_REQUESTS:
     319            0 :     XPREPARE ("select_serial_by_table_history_requests",
     320              :               "SELECT"
     321              :               " history_request_serial_id AS serial"
     322              :               " FROM history_requests"
     323              :               " ORDER BY history_request_serial_id DESC"
     324              :               " LIMIT 1;");
     325            0 :     break;
     326            0 :   case TALER_EXCHANGEDB_RT_CLOSE_REQUESTS:
     327            0 :     XPREPARE ("select_serial_by_table_close_requests",
     328              :               "SELECT"
     329              :               " close_request_serial_id AS serial"
     330              :               " FROM close_requests"
     331              :               " ORDER BY close_request_serial_id DESC"
     332              :               " LIMIT 1;");
     333            0 :     break;
     334            0 :   case TALER_EXCHANGEDB_RT_WADS_OUT:
     335            0 :     XPREPARE ("select_serial_by_table_wads_out",
     336              :               "SELECT"
     337              :               " wad_out_serial_id AS serial"
     338              :               " FROM wads_out"
     339              :               " ORDER BY wad_out_serial_id DESC"
     340              :               " LIMIT 1;");
     341            0 :     break;
     342            0 :   case TALER_EXCHANGEDB_RT_WADS_OUT_ENTRIES:
     343            0 :     XPREPARE ("select_serial_by_table_wads_out_entries",
     344              :               "SELECT"
     345              :               " wad_out_entry_serial_id AS serial"
     346              :               " FROM wad_out_entries"
     347              :               " ORDER BY wad_out_entry_serial_id DESC"
     348              :               " LIMIT 1;");
     349            0 :     break;
     350            0 :   case TALER_EXCHANGEDB_RT_WADS_IN:
     351            0 :     XPREPARE ("select_serial_by_table_wads_in",
     352              :               "SELECT"
     353              :               " wad_in_serial_id AS serial"
     354              :               " FROM wads_in"
     355              :               " ORDER BY wad_in_serial_id DESC"
     356              :               " LIMIT 1;");
     357            0 :     break;
     358            0 :   case TALER_EXCHANGEDB_RT_WADS_IN_ENTRIES:
     359            0 :     XPREPARE ("select_serial_by_table_wads_in_entries",
     360              :               "SELECT"
     361              :               " wad_in_entry_serial_id AS serial"
     362              :               " FROM wad_in_entries"
     363              :               " ORDER BY wad_in_entry_serial_id DESC"
     364              :               " LIMIT 1;");
     365            0 :     break;
     366            0 :   case TALER_EXCHANGEDB_RT_PROFIT_DRAINS:
     367            0 :     XPREPARE ("select_serial_by_table_profit_drains",
     368              :               "SELECT"
     369              :               " profit_drain_serial_id AS serial"
     370              :               " FROM profit_drains"
     371              :               " ORDER BY profit_drain_serial_id DESC"
     372              :               " LIMIT 1;");
     373            0 :     statement = "select_serial_by_table_profit_drains";
     374            0 :     break;
     375            0 :   case TALER_EXCHANGEDB_RT_AML_STAFF:
     376            0 :     XPREPARE ("select_serial_by_table_aml_staff",
     377              :               "SELECT"
     378              :               " aml_staff_uuid AS serial"
     379              :               " FROM aml_staff"
     380              :               " ORDER BY aml_staff_uuid DESC"
     381              :               " LIMIT 1;");
     382            0 :     statement = "select_serial_by_table_aml_staff";
     383            0 :     break;
     384            0 :   case TALER_EXCHANGEDB_RT_PURSE_DELETION:
     385            0 :     XPREPARE ("select_serial_by_table_purse_deletion",
     386              :               "SELECT"
     387              :               " purse_deletion_serial_id AS serial"
     388              :               " FROM purse_deletion"
     389              :               " ORDER BY purse_deletion_serial_id DESC"
     390              :               " LIMIT 1;");
     391            0 :     statement = "select_serial_by_table_purse_deletion";
     392            0 :     break;
     393            0 :   case TALER_EXCHANGEDB_RT_WITHDRAW:
     394            0 :     XPREPARE ("select_serial_by_table_withdraw",
     395              :               "SELECT"
     396              :               " withdraw_id AS serial"
     397              :               " FROM withdraw"
     398              :               " ORDER BY withdraw_id DESC"
     399              :               " LIMIT 1;");
     400            0 :     statement = "select_serial_by_table_withdraw";
     401            0 :     break;
     402            0 :   case TALER_EXCHANGEDB_RT_LEGITIMIZATION_MEASURES:
     403            0 :     XPREPARE ("select_serial_by_table_legitimization_measures",
     404              :               "SELECT"
     405              :               " legitimization_measure_serial_id AS serial"
     406              :               " FROM legitimization_measures"
     407              :               " ORDER BY legitimization_measure_serial_id DESC"
     408              :               " LIMIT 1;");
     409            0 :     break;
     410            0 :   case TALER_EXCHANGEDB_RT_LEGITIMIZATION_OUTCOMES:
     411            0 :     XPREPARE ("select_serial_by_table_legitimization_outcomes",
     412              :               "SELECT"
     413              :               " outcome_serial_id AS serial"
     414              :               " FROM legitimization_outcomes"
     415              :               " ORDER BY outcome_serial_id DESC"
     416              :               " LIMIT 1;");
     417            0 :     break;
     418            0 :   case TALER_EXCHANGEDB_RT_LEGITIMIZATION_PROCESSES:
     419            0 :     XPREPARE ("select_serial_by_table_legitimization_processes",
     420              :               "SELECT"
     421              :               " legitimization_process_serial_id AS serial"
     422              :               " FROM legitimization_processes"
     423              :               " ORDER BY legitimization_process_serial_id DESC"
     424              :               " LIMIT 1;");
     425            0 :     break;
     426            0 :   case TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES:
     427            0 :     XPREPARE ("select_serial_by_table_kyc_attributes",
     428              :               "SELECT"
     429              :               " kyc_attributes_serial_id AS serial"
     430              :               " FROM kyc_attributes"
     431              :               " ORDER BY kyc_attributes_serial_id DESC"
     432              :               " LIMIT 1;");
     433            0 :     statement = "select_serial_by_table_kyc_attributes";
     434            0 :     break;
     435            0 :   case TALER_EXCHANGEDB_RT_AML_HISTORY:
     436            0 :     XPREPARE ("select_serial_by_table_aml_history",
     437              :               "SELECT"
     438              :               " aml_history_serial_id AS serial"
     439              :               " FROM aml_history"
     440              :               " ORDER BY aml_history_serial_id DESC"
     441              :               " LIMIT 1;");
     442            0 :     statement = "select_serial_by_table_aml_history";
     443            0 :     break;
     444            0 :   case TALER_EXCHANGEDB_RT_KYC_EVENTS:
     445            0 :     XPREPARE ("select_serial_by_table_kyc_events",
     446              :               "SELECT"
     447              :               " kyc_event_serial_id AS serial"
     448              :               " FROM kyc_events"
     449              :               " ORDER BY kyc_event_serial_id DESC"
     450              :               " LIMIT 1;");
     451            0 :     break;
     452              :   }
     453            0 :   if (NULL == statement)
     454              :   {
     455            0 :     GNUNET_break (0);
     456            0 :     return GNUNET_DB_STATUS_HARD_ERROR;
     457              :   }
     458            0 :   return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
     459              :                                                    statement,
     460              :                                                    params,
     461              :                                                    rs);
     462              : }
     463              : 
     464              : 
     465              : #undef XPREPARE
        

Generated by: LCOV version 2.0-1