exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 2b4f259d5de3dfc772fdcb7caa29fb85e9f42cf6
parent a17d7490889f141ae0a03177a8d0caee5faebf1c
Author: Christian Grothoff <christian@grothoff.org>
Date:   Mon, 12 Oct 2026 17:23:13 +0200

ON CONFLICT does not work for partitioned DB schema, use UPDATE + INSERT instead

Diffstat:
Msrc/exchangedb/do_reserve_legitimization_process.sql | 91+++++++++++++++++++++++++++++++++++++++++++------------------------------------
1 file changed, 50 insertions(+), 41 deletions(-)

diff --git a/src/exchangedb/do_reserve_legitimization_process.sql b/src/exchangedb/do_reserve_legitimization_process.sql @@ -71,51 +71,60 @@ BEGIN AND provider_name=in_provider_name AND NOT finished; - INSERT INTO legitimization_processes - (h_payto, - start_time, - process_expiration_time, - expiration_time, - provider_name, - provider_user_id, - provider_legitimization_id, - redirect_url, - finished, - legitimization_measure_serial_id, - measure_index, - error_code, - error_message) - VALUES - (in_h_payto, - in_now, - in_lease_expiration, - 0, - in_provider_name, - NULL, - NULL, - NULL, - FALSE, - in_legitimization_measure_serial_id, - in_measure_index, - 0, - NULL) - ON CONFLICT (legitimization_measure_serial_id,measure_index) - DO UPDATE SET - h_payto=in_h_payto, - start_time=in_now, - process_expiration_time=in_lease_expiration, - expiration_time=0, - provider_name=in_provider_name, - provider_user_id=NULL, - provider_legitimization_id=NULL, - redirect_url=NULL, - finished=FALSE, - error_code=0, - error_message=NULL + UPDATE legitimization_processes + SET h_payto=in_h_payto + ,start_time=in_now + ,process_expiration_time=in_lease_expiration + ,expiration_time=0 + ,provider_name=in_provider_name + ,provider_user_id=NULL + ,provider_legitimization_id=NULL + ,redirect_url=NULL + ,finished=FALSE + ,error_code=0 + ,error_message=NULL + WHERE legitimization_measure_serial_id=in_legitimization_measure_serial_id + AND measure_index=in_measure_index RETURNING legitimization_process_serial_id, start_time INTO out_process_row, out_start_time; + + IF NOT FOUND + THEN + INSERT INTO legitimization_processes + (h_payto + ,start_time + ,process_expiration_time + ,expiration_time + ,provider_name + ,provider_user_id + ,provider_legitimization_id + ,redirect_url + ,finished + ,legitimization_measure_serial_id + ,measure_index + ,error_code + ,error_message + ) VALUES + (in_h_payto + ,in_now + ,in_lease_expiration + ,0 + ,in_provider_name + ,NULL + ,NULL + ,NULL + ,FALSE + ,in_legitimization_measure_serial_id + ,in_measure_index + ,0 + ,NULL) + RETURNING legitimization_process_serial_id, + start_time + INTO out_process_row, + out_start_time; + END IF; out_redirect_url=NULL; out_state=1; END $$;