diff options
Diffstat (limited to 'src/exchangedb/exchange_do_reserves_in_insert.sql')
-rw-r--r-- | src/exchangedb/exchange_do_reserves_in_insert.sql | 1378 |
1 files changed, 639 insertions, 739 deletions
diff --git a/src/exchangedb/exchange_do_reserves_in_insert.sql b/src/exchangedb/exchange_do_reserves_in_insert.sql index 3a217accf..dffcd8b55 100644 --- a/src/exchangedb/exchange_do_reserves_in_insert.sql +++ b/src/exchangedb/exchange_do_reserves_in_insert.sql @@ -23,26 +23,15 @@ CREATE OR REPLACE FUNCTION exchange_do_batch_reserves_in_insert( IN in_credit_frac INT4, IN in_exchange_account_name VARCHAR, IN in_execution_date INT8, - IN in_wire_source_h_payto BYTEA, ---h_payto + IN in_wire_source_h_payto BYTEA, IN in_payto_uri VARCHAR, - IN in_notify text, - OUT out_reserve_found BOOLEAN, - OUT transaction_duplicate BOOLEAN, - OUT ruuid INT8) + IN in_notify TEXT, + OUT transaction_duplicate0 BOOLEAN, + OUT ruuid0 INT8) LANGUAGE plpgsql AS $$ -DECLARE - curs refcursor; -DECLARE - i RECORD; -DECLARE - curs_trans refcursor; BEGIN - ruuid = 0; - out_reserve_found = TRUE; - transaction_duplicate = TRUE; ---SIMPLE INSERT ON CONFLICT DO NOTHING INSERT INTO wire_targets (wire_target_h_payto ,payto_uri) @@ -51,37 +40,22 @@ BEGIN ,in_payto_uri) ON CONFLICT DO NOTHING; - OPEN curs FOR - WITH reserve_changes AS ( - INSERT INTO reserves - (reserve_pub - ,current_balance_val - ,current_balance_frac - ,expiration_date - ,gc_date) - VALUES - (in_reserve_pub - ,in_credit_val - ,in_credit_frac - ,in_reserve_expiration - ,in_gc_date) - ON CONFLICT DO NOTHING - RETURNING reserve_uuid, reserve_pub) - SELECT * FROM reserve_changes; - FETCH FROM curs INTO i; - IF FOUND - THEN - -- We made a change, so the reserve did not previously exist. - IF in_reserve_pub = i.reserve_pub - THEN - out_reserve_found = FALSE; - ruuid = i.reserve_uuid; - END IF; - END IF; - CLOSE curs; + INSERT INTO reserves + (reserve_pub + ,current_balance_val + ,current_balance_frac + ,expiration_date + ,gc_date) + VALUES + (in_reserve_pub + ,in_credit_val + ,in_credit_frac + ,in_reserve_expiration + ,in_gc_date) + ON CONFLICT DO NOTHING + RETURNING reserve_uuid + INTO ruuid0; - OPEN curs_trans FOR - WITH reserve_transaction AS( INSERT INTO reserves_in (reserve_pub ,wire_reference @@ -98,80 +72,66 @@ BEGIN ,in_exchange_account_name ,in_wire_source_h_payto ,in_execution_date) - ON CONFLICT DO NOTHING - RETURNING reserve_pub) - SELECT * FROM reserve_transaction; - FETCH FROM curs_trans INTO i; + ON CONFLICT DO NOTHING; + + transaction_duplicate0 = NOT FOUND; IF FOUND THEN - IF i.reserve_pub = in_reserve_pub - THEN - -- HAPPY PATH THERE IS NO DUPLICATE TRANS - transaction_duplicate = FALSE; - EXECUTE FORMAT ( + EXECUTE FORMAT ( 'NOTIFY %s' ,in_notify); - END IF; END IF; - CLOSE curs_trans; RETURN; END $$; + CREATE OR REPLACE FUNCTION exchange_do_batch2_reserves_insert( IN in_gc_date INT8, IN in_reserve_expiration INT8, - IN in_reserve_pub BYTEA, - IN in_wire_ref INT8, - IN in_credit_val INT8, - IN in_credit_frac INT4, - IN in_exchange_account_name VARCHAR, - IN in_execution_date INT8, - IN in_wire_source_h_payto BYTEA, ---h_payto - IN in_payto_uri VARCHAR, - IN in_notify text, - IN in2_notify text, - IN in2_reserve_pub BYTEA, - IN in2_wire_ref INT8, - IN in2_credit_val INT8, - IN in2_credit_frac INT4, - IN in2_exchange_account_name VARCHAR, - IN in2_execution_date INT8, - IN in2_wire_source_h_payto BYTEA, ---h_payto - IN in2_payto_uri VARCHAR, - OUT out_reserve_found BOOLEAN, - OUT out_reserve_found2 BOOLEAN, - OUT transaction_duplicate BOOLEAN, - OUT transaction_duplicate2 BOOLEAN, - OUT ruuid INT8, - OUT ruuid2 INT8) + IN in0_reserve_pub BYTEA, + IN in0_wire_ref INT8, + IN in0_credit_val INT8, + IN in0_credit_frac INT4, + IN in0_exchange_account_name VARCHAR, + IN in0_execution_date INT8, + IN in0_wire_source_h_payto BYTEA, + IN in0_payto_uri VARCHAR, + IN in0_notify TEXT, + IN in1_reserve_pub BYTEA, + IN in1_wire_ref INT8, + IN in1_credit_val INT8, + IN in1_credit_frac INT4, + IN in1_exchange_account_name VARCHAR, + IN in1_execution_date INT8, + IN in1_wire_source_h_payto BYTEA, + IN in1_payto_uri VARCHAR, + IN in1_notify TEXT, + OUT transaction_duplicate0 BOOLEAN, + OUT transaction_duplicate1 BOOLEAN, + OUT ruuid0 INT8, + OUT ruuid1 INT8) LANGUAGE plpgsql AS $$ DECLARE curs_reserve_exist REFCURSOR; DECLARE - curs_transaction_exist refcursor; -DECLARE - i RECORD; + k INT8; DECLARE - r RECORD; + curs_transaction_exist REFCURSOR; DECLARE - k INT8; + i RECORD; BEGIN - transaction_duplicate=TRUE; - transaction_duplicate2=TRUE; - out_reserve_found = TRUE; - out_reserve_found2 = TRUE; - ruuid=0; - ruuid2=0; - k=0; + transaction_duplicate0 = TRUE; + transaction_duplicate1 = TRUE; + INSERT INTO wire_targets (wire_target_h_payto ,payto_uri) VALUES - (in_wire_source_h_payto - ,in_payto_uri), - (in2_wire_source_h_payto - ,in2_payto_uri) + (in0_wire_source_h_payto + ,in0_payto_uri), + (in1_wire_source_h_payto + ,in1_payto_uri) ON CONFLICT DO NOTHING; OPEN curs_reserve_exist FOR @@ -183,206 +143,194 @@ BEGIN ,expiration_date ,gc_date) VALUES - (in_reserve_pub - ,in_credit_val - ,in_credit_frac + (in0_reserve_pub + ,in0_credit_val + ,in0_credit_frac ,in_reserve_expiration ,in_gc_date), - (in2_reserve_pub - ,in2_credit_val - ,in2_credit_frac + (in1_reserve_pub + ,in1_credit_val + ,in1_credit_frac ,in_reserve_expiration ,in_gc_date) - ON CONFLICT DO NOTHING - RETURNING reserve_uuid,reserve_pub) - SELECT * FROM reserve_changes; - WHILE k < 2 LOOP + ON CONFLICT DO NOTHING + RETURNING reserve_uuid, reserve_pub) + SELECT reserve_uuid, reserve_pub FROM reserve_changes; + + k=0; + <<loop_reserve>> LOOP FETCH FROM curs_reserve_exist INTO i; - IF FOUND + IF NOT FOUND THEN - IF in_reserve_pub = i.reserve_pub - THEN - ruuid = i.reserve_uuid; - IF in_reserve_pub <> in2_reserve_pub - THEN - out_reserve_found = FALSE; - END IF; - END IF; - IF in2_reserve_pub = i.reserve_pub - THEN - out_reserve_found2 = FALSE; - ruuid2 = i.reserve_uuid; - END IF; + EXIT loop_reserve; END IF; - k=k+1; - END LOOP; + + <<loop_k>> LOOP + CASE k + WHEN 0 THEN + k = k + 1; + IF in0_reserve_pub = i.reserve_pub + THEN + ruuid0 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 1 THEN + IF in1_reserve_pub = i.reserve_pub + THEN + ruuid1 = i.reserve_uuid; + END IF; + EXIT loop_reserve; + END CASE; + END LOOP loop_k; + END LOOP loop_reserve; + CLOSE curs_reserve_exist; OPEN curs_transaction_exist FOR - WITH reserve_in_exist AS ( - INSERT INTO reserves_in - (reserve_pub - ,wire_reference - ,credit_val - ,credit_frac - ,exchange_account_section - ,wire_source_h_payto - ,execution_date) - VALUES - (in_reserve_pub - ,in_wire_ref - ,in_credit_val - ,in_credit_frac - ,in_exchange_account_name - ,in_wire_source_h_payto - ,in_execution_date), - (in2_reserve_pub - ,in2_wire_ref - ,in2_credit_val - ,in2_credit_frac - ,in2_exchange_account_name - ,in2_wire_source_h_payto - ,in2_execution_date) + WITH reserve_transaction AS ( + INSERT INTO reserves_in + (reserve_pub + ,wire_reference + ,credit_val + ,credit_frac + ,exchange_account_section + ,wire_source_h_payto + ,execution_date) + VALUES + (in0_reserve_pub + ,in0_wire_ref + ,in0_credit_val + ,in0_credit_frac + ,in0_exchange_account_name + ,in0_wire_source_h_payto + ,in0_execution_date), + (in1_reserve_pub + ,in1_wire_ref + ,in1_credit_val + ,in1_credit_frac + ,in1_exchange_account_name + ,in1_wire_source_h_payto + ,in1_execution_date) ON CONFLICT DO NOTHING RETURNING reserve_pub) - SELECT * FROM reserve_in_exist; - FETCH FROM curs_transaction_exist INTO r; - IF FOUND - THEN - IF in_reserve_pub = r.reserve_pub - THEN - transaction_duplicate = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in_notify); - END IF; - IF in2_reserve_pub = r.reserve_pub - THEN - transaction_duplicate2 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in2_notify); - END IF; - FETCH FROM curs_transaction_exist INTO r; - IF FOUND + SELECT reserve_pub FROM reserve_transaction; + + k=0; + <<loop_transaction>> LOOP + FETCH FROM curs_transaction_exist INTO i; + IF NOT FOUND THEN - IF in_reserve_pub = r.reserve_pub - THEN - transaction_duplicate = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in_notify); - END IF; - IF in2_reserve_pub = r.reserve_pub - THEN - transaction_duplicate2 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in2_notify); - END IF; + EXIT loop_transaction; END IF; - END IF; -/* IF transaction_duplicate - OR transaction_duplicate2 - THEN - CLOSE curs_transaction_exist; - ROLLBACK; - RETURN; - END IF;*/ + + <<loop2_k>> LOOP + CASE k + WHEN 0 THEN + k = k + 1; + IF in0_reserve_pub = i.reserve_pub + THEN + transaction_duplicate0 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in0_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 1 THEN + IF in1_reserve_pub = i.reserve_pub + THEN + transaction_duplicate1 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in1_notify); + END IF; + EXIT loop_transaction; + END CASE; + END LOOP loop2_k; + END LOOP loop_transaction; + CLOSE curs_transaction_exist; + RETURN; END $$; + CREATE OR REPLACE FUNCTION exchange_do_batch4_reserves_insert( IN in_gc_date INT8, IN in_reserve_expiration INT8, - IN in_reserve_pub BYTEA, - IN in_wire_ref INT8, - IN in_credit_val INT8, - IN in_credit_frac INT4, - IN in_exchange_account_name VARCHAR, - IN in_execution_date INT8, - IN in_wire_source_h_payto BYTEA, ---h_payto - IN in_payto_uri VARCHAR, - IN in_notify text, - IN in2_notify text, - IN in3_notify text, - IN in4_notify text, + IN in0_reserve_pub BYTEA, + IN in0_wire_ref INT8, + IN in0_credit_val INT8, + IN in0_credit_frac INT4, + IN in0_exchange_account_name VARCHAR, + IN in0_execution_date INT8, + IN in0_wire_source_h_payto BYTEA, + IN in0_payto_uri VARCHAR, + IN in0_notify TEXT, + IN in1_reserve_pub BYTEA, + IN in1_wire_ref INT8, + IN in1_credit_val INT8, + IN in1_credit_frac INT4, + IN in1_exchange_account_name VARCHAR, + IN in1_execution_date INT8, + IN in1_wire_source_h_payto BYTEA, + IN in1_payto_uri VARCHAR, + IN in1_notify TEXT, IN in2_reserve_pub BYTEA, IN in2_wire_ref INT8, IN in2_credit_val INT8, IN in2_credit_frac INT4, IN in2_exchange_account_name VARCHAR, - IN in2_execute_date INT8, - IN in2_wire_source_h_payto BYTEA, ---h_payto + IN in2_execution_date INT8, + IN in2_wire_source_h_payto BYTEA, IN in2_payto_uri VARCHAR, + IN in2_notify TEXT, IN in3_reserve_pub BYTEA, IN in3_wire_ref INT8, IN in3_credit_val INT8, IN in3_credit_frac INT4, IN in3_exchange_account_name VARCHAR, - IN in3_execute_date INT8, - IN in3_wire_source_h_payto BYTEA, ---h_payto + IN in3_execution_date INT8, + IN in3_wire_source_h_payto BYTEA, IN in3_payto_uri VARCHAR, - IN in4_reserve_pub BYTEA, - IN in4_wire_ref INT8, - IN in4_credit_val INT8, - IN in4_credit_frac INT4, - IN in4_exchange_account_name VARCHAR, - IN in4_execution_date INT8, - IN in4_wire_source_h_payto BYTEA, ---h_payto - IN in4_payto_uri VARCHAR, - OUT out_reserve_found BOOLEAN, - OUT out_reserve_found2 BOOLEAN, - OUT out_reserve_found3 BOOLEAN, - OUT out_reserve_found4 BOOLEAN, - OUT transaction_duplicate BOOLEAN, + IN in3_notify TEXT, + OUT transaction_duplicate0 BOOLEAN, + OUT transaction_duplicate1 BOOLEAN, OUT transaction_duplicate2 BOOLEAN, OUT transaction_duplicate3 BOOLEAN, - OUT transaction_duplicate4 BOOLEAN, - OUT ruuid INT8, + OUT ruuid0 INT8, + OUT ruuid1 INT8, OUT ruuid2 INT8, - OUT ruuid3 INT8, - OUT ruuid4 INT8) + OUT ruuid3 INT8) LANGUAGE plpgsql AS $$ DECLARE - curs_reserve_exist refcursor; + curs_reserve_exist REFCURSOR; DECLARE k INT8; DECLARE - curs_transaction_exist refcursor; + curs_transaction_exist REFCURSOR; DECLARE i RECORD; - BEGIN ---INITIALIZATION - transaction_duplicate=TRUE; + transaction_duplicate0=TRUE; + transaction_duplicate1=TRUE; transaction_duplicate2=TRUE; transaction_duplicate3=TRUE; - transaction_duplicate4=TRUE; - out_reserve_found = TRUE; - out_reserve_found2 = TRUE; - out_reserve_found3 = TRUE; - out_reserve_found4 = TRUE; - ruuid=0; - ruuid2=0; - ruuid3=0; - ruuid4=0; - k=0; - --SIMPLE INSERT ON CONFLICT DO NOTHING + INSERT INTO wire_targets (wire_target_h_payto ,payto_uri) VALUES - (in_wire_source_h_payto - ,in_payto_uri), + (in0_wire_source_h_payto + ,in0_payto_uri), + (in1_wire_source_h_payto + ,in1_payto_uri), (in2_wire_source_h_payto ,in2_payto_uri), (in3_wire_source_h_payto - ,in3_payto_uri), - (in4_wire_source_h_payto - ,in4_payto_uri) + ,in3_payto_uri) ON CONFLICT DO NOTHING; OPEN curs_reserve_exist FOR @@ -394,9 +342,14 @@ BEGIN ,expiration_date ,gc_date) VALUES - (in_reserve_pub - ,in_credit_val - ,in_credit_frac + (in0_reserve_pub + ,in0_credit_val + ,in0_credit_frac + ,in_reserve_expiration + ,in_gc_date), + (in1_reserve_pub + ,in1_credit_val + ,in1_credit_frac ,in_reserve_expiration ,in_gc_date), (in2_reserve_pub @@ -408,310 +361,284 @@ BEGIN ,in3_credit_val ,in3_credit_frac ,in_reserve_expiration - ,in_gc_date), - (in4_reserve_pub - ,in4_credit_val - ,in4_credit_frac - ,in_reserve_expiration ,in_gc_date) - ON CONFLICT DO NOTHING - RETURNING reserve_uuid,reserve_pub) - SELECT * FROM reserve_changes; + ON CONFLICT DO NOTHING + RETURNING reserve_uuid,reserve_pub) + SELECT reserve_uuid, reserve_pub FROM reserve_changes; - WHILE k < 4 LOOP + k=0; + <<loop_reserve>> LOOP FETCH FROM curs_reserve_exist INTO i; - IF FOUND + IF NOT FOUND THEN - IF in_reserve_pub = i.reserve_pub - THEN - ruuid = i.reserve_uuid; - IF in_reserve_pub - NOT IN (in2_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub) - THEN - out_reserve_found = FALSE; - END IF; - END IF; - IF in2_reserve_pub = i.reserve_pub - THEN - ruuid2 = i.reserve_uuid; - IF in2_reserve_pub - NOT IN (in_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub) - THEN - out_reserve_found2 = FALSE; - END IF; - END IF; - IF in3_reserve_pub = i.reserve_pub - THEN - ruuid3 = i.reserve_uuid; - IF in3_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in4_reserve_pub) - THEN - out_reserve_found3 = FALSE; - END IF; - END IF; - IF in4_reserve_pub = i.reserve_pub - THEN - ruuid4 = i.reserve_uuid; - IF in4_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in3_reserve_pub) - THEN - out_reserve_found4 = FALSE; - END IF; - END IF; + EXIT loop_reserve; END IF; - k=k+1; - END LOOP; + + <<loop_k>> LOOP + CASE k + WHEN 0 THEN + k = k + 1; + IF in0_reserve_pub = i.reserve_pub + THEN + ruuid0 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 1 THEN + k = k + 1; + IF in1_reserve_pub = i.reserve_pub + THEN + ruuid1 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 2 THEN + k = k + 1; + IF in2_reserve_pub = i.reserve_pub + THEN + ruuid2 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 3 THEN + IF in3_reserve_pub = i.reserve_pub + THEN + ruuid3 = i.reserve_uuid; + END IF; + EXIT loop_reserve; + END CASE; + END LOOP loop_k; + END LOOP loop_reserve; + CLOSE curs_reserve_exist; - k=0; OPEN curs_transaction_exist FOR - WITH reserve_in_changes AS ( + WITH reserve_transaction AS ( INSERT INTO reserves_in - (reserve_pub - ,wire_reference - ,credit_val - ,credit_frac - ,exchange_account_section - ,wire_source_h_payto - ,execution_date) + (reserve_pub + ,wire_reference + ,credit_val + ,credit_frac + ,exchange_account_section + ,wire_source_h_payto + ,execution_date) VALUES - (in_reserve_pub - ,in_wire_ref - ,in_credit_val - ,in_credit_frac - ,in_exchange_account_name - ,in_wire_source_h_payto - ,in_execution_date), - (in2_reserve_pub - ,in2_wire_ref - ,in2_credit_val - ,in2_credit_frac - ,in2_exchange_account_name - ,in2_wire_source_h_payto - ,in2_execution_date), - (in3_reserve_pub - ,in3_wire_ref - ,in3_credit_val - ,in3_credit_frac - ,in3_exchange_account_name - ,in3_wire_source_h_payto - ,in3_execution_date), - (in4_reserve_pub - ,in4_wire_ref - ,in4_credit_val - ,in4_credit_frac - ,in4_exchange_account_name - ,in4_wire_source_h_payto - ,in4_execution_date) - ON CONFLICT DO NOTHING - RETURNING reserve_pub) - SELECT * FROM reserve_in_changes; - WHILE k < 4 LOOP + (in0_reserve_pub + ,in0_wire_ref + ,in0_credit_val + ,in0_credit_frac + ,in0_exchange_account_name + ,in0_wire_source_h_payto + ,in0_execution_date), + (in1_reserve_pub + ,in1_wire_ref + ,in1_credit_val + ,in1_credit_frac + ,in1_exchange_account_name + ,in1_wire_source_h_payto + ,in1_execution_date), + (in2_reserve_pub + ,in2_wire_ref + ,in2_credit_val + ,in2_credit_frac + ,in2_exchange_account_name + ,in2_wire_source_h_payto + ,in2_execution_date), + (in3_reserve_pub + ,in3_wire_ref + ,in3_credit_val + ,in3_credit_frac + ,in3_exchange_account_name + ,in3_wire_source_h_payto + ,in3_execution_date) + ON CONFLICT DO NOTHING + RETURNING reserve_pub) + SELECT reserve_pub FROM reserve_transaction; + + k=0; + <<loop_transaction>> LOOP FETCH FROM curs_transaction_exist INTO i; - IF FOUND + IF NOT FOUND THEN - IF in_reserve_pub = i.reserve_pub - THEN - transaction_duplicate = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in_notify); - END IF; - IF in2_reserve_pub = i.reserve_pub - THEN - transaction_duplicate2 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in2_notify); - END IF; - IF in3_reserve_pub = i.reserve_pub - THEN - transaction_duplicate3 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in3_notify); - END IF; - IF in4_reserve_pub = i.reserve_pub - THEN - transaction_duplicate4 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in4_notify); - END IF; + EXIT loop_transaction; END IF; - k=k+1; - END LOOP; - /**ROLLBACK TRANSACTION IN SORTED PROCEDURE IS IT PROSSIBLE ?**/ - /*IF transaction_duplicate - OR transaction_duplicate2 - OR transaction_duplicate3 - OR transaction_duplicate4 - THEN - RAISE EXCEPTION 'Reserve did not exist, but INSERT into reserves_in gave conflict'; - ROLLBACK; - CLOSE curs_transaction_exist; - RETURN; - END IF;*/ + + <<loop2_k>> LOOP + CASE k + WHEN 0 THEN + k = k + 1; + IF in0_reserve_pub = i.reserve_pub + THEN + transaction_duplicate0 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in0_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 1 THEN + k = k + 1; + IF in1_reserve_pub = i.reserve_pub + THEN + transaction_duplicate1 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in1_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 2 THEN + k = k + 1; + IF in2_reserve_pub = i.reserve_pub + THEN + transaction_duplicate2 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in2_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 3 THEN + IF in3_reserve_pub = i.reserve_pub + THEN + transaction_duplicate3 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in3_notify); + END IF; + EXIT loop_transaction; + END CASE; + END LOOP loop2_k; + END LOOP loop_transaction; + CLOSE curs_transaction_exist; - RETURN; + RETURN; END $$; + CREATE OR REPLACE FUNCTION exchange_do_batch8_reserves_insert( IN in_gc_date INT8, IN in_reserve_expiration INT8, - IN in_reserve_pub BYTEA, - IN in_wire_ref INT8, - IN in_credit_val INT8, - IN in_credit_frac INT4, - IN in_exchange_account_name VARCHAR, - IN in_execution_date INT8, - IN in_wire_source_h_payto BYTEA, ---h_payto - IN in_payto_uri VARCHAR, - IN in_notify text, - IN in2_notify text, - IN in3_notify text, - IN in4_notify text, - IN in5_notify text, - IN in6_notify text, - IN in7_notify text, - IN in8_notify text, + IN in0_reserve_pub BYTEA, + IN in0_wire_ref INT8, + IN in0_credit_val INT8, + IN in0_credit_frac INT4, + IN in0_exchange_account_name VARCHAR, + IN in0_execution_date INT8, + IN in0_wire_source_h_payto BYTEA, + IN in0_payto_uri VARCHAR, + IN in0_notify TEXT, + IN in1_reserve_pub BYTEA, + IN in1_wire_ref INT8, + IN in1_credit_val INT8, + IN in1_credit_frac INT4, + IN in1_exchange_account_name VARCHAR, + IN in1_execution_date INT8, + IN in1_wire_source_h_payto BYTEA, + IN in1_payto_uri VARCHAR, + IN in1_notify TEXT, IN in2_reserve_pub BYTEA, IN in2_wire_ref INT8, IN in2_credit_val INT8, IN in2_credit_frac INT4, IN in2_exchange_account_name VARCHAR, IN in2_execution_date INT8, - IN in2_wire_source_h_payto BYTEA, ---h_payto + IN in2_wire_source_h_payto BYTEA, IN in2_payto_uri VARCHAR, + IN in2_notify TEXT, IN in3_reserve_pub BYTEA, IN in3_wire_ref INT8, IN in3_credit_val INT8, IN in3_credit_frac INT4, IN in3_exchange_account_name VARCHAR, IN in3_execution_date INT8, - IN in3_wire_source_h_payto BYTEA, ---h_payto + IN in3_wire_source_h_payto BYTEA, IN in3_payto_uri VARCHAR, + IN in3_notify TEXT, IN in4_reserve_pub BYTEA, IN in4_wire_ref INT8, IN in4_credit_val INT8, IN in4_credit_frac INT4, IN in4_exchange_account_name VARCHAR, IN in4_execution_date INT8, - IN in4_wire_source_h_payto BYTEA, ---h_payto + IN in4_wire_source_h_payto BYTEA, IN in4_payto_uri VARCHAR, + IN in4_notify TEXT, IN in5_reserve_pub BYTEA, IN in5_wire_ref INT8, IN in5_credit_val INT8, IN in5_credit_frac INT4, IN in5_exchange_account_name VARCHAR, IN in5_execution_date INT8, - IN in5_wire_source_h_payto BYTEA, ---h_payto + IN in5_wire_source_h_payto BYTEA, IN in5_payto_uri VARCHAR, + IN in5_notify TEXT, IN in6_reserve_pub BYTEA, IN in6_wire_ref INT8, IN in6_credit_val INT8, IN in6_credit_frac INT4, IN in6_exchange_account_name VARCHAR, IN in6_execution_date INT8, - IN in6_wire_source_h_payto BYTEA, ---h_payto + IN in6_wire_source_h_payto BYTEA, IN in6_payto_uri VARCHAR, + IN in6_notify TEXT, IN in7_reserve_pub BYTEA, IN in7_wire_ref INT8, IN in7_credit_val INT8, IN in7_credit_frac INT4, IN in7_exchange_account_name VARCHAR, IN in7_execution_date INT8, - IN in7_wire_source_h_payto BYTEA, ---h_payto + IN in7_wire_source_h_payto BYTEA, IN in7_payto_uri VARCHAR, - IN in8_reserve_pub BYTEA, - IN in8_wire_ref INT8, - IN in8_credit_val INT8, - IN in8_credit_frac INT4, - IN in8_exchange_account_name VARCHAR, - IN in8_execution_date INT8, - IN in8_wire_source_h_payto BYTEA, ---h_payto - IN in8_payto_uri VARCHAR, - OUT out_reserve_found BOOLEAN, - OUT out_reserve_found2 BOOLEAN, - OUT out_reserve_found3 BOOLEAN, - OUT out_reserve_found4 BOOLEAN, - OUT out_reserve_found5 BOOLEAN, - OUT out_reserve_found6 BOOLEAN, - OUT out_reserve_found7 BOOLEAN, - OUT out_reserve_found8 BOOLEAN, - OUT transaction_duplicate BOOLEAN, + IN in7_notify TEXT, + OUT transaction_duplicate0 BOOLEAN, + OUT transaction_duplicate1 BOOLEAN, OUT transaction_duplicate2 BOOLEAN, OUT transaction_duplicate3 BOOLEAN, OUT transaction_duplicate4 BOOLEAN, OUT transaction_duplicate5 BOOLEAN, OUT transaction_duplicate6 BOOLEAN, OUT transaction_duplicate7 BOOLEAN, - OUT transaction_duplicate8 BOOLEAN, - OUT ruuid INT8, + OUT ruuid0 INT8, + OUT ruuid1 INT8, OUT ruuid2 INT8, OUT ruuid3 INT8, OUT ruuid4 INT8, OUT ruuid5 INT8, OUT ruuid6 INT8, - OUT ruuid7 INT8, - OUT ruuid8 INT8) + OUT ruuid7 INT8) LANGUAGE plpgsql AS $$ DECLARE - curs_reserve_existed refcursor; + curs_reserve_exist REFCURSOR; DECLARE k INT8; DECLARE - curs_transaction_existed refcursor; + curs_transaction_exist REFCURSOR; DECLARE i RECORD; DECLARE r RECORD; BEGIN ---INITIALIZATION - transaction_duplicate=TRUE; + transaction_duplicate0=TRUE; + transaction_duplicate1=TRUE; transaction_duplicate2=TRUE; transaction_duplicate3=TRUE; transaction_duplicate4=TRUE; transaction_duplicate5=TRUE; transaction_duplicate6=TRUE; transaction_duplicate7=TRUE; - transaction_duplicate8=TRUE; - out_reserve_found = TRUE; - out_reserve_found2 = TRUE; - out_reserve_found3 = TRUE; - out_reserve_found4 = TRUE; - out_reserve_found5 = TRUE; - out_reserve_found6 = TRUE; - out_reserve_found7 = TRUE; - out_reserve_found8 = TRUE; - ruuid=0; - ruuid2=0; - ruuid3=0; - ruuid4=0; - ruuid5=0; - ruuid6=0; - ruuid7=0; - ruuid8=0; - k=0; - --SIMPLE INSERT ON CONFLICT DO NOTHING INSERT INTO wire_targets (wire_target_h_payto ,payto_uri) VALUES - (in_wire_source_h_payto - ,in_payto_uri), + (in0_wire_source_h_payto + ,in0_payto_uri), + (in1_wire_source_h_payto + ,in1_payto_uri), (in2_wire_source_h_payto ,in2_payto_uri), (in3_wire_source_h_payto @@ -723,12 +650,10 @@ BEGIN (in6_wire_source_h_payto ,in6_payto_uri), (in7_wire_source_h_payto - ,in7_payto_uri), - (in8_wire_source_h_payto - ,in8_payto_uri) + ,in7_payto_uri) ON CONFLICT DO NOTHING; - OPEN curs_reserve_existed FOR + OPEN curs_reserve_exist FOR WITH reserve_changes AS ( INSERT INTO reserves (reserve_pub @@ -737,9 +662,14 @@ BEGIN ,expiration_date ,gc_date) VALUES - (in_reserve_pub - ,in_credit_val - ,in_credit_frac + (in0_reserve_pub + ,in0_credit_val + ,in0_credit_frac + ,in_reserve_expiration + ,in_gc_date), + (in1_reserve_pub + ,in1_credit_val + ,in1_credit_frac ,in_reserve_expiration ,in_gc_date), (in2_reserve_pub @@ -771,295 +701,265 @@ BEGIN ,in7_credit_val ,in7_credit_frac ,in_reserve_expiration - ,in_gc_date), - (in8_reserve_pub - ,in8_credit_val - ,in8_credit_frac - ,in_reserve_expiration ,in_gc_date) - ON CONFLICT DO NOTHING - RETURNING reserve_uuid,reserve_pub) - SELECT * FROM reserve_changes; - - WHILE k < 8 LOOP + ON CONFLICT DO NOTHING + RETURNING + reserve_uuid + ,reserve_pub) + SELECT + reserve_uuid + ,reserve_pub + FROM reserve_changes; - FETCH FROM curs_reserve_existed INTO i; - IF FOUND + k=0; + <<loop_reserve>> LOOP + FETCH FROM curs_reserve_exist INTO i; + IF NOT FOUND THEN - IF in_reserve_pub = i.reserve_pub - THEN - ruuid = i.reserve_uuid; - IF in_reserve_pub - NOT IN (in2_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub - ,in5_reserve_pub - ,in6_reserve_pub - ,in7_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found = FALSE; - END IF; - END IF; - IF in2_reserve_pub = i.reserve_pub - THEN - ruuid2 = i.reserve_uuid; - IF in2_reserve_pub - NOT IN (in_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub - ,in5_reserve_pub - ,in6_reserve_pub - ,in7_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found2 = FALSE; - END IF; - END IF; - IF in3_reserve_pub = i.reserve_pub - THEN - ruuid3 = i.reserve_uuid; - IF in3_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in4_reserve_pub - ,in5_reserve_pub - ,in6_reserve_pub - ,in7_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found3 = FALSE; - END IF; - END IF; - IF in4_reserve_pub = i.reserve_pub - THEN - ruuid4 = i.reserve_uuid; - IF in4_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in3_reserve_pub - ,in5_reserve_pub - ,in6_reserve_pub - ,in7_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found4 = FALSE; - END IF; - END IF; - IF in5_reserve_pub = i.reserve_pub - THEN - ruuid5 = i.reserve_uuid; - IF in5_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub - ,in6_reserve_pub - ,in7_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found5 = FALSE; - END IF; - END IF; - IF in6_reserve_pub = i.reserve_pub - THEN - ruuid6 = i.reserve_uuid; - IF in6_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub - ,in5_reserve_pub - ,in7_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found6 = FALSE; - END IF; - END IF; - IF in7_reserve_pub = i.reserve_pub - THEN - ruuid7 = i.reserve_uuid; - IF in7_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub - ,in5_reserve_pub - ,in6_reserve_pub - ,in8_reserve_pub) - THEN - out_reserve_found7 = FALSE; - END IF; - END IF; - IF in8_reserve_pub = i.reserve_pub - THEN - ruuid8 = i.reserve_uuid; - IF in8_reserve_pub - NOT IN (in_reserve_pub - ,in2_reserve_pub - ,in3_reserve_pub - ,in4_reserve_pub - ,in5_reserve_pub - ,in6_reserve_pub - ,in7_reserve_pub) - THEN - out_reserve_found8 = FALSE; - END IF; - END IF; + EXIT loop_reserve; END IF; - k=k+1; - END LOOP; - CLOSE curs_reserve_existed; + <<loop_k>> LOOP + CASE k + WHEN 0 THEN + k = k + 1; + IF in0_reserve_pub = i.reserve_pub + THEN + ruuid0 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 1 THEN + k = k + 1; + IF in1_reserve_pub = i.reserve_pub + THEN + ruuid1 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 2 THEN + k = k + 1; + IF in2_reserve_pub = i.reserve_pub + THEN + ruuid2 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 3 THEN + k = k + 1; + IF in3_reserve_pub = i.reserve_pub + THEN + ruuid3 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 4 THEN + k = k + 1; + IF in4_reserve_pub = i.reserve_pub + THEN + ruuid4 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 5 THEN + k = k + 1; + IF in5_reserve_pub = i.reserve_pub + THEN + ruuid5 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 6 THEN + k = k + 1; + IF in6_reserve_pub = i.reserve_pub + THEN + ruuid6 = i.reserve_uuid; + CONTINUE loop_reserve; + END IF; + CONTINUE loop_k; + WHEN 7 THEN + IF in7_reserve_pub = i.reserve_pub + THEN + ruuid7 = i.reserve_uuid; + END IF; + EXIT loop_reserve; + END CASE; + END LOOP loop_k; + END LOOP loop_reserve; - k=0; - OPEN curs_transaction_existed FOR - WITH reserve_in_changes AS ( + CLOSE curs_reserve_exist; + + OPEN curs_transaction_exist FOR + WITH reserve_transaction AS ( INSERT INTO reserves_in - (reserve_pub - ,wire_reference - ,credit_val - ,credit_frac - ,exchange_account_section - ,wire_source_h_payto - ,execution_date) + (reserve_pub + ,wire_reference + ,credit_val + ,credit_frac + ,exchange_account_section + ,wire_source_h_payto + ,execution_date) VALUES - (in_reserve_pub - ,in_wire_ref - ,in_credit_val - ,in_credit_frac - ,in_exchange_account_name - ,in_wire_source_h_payto - ,in_execution_date), - (in2_reserve_pub - ,in2_wire_ref - ,in2_credit_val - ,in2_credit_frac - ,in2_exchange_account_name - ,in2_wire_source_h_payto - ,in2_execution_date), - (in3_reserve_pub - ,in3_wire_ref - ,in3_credit_val - ,in3_credit_frac - ,in3_exchange_account_name - ,in3_wire_source_h_payto - ,in3_execution_date), - (in4_reserve_pub - ,in4_wire_ref - ,in4_credit_val - ,in4_credit_frac - ,in4_exchange_account_name - ,in4_wire_source_h_payto - ,in4_execution_date), - (in5_reserve_pub - ,in5_wire_ref - ,in5_credit_val - ,in5_credit_frac - ,in5_exchange_account_name - ,in5_wire_source_h_payto - ,in5_execution_date), - (in6_reserve_pub - ,in6_wire_ref - ,in6_credit_val - ,in6_credit_frac - ,in6_exchange_account_name - ,in6_wire_source_h_payto - ,in6_execution_date), - (in7_reserve_pub - ,in7_wire_ref - ,in7_credit_val - ,in7_credit_frac - ,in7_exchange_account_name - ,in7_wire_source_h_payto - ,in7_execution_date), - (in8_reserve_pub - ,in8_wire_ref - ,in8_credit_val - ,in8_credit_frac - ,in8_exchange_account_name - ,in8_wire_source_h_payto - ,in8_execution_date) - ON CONFLICT DO NOTHING - RETURNING reserve_pub) - SELECT * FROM reserve_in_changes; + (in0_reserve_pub + ,in0_wire_ref + ,in0_credit_val + ,in0_credit_frac + ,in0_exchange_account_name + ,in0_wire_source_h_payto + ,in0_execution_date), + (in1_reserve_pub + ,in1_wire_ref + ,in1_credit_val + ,in1_credit_frac + ,in1_exchange_account_name + ,in1_wire_source_h_payto + ,in1_execution_date), + (in2_reserve_pub + ,in2_wire_ref + ,in2_credit_val + ,in2_credit_frac + ,in2_exchange_account_name + ,in2_wire_source_h_payto + ,in2_execution_date), + (in3_reserve_pub + ,in3_wire_ref + ,in3_credit_val + ,in3_credit_frac + ,in3_exchange_account_name + ,in3_wire_source_h_payto + ,in3_execution_date), + (in4_reserve_pub + ,in4_wire_ref + ,in4_credit_val + ,in4_credit_frac + ,in4_exchange_account_name + ,in4_wire_source_h_payto + ,in4_execution_date), + (in5_reserve_pub + ,in5_wire_ref + ,in5_credit_val + ,in5_credit_frac + ,in5_exchange_account_name + ,in5_wire_source_h_payto + ,in5_execution_date), + (in6_reserve_pub + ,in6_wire_ref + ,in6_credit_val + ,in6_credit_frac + ,in6_exchange_account_name + ,in6_wire_source_h_payto + ,in6_execution_date), + (in7_reserve_pub + ,in7_wire_ref + ,in7_credit_val + ,in7_credit_frac + ,in7_exchange_account_name + ,in7_wire_source_h_payto + ,in7_execution_date) + ON CONFLICT DO NOTHING + RETURNING reserve_pub) + SELECT reserve_pub FROM reserve_transaction; - WHILE k < 8 LOOP - FETCH FROM curs_transaction_existed INTO r; - IF FOUND + k=0; + <<loop_transaction>> LOOP + FETCH FROM curs_transaction_exist INTO i; + IF NOT FOUND THEN - IF in_reserve_pub = r.reserve_pub - THEN - transaction_duplicate = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in_notify); - END IF; - IF in2_reserve_pub = r.reserve_pub - THEN - transaction_duplicate2 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in2_notify); - END IF; - IF in3_reserve_pub = r.reserve_pub - THEN - transaction_duplicate3 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in3_notify); - END IF; - IF in4_reserve_pub = r.reserve_pub - THEN - transaction_duplicate4 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in4_notify); - END IF; - IF in5_reserve_pub = r.reserve_pub - THEN - transaction_duplicate5 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in5_notify); - END IF; - IF in6_reserve_pub = r.reserve_pub - THEN - transaction_duplicate6 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in6_notify); - END IF; - IF in7_reserve_pub = r.reserve_pub - THEN - transaction_duplicate7 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in7_notify); - END IF; - IF in8_reserve_pub = r.reserve_pub - THEN - transaction_duplicate8 = FALSE; - EXECUTE FORMAT ( - 'NOTIFY %s' - ,in8_notify); - END IF; + EXIT loop_transaction; END IF; - k=k+1; - END LOOP; - /* IF transaction_duplicate - OR transaction_duplicate2 - OR transaction_duplicate3 - OR transaction_duplicate4 - OR transaction_duplicate5 - OR transaction_duplicate6 - OR transaction_duplicate7 - OR transaction_duplicate8 - THEN - CLOSE curs_transaction_existed; - ROLLBACK; - RETURN; - END IF;*/ - CLOSE curs_transaction_existed; + + <<loop2_k>> LOOP + CASE k + WHEN 0 THEN + k = k + 1; + IF in0_reserve_pub = i.reserve_pub + THEN + transaction_duplicate0 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in0_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 1 THEN + k = k + 1; + IF in1_reserve_pub = i.reserve_pub + THEN + transaction_duplicate1 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in1_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 2 THEN + k = k + 1; + IF in2_reserve_pub = i.reserve_pub + THEN + transaction_duplicate2 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in2_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 3 THEN + k = k + 1; + IF in3_reserve_pub = i.reserve_pub + THEN + transaction_duplicate3 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in3_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 4 THEN + k = k + 1; + IF in4_reserve_pub = i.reserve_pub + THEN + transaction_duplicate4 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in4_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 5 THEN + k = k + 1; + IF in5_reserve_pub = i.reserve_pub + THEN + transaction_duplicate5 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in5_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 6 THEN + k = k + 1; + IF in6_reserve_pub = i.reserve_pub + THEN + transaction_duplicate6 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in6_notify); + CONTINUE loop_transaction; + END IF; + CONTINUE loop2_k; + WHEN 7 THEN + IF in7_reserve_pub = i.reserve_pub + THEN + transaction_duplicate7 = FALSE; + EXECUTE FORMAT ( + 'NOTIFY %s' + ,in7_notify); + END IF; + EXIT loop_transaction; + END CASE; + END LOOP loop2_k; + END LOOP loop_transaction; + + CLOSE curs_transaction_exist; RETURN; END $$; |