pg_lookup_serial_by_table.c (16885B)
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 TEH_PG_lookup_serial_by_table (void *cls, 40 enum TALER_EXCHANGEDB_ReplicatedTable table, 41 uint64_t *serial) 42 { 43 struct PostgresClosure *pg = cls; 44 struct GNUNET_PQ_QueryParam params[] = { 45 GNUNET_PQ_query_param_end 46 }; 47 struct GNUNET_PQ_ResultSpec rs[] = { 48 GNUNET_PQ_result_spec_uint64 ("serial", 49 serial), 50 GNUNET_PQ_result_spec_end 51 }; 52 const char *statement = NULL; 53 54 switch (table) 55 { 56 case TALER_EXCHANGEDB_RT_DENOMINATIONS: 57 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 break; 64 case TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS: 65 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 break; 72 case TALER_EXCHANGEDB_RT_WIRE_TARGETS: 73 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 break; 80 case TALER_EXCHANGEDB_RT_KYC_TARGETS: 81 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 break; 88 case TALER_EXCHANGEDB_RT_RESERVES: 89 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 break; 96 case TALER_EXCHANGEDB_RT_RESERVES_IN: 97 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 break; 104 case TALER_EXCHANGEDB_RT_KYCAUTHS_IN: 105 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 break; 112 case TALER_EXCHANGEDB_RT_RESERVES_CLOSE: 113 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 break; 120 case TALER_EXCHANGEDB_RT_RESERVES_OPEN_REQUESTS: 121 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 break; 128 case TALER_EXCHANGEDB_RT_RESERVES_OPEN_DEPOSITS: 129 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 break; 136 case TALER_EXCHANGEDB_RT_AUDITORS: 137 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 break; 144 case TALER_EXCHANGEDB_RT_AUDITOR_DENOM_SIGS: 145 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 break; 152 case TALER_EXCHANGEDB_RT_EXCHANGE_SIGN_KEYS: 153 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 break; 160 case TALER_EXCHANGEDB_RT_SIGNKEY_REVOCATIONS: 161 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 break; 168 case TALER_EXCHANGEDB_RT_KNOWN_COINS: 169 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 break; 176 case TALER_EXCHANGEDB_RT_REFRESH: 177 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 break; 184 case TALER_EXCHANGEDB_RT_BATCH_DEPOSITS: 185 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 break; 192 case TALER_EXCHANGEDB_RT_COIN_DEPOSITS: 193 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 break; 200 case TALER_EXCHANGEDB_RT_REFUNDS: 201 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 break; 208 case TALER_EXCHANGEDB_RT_WIRE_OUT: 209 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 break; 216 case TALER_EXCHANGEDB_RT_AGGREGATION_TRACKING: 217 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 break; 224 case TALER_EXCHANGEDB_RT_WIRE_FEE: 225 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 break; 232 case TALER_EXCHANGEDB_RT_GLOBAL_FEE: 233 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 break; 240 case TALER_EXCHANGEDB_RT_RECOUP: 241 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 break; 248 case TALER_EXCHANGEDB_RT_RECOUP_REFRESH: 249 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 break; 256 case TALER_EXCHANGEDB_RT_EXTENSIONS: 257 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 break; 264 case TALER_EXCHANGEDB_RT_POLICY_DETAILS: 265 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 break; 272 case TALER_EXCHANGEDB_RT_POLICY_FULFILLMENTS: 273 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 break; 280 case TALER_EXCHANGEDB_RT_PURSE_REQUESTS: 281 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 break; 288 case TALER_EXCHANGEDB_RT_PURSE_DECISION: 289 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 break; 296 case TALER_EXCHANGEDB_RT_PURSE_MERGES: 297 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 break; 304 case TALER_EXCHANGEDB_RT_PURSE_DEPOSITS: 305 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 break; 312 case TALER_EXCHANGEDB_RT_ACCOUNT_MERGES: 313 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 break; 320 case TALER_EXCHANGEDB_RT_HISTORY_REQUESTS: 321 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 break; 328 case TALER_EXCHANGEDB_RT_CLOSE_REQUESTS: 329 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 break; 336 case TALER_EXCHANGEDB_RT_WADS_OUT: 337 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 break; 344 case TALER_EXCHANGEDB_RT_WADS_OUT_ENTRIES: 345 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 break; 352 case TALER_EXCHANGEDB_RT_WADS_IN: 353 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 break; 360 case TALER_EXCHANGEDB_RT_WADS_IN_ENTRIES: 361 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 break; 368 case TALER_EXCHANGEDB_RT_PROFIT_DRAINS: 369 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 statement = "select_serial_by_table_profit_drains"; 376 break; 377 case TALER_EXCHANGEDB_RT_AML_STAFF: 378 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 statement = "select_serial_by_table_aml_staff"; 385 break; 386 case TALER_EXCHANGEDB_RT_PURSE_DELETION: 387 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 statement = "select_serial_by_table_purse_deletion"; 394 break; 395 case TALER_EXCHANGEDB_RT_WITHDRAW: 396 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 statement = "select_serial_by_table_withdraw"; 403 break; 404 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_MEASURES: 405 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 break; 412 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_OUTCOMES: 413 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 break; 420 case TALER_EXCHANGEDB_RT_LEGITIMIZATION_PROCESSES: 421 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 break; 428 case TALER_EXCHANGEDB_RT_KYC_ATTRIBUTES: 429 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 statement = "select_serial_by_table_kyc_attributes"; 436 break; 437 case TALER_EXCHANGEDB_RT_AML_HISTORY: 438 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 statement = "select_serial_by_table_aml_history"; 445 break; 446 case TALER_EXCHANGEDB_RT_KYC_EVENTS: 447 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 break; 454 } 455 if (NULL == statement) 456 { 457 GNUNET_break (0); 458 return GNUNET_DB_STATUS_HARD_ERROR; 459 } 460 return GNUNET_PQ_eval_prepared_singleton_select (pg->conn, 461 statement, 462 params, 463 rs); 464 } 465 466 467 #undef XPREPARE