lookup_serial_by_table.c (16031B)
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 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 struct GNUNET_PQ_QueryParam params[] = { 43 GNUNET_PQ_query_param_end 44 }; 45 struct GNUNET_PQ_ResultSpec rs[] = { 46 GNUNET_PQ_result_spec_uint64 ("serial", 47 serial), 48 GNUNET_PQ_result_spec_end 49 }; 50 const char *statement = NULL; 51 52 switch (table) 53 { 54 case TALER_EXCHANGEDB_RT_DENOMINATIONS: 55 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 break; 62 case TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS: 63 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 break; 70 case TALER_EXCHANGEDB_RT_WIRE_TARGETS: 71 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 break; 78 case TALER_EXCHANGEDB_RT_KYC_TARGETS: 79 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 break; 86 case TALER_EXCHANGEDB_RT_RESERVES: 87 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 break; 94 case TALER_EXCHANGEDB_RT_RESERVES_IN: 95 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 break; 102 case TALER_EXCHANGEDB_RT_KYCAUTHS_IN: 103 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 break; 110 case TALER_EXCHANGEDB_RT_RESERVES_CLOSE: 111 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 break; 118 case TALER_EXCHANGEDB_RT_RESERVES_OPEN_REQUESTS: 119 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 break; 126 case TALER_EXCHANGEDB_RT_RESERVES_OPEN_DEPOSITS: 127 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 break; 134 case TALER_EXCHANGEDB_RT_AUDITORS: 135 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 break; 142 case TALER_EXCHANGEDB_RT_AUDITOR_DENOM_SIGS: 143 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 break; 150 case TALER_EXCHANGEDB_RT_EXCHANGE_SIGN_KEYS: 151 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 break; 158 case TALER_EXCHANGEDB_RT_SIGNKEY_REVOCATIONS: 159 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 break; 166 case TALER_EXCHANGEDB_RT_KNOWN_COINS: 167 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 break; 174 case TALER_EXCHANGEDB_RT_REFRESH: 175 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 break; 182 case TALER_EXCHANGEDB_RT_BATCH_DEPOSITS: 183 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 break; 190 case TALER_EXCHANGEDB_RT_COIN_DEPOSITS: 191 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 break; 198 case TALER_EXCHANGEDB_RT_REFUNDS: 199 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 break; 206 case TALER_EXCHANGEDB_RT_WIRE_OUT: 207 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 break; 214 case TALER_EXCHANGEDB_RT_AGGREGATION_TRACKING: 215 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 break; 222 case TALER_EXCHANGEDB_RT_WIRE_FEE: 223 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 break; 230 case TALER_EXCHANGEDB_RT_GLOBAL_FEE: 231 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 break; 238 case TALER_EXCHANGEDB_RT_RECOUP: 239 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 break; 246 case TALER_EXCHANGEDB_RT_RECOUP_REFRESH: 247 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 break; 254 case TALER_EXCHANGEDB_RT_PURSE_REQUESTS: 255 XPREPARE ("select_serial_by_table_purse_requests", 256 "SELECT" 257 " purse_requests_serial_id AS serial" 258 " FROM purse_requests" 259 " ORDER BY purse_requests_serial_id DESC" 260 " LIMIT 1;") 261 break; 262 case TALER_EXCHANGEDB_RT_PURSE_DECISION: 263 XPREPARE ("select_serial_by_table_purse_decision", 264 "SELECT" 265 " purse_decision_serial_id AS serial" 266 " FROM purse_decision" 267 " ORDER BY purse_decision_serial_id DESC" 268 " LIMIT 1;"); 269 break; 270 case TALER_EXCHANGEDB_RT_PURSE_MERGES: 271 XPREPARE ("select_serial_by_table_purse_merges", 272 "SELECT" 273 " purse_merge_request_serial_id AS serial" 274 " FROM purse_merges" 275 " ORDER BY purse_merge_request_serial_id DESC" 276 " LIMIT 1;"); 277 break; 278 case TALER_EXCHANGEDB_RT_PURSE_DEPOSITS: 279 XPREPARE ("select_serial_by_table_purse_deposits", 280 "SELECT" 281 " purse_deposit_serial_id AS serial" 282 " FROM purse_deposits" 283 " ORDER BY purse_deposit_serial_id DESC" 284 " LIMIT 1;"); 285 break; 286 case TALER_EXCHANGEDB_RT_ACCOUNT_MERGES: 287 XPREPARE ("select_serial_by_table_account_merges", 288 "SELECT" 289 " account_merge_request_serial_id AS serial" 290 " FROM account_merges" 291 " ORDER BY account_merge_request_serial_id DESC" 292 " LIMIT 1;"); 293 break; 294 case TALER_EXCHANGEDB_RT_HISTORY_REQUESTS: 295 XPREPARE ("select_serial_by_table_history_requests", 296 "SELECT" 297 " history_request_serial_id AS serial" 298 " FROM history_requests" 299 " ORDER BY history_request_serial_id DESC" 300 " LIMIT 1;"); 301 break; 302 case TALER_EXCHANGEDB_RT_CLOSE_REQUESTS: 303 XPREPARE ("select_serial_by_table_close_requests", 304 "SELECT" 305 " close_request_serial_id AS serial" 306 " FROM close_requests" 307 " ORDER BY close_request_serial_id DESC" 308 " LIMIT 1;"); 309 break; 310 case TALER_EXCHANGEDB_RT_WADS_OUT: 311 XPREPARE ("select_serial_by_table_wads_out", 312 "SELECT" 313 " wad_out_serial_id AS serial" 314 " FROM wads_out" 315 " ORDER BY wad_out_serial_id DESC" 316 " LIMIT 1;"); 317 break; 318 case TALER_EXCHANGEDB_RT_WADS_OUT_ENTRIES: 319 XPREPARE ("select_serial_by_table_wads_out_entries", 320 "SELECT" 321 " wad_out_entry_serial_id AS serial" 322 " FROM wad_out_entries" 323 " ORDER BY wad_out_entry_serial_id DESC" 324 " LIMIT 1;"); 325 break; 326 case TALER_EXCHANGEDB_RT_WADS_IN: 327 XPREPARE ("select_serial_by_table_wads_in", 328 "SELECT" 329 " wad_in_serial_id AS serial" 330 " FROM wads_in" 331 " ORDER BY wad_in_serial_id DESC" 332 " LIMIT 1;"); 333 break; 334 case TALER_EXCHANGEDB_RT_WADS_IN_ENTRIES: 335 XPREPARE ("select_serial_by_table_wads_in_entries", 336 "SELECT" 337 " wad_in_entry_serial_id AS serial" 338 " FROM wad_in_entries" 339 " ORDER BY wad_in_entry_serial_id DESC" 340 " LIMIT 1;"); 341 break; 342 case TALER_EXCHANGEDB_RT_PROFIT_DRAINS: 343 XPREPARE ("select_serial_by_table_profit_drains", 344 "SELECT" 345 " profit_drain_serial_id AS serial" 346 " FROM profit_drains" 347 " ORDER BY profit_drain_serial_id DESC" 348 " LIMIT 1;"); 349 statement = "select_serial_by_table_profit_drains"; 350 break; 351 case TALER_EXCHANGEDB_RT_AML_STAFF: 352 XPREPARE ("select_serial_by_table_aml_staff", 353 "SELECT" 354 " aml_staff_uuid AS serial" 355 " FROM aml_staff" 356 " ORDER BY aml_staff_uuid DESC" 357 " LIMIT 1;"); 358 statement = "select_serial_by_table_aml_staff"; 359 break; 360 case TALER_EXCHANGEDB_RT_PURSE_DELETION: 361 XPREPARE ("select_serial_by_table_purse_deletion", 362 "SELECT" 363 " purse_deletion_serial_id AS serial" 364 " FROM purse_deletion" 365 " ORDER BY purse_deletion_serial_id DESC" 366 " LIMIT 1;"); 367 statement = "select_serial_by_table_purse_deletion"; 368 break; 369 case TALER_EXCHANGEDB_RT_WITHDRAW: 370 XPREPARE ("select_serial_by_table_withdraw", 371 "SELECT" 372 " withdraw_id AS serial" 373 " FROM withdraw" 374 " ORDER BY withdraw_id DESC" 375 " LIMIT 1;"); 376 statement = "select_serial_by_table_withdraw"; 377 break; 378 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_MEASURES: 379 XPREPARE ("select_serial_by_table_legitimization_measures", 380 "SELECT" 381 " legitimization_measure_serial_id AS serial" 382 " FROM legitimization_measures" 383 " ORDER BY legitimization_measure_serial_id DESC" 384 " LIMIT 1;"); 385 break; 386 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_OUTCOMES: 387 XPREPARE ("select_serial_by_table_legitimization_outcomes", 388 "SELECT" 389 " outcome_serial_id AS serial" 390 " FROM legitimization_outcomes" 391 " ORDER BY outcome_serial_id DESC" 392 " LIMIT 1;"); 393 break; 394 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_PROCESSES: 395 XPREPARE ("select_serial_by_table_legitimization_processes", 396 "SELECT" 397 " legitimization_process_serial_id AS serial" 398 " FROM legitimization_processes" 399 " ORDER BY legitimization_process_serial_id DESC" 400 " LIMIT 1;"); 401 break; 402 case TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES: 403 XPREPARE ("select_serial_by_table_kyc_attributes", 404 "SELECT" 405 " kyc_attributes_serial_id AS serial" 406 " FROM kyc_attributes" 407 " ORDER BY kyc_attributes_serial_id DESC" 408 " LIMIT 1;"); 409 statement = "select_serial_by_table_kyc_attributes"; 410 break; 411 case TALER_EXCHANGEDB_RT_AML_HISTORY: 412 XPREPARE ("select_serial_by_table_aml_history", 413 "SELECT" 414 " aml_history_serial_id AS serial" 415 " FROM aml_history" 416 " ORDER BY aml_history_serial_id DESC" 417 " LIMIT 1;"); 418 statement = "select_serial_by_table_aml_history"; 419 break; 420 case TALER_EXCHANGEDB_RT_KYC_EVENTS: 421 XPREPARE ("select_serial_by_table_kyc_events", 422 "SELECT" 423 " kyc_event_serial_id AS serial" 424 " FROM kyc_events" 425 " ORDER BY kyc_event_serial_id DESC" 426 " LIMIT 1;"); 427 break; 428 } 429 if (NULL == statement) 430 { 431 GNUNET_break (0); 432 return GNUNET_DB_STATUS_HARD_ERROR; 433 } 434 return GNUNET_PQ_eval_prepared_singleton_select (pg->conn, 435 statement, 436 params, 437 rs); 438 } 439 440 441 #undef XPREPARE