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

Generated by: LCOV version 2.0-1