lookup_serial_by_table.c (16905B)
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_EXTENSIONS: 255 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 break; 262 case TALER_EXCHANGEDB_RT_POLICY_DETAILS: 263 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 break; 270 case TALER_EXCHANGEDB_RT_POLICY_FULFILLMENTS: 271 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 break; 278 case TALER_EXCHANGEDB_RT_PURSE_REQUESTS: 279 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 break; 286 case TALER_EXCHANGEDB_RT_PURSE_DECISION: 287 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 break; 294 case TALER_EXCHANGEDB_RT_PURSE_MERGES: 295 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 break; 302 case TALER_EXCHANGEDB_RT_PURSE_DEPOSITS: 303 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 break; 310 case TALER_EXCHANGEDB_RT_ACCOUNT_MERGES: 311 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 break; 318 case TALER_EXCHANGEDB_RT_HISTORY_REQUESTS: 319 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 break; 326 case TALER_EXCHANGEDB_RT_CLOSE_REQUESTS: 327 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 break; 334 case TALER_EXCHANGEDB_RT_WADS_OUT: 335 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 break; 342 case TALER_EXCHANGEDB_RT_WADS_OUT_ENTRIES: 343 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 break; 350 case TALER_EXCHANGEDB_RT_WADS_IN: 351 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 break; 358 case TALER_EXCHANGEDB_RT_WADS_IN_ENTRIES: 359 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 break; 366 case TALER_EXCHANGEDB_RT_PROFIT_DRAINS: 367 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 statement = "select_serial_by_table_profit_drains"; 374 break; 375 case TALER_EXCHANGEDB_RT_AML_STAFF: 376 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 statement = "select_serial_by_table_aml_staff"; 383 break; 384 case TALER_EXCHANGEDB_RT_PURSE_DELETION: 385 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 statement = "select_serial_by_table_purse_deletion"; 392 break; 393 case TALER_EXCHANGEDB_RT_WITHDRAW: 394 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 statement = "select_serial_by_table_withdraw"; 401 break; 402 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_MEASURES: 403 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 break; 410 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_OUTCOMES: 411 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 break; 418 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_PROCESSES: 419 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 break; 426 case TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES: 427 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 statement = "select_serial_by_table_kyc_attributes"; 434 break; 435 case TALER_EXCHANGEDB_RT_AML_HISTORY: 436 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 statement = "select_serial_by_table_aml_history"; 443 break; 444 case TALER_EXCHANGEDB_RT_KYC_EVENTS: 445 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 break; 452 } 453 if (NULL == statement) 454 { 455 GNUNET_break (0); 456 return GNUNET_DB_STATUS_HARD_ERROR; 457 } 458 return GNUNET_PQ_eval_prepared_singleton_select (pg->conn, 459 statement, 460 params, 461 rs); 462 } 463 464 465 #undef XPREPARE