some modifications in sql code
This commit is contained in:
parent
b6b80e61f4
commit
48b7d45959
@ -282,13 +282,15 @@ check_PROGRAMS = \
|
|||||||
bench-db-postgres\
|
bench-db-postgres\
|
||||||
perf-exchangedb-reserves-in-insert-postgres\
|
perf-exchangedb-reserves-in-insert-postgres\
|
||||||
test-exchangedb-by-j-postgres\
|
test-exchangedb-by-j-postgres\
|
||||||
test-exchangedb-batch-reserves-in-insert-postgres
|
test-exchangedb-batch-reserves-in-insert-postgres\
|
||||||
|
test-exchangedb-populate-table-postgres
|
||||||
AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
|
AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
|
||||||
TESTS = \
|
TESTS = \
|
||||||
test-exchangedb-postgres\
|
test-exchangedb-postgres\
|
||||||
test-exchangedb-by-j-postgres\
|
test-exchangedb-by-j-postgres\
|
||||||
perf-exchangedb-reserves-in-insert-postgres\
|
perf-exchangedb-reserves-in-insert-postgres\
|
||||||
test-exchangedb-batch-reserves-in-insert-postgres
|
test-exchangedb-batch-reserves-in-insert-postgres\
|
||||||
|
test-exchangedb-populate-table-postgres
|
||||||
|
|
||||||
|
|
||||||
test_exchangedb_postgres_SOURCES = \
|
test_exchangedb_postgres_SOURCES = \
|
||||||
@ -361,6 +363,27 @@ bench_db_postgres_LDADD = \
|
|||||||
-lgnunetutil \
|
-lgnunetutil \
|
||||||
$(XLIB)
|
$(XLIB)
|
||||||
|
|
||||||
|
test_exchangedb_populate_table_postgres_SOURCES = \
|
||||||
|
test_exchangedb_populate_table.c
|
||||||
|
test_exchangedb_populate_table_postgres_LDADD = \
|
||||||
|
libtalerexchangedb.la \
|
||||||
|
$(top_builddir)/src/json/libtalerjson.la \
|
||||||
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
|
$(top_builddir)/src/pq/libtalerpq.la \
|
||||||
|
-ljansson \
|
||||||
|
-lgnunetjson \
|
||||||
|
-lgnunetutil \
|
||||||
|
$(XLIB)
|
||||||
|
|
||||||
|
bench_db_postgres_SOURCES = \
|
||||||
|
bench_db.c
|
||||||
|
bench_db_postgres_LDADD = \
|
||||||
|
libtalerexchangedb.la \
|
||||||
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
|
$(top_builddir)/src/pq/libtalerpq.la \
|
||||||
|
-lgnunetpq \
|
||||||
|
-lgnunetutil \
|
||||||
|
$(XLIB)
|
||||||
|
|
||||||
EXTRA_test_exchangedb_postgres_DEPENDENCIES = \
|
EXTRA_test_exchangedb_postgres_DEPENDENCIES = \
|
||||||
libtaler_plugin_exchangedb_postgres.la
|
libtaler_plugin_exchangedb_postgres.la
|
||||||
|
221
src/exchangedb/exchange_do_batch2_reserves_in_insert.sql
Normal file
221
src/exchangedb/exchange_do_batch2_reserves_in_insert.sql
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
--
|
||||||
|
-- This file is part of TALER
|
||||||
|
-- Copyright (C) 2014--2022 Taler Systems SA
|
||||||
|
--
|
||||||
|
-- TALER is free software; you can redistribute it and/or modify it under the
|
||||||
|
-- terms of the GNU General Public License as published by the Free Software
|
||||||
|
-- Foundation; either version 3, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU General Public License along with
|
||||||
|
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
--
|
||||||
|
CREATE OR REPLACE FUNCTION exchange_do_batch2_reserves_insert(
|
||||||
|
IN in_reserve_pub BYTEA,
|
||||||
|
IN in_expiration_date INT8,
|
||||||
|
IN in_gc_date INT8,
|
||||||
|
IN in_wire_ref INT8,
|
||||||
|
IN in_credit_val INT8,
|
||||||
|
IN in_credit_frac INT4,
|
||||||
|
IN in_exchange_account_name VARCHAR,
|
||||||
|
IN in_exectution_date INT8,
|
||||||
|
IN in_wire_source_h_payto BYTEA, ---h_payto
|
||||||
|
IN in_payto_uri VARCHAR,
|
||||||
|
IN in_reserve_expiration INT8,
|
||||||
|
IN in_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_exectution_date INT8,
|
||||||
|
IN in2_wire_source_h_payto BYTEA, ---h_payto
|
||||||
|
IN in2_payto_uri VARCHAR,
|
||||||
|
IN in2_reserve_expiration INT8,
|
||||||
|
OUT out_reserve_found BOOLEAN,
|
||||||
|
OUT out_reserve_found2 BOOLEAN,
|
||||||
|
OUT transaction_duplicate BOOLEAN,
|
||||||
|
OUT transaction_duplicate2 BOOLEAN,
|
||||||
|
OUT ruuid INT8,
|
||||||
|
OUT ruuid2 INT8)
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
curs_reserve_exist CURSOR
|
||||||
|
FOR SELECT reserve_pub
|
||||||
|
FROM reserves
|
||||||
|
WHERE ruuid = reserves.reserve_uuid OR ruuid2 = reserves.reserve_uuid;
|
||||||
|
|
||||||
|
curs_transaction_exist CURSOR
|
||||||
|
FOR SELECT reserve_pub
|
||||||
|
FROM reserves_in
|
||||||
|
WHERE in_reserve_pub = reserves_in.reserve_pub
|
||||||
|
OR reserves_in.reserve_pub = in2_reserve_pub;
|
||||||
|
|
||||||
|
i RECORD;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
--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),
|
||||||
|
(in2_wire_source_h_payto
|
||||||
|
,in2_payto_uri)
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
|
||||||
|
FOR k IN curs_reserve_exist
|
||||||
|
LOOP
|
||||||
|
IF in_reserve_pub = k.reserve_pub
|
||||||
|
THEN
|
||||||
|
out_reserve_found = TRUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF in2_reserve_pub = k.reserve_pub
|
||||||
|
THEN
|
||||||
|
out_reserve_found2 = TRUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF out_reserve_found AND out_reserve_found2
|
||||||
|
THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
|
||||||
|
IF out_reserve_found IS NULL
|
||||||
|
THEN
|
||||||
|
out_reserve_found=FALSE;
|
||||||
|
END IF;
|
||||||
|
IF out_reserve_found2 IS NULL
|
||||||
|
THEN
|
||||||
|
out_reserve_found2 = FALSE;
|
||||||
|
END IF;
|
||||||
|
IF out_reserve_found AND out_reserve_found2
|
||||||
|
THEN
|
||||||
|
transaction_duplicate = FALSE;
|
||||||
|
transaction_duplicate2 = FALSE;
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
/*LOOP TO STORE UUID*/
|
||||||
|
FOR i IN
|
||||||
|
WITH input_rows
|
||||||
|
(reserve_pub
|
||||||
|
,current_balance_val
|
||||||
|
,current_balance_frac
|
||||||
|
,expiration_date
|
||||||
|
,gc_date)
|
||||||
|
AS
|
||||||
|
(
|
||||||
|
VALUES
|
||||||
|
(in_reserve_pub
|
||||||
|
,in_credit_val
|
||||||
|
,in_credit_frac
|
||||||
|
,in_expiration_date
|
||||||
|
,in_gc_date),
|
||||||
|
(in2_reserve_pub
|
||||||
|
,in2_credit_val
|
||||||
|
,in2_credit_frac
|
||||||
|
,in_expiration_date
|
||||||
|
,in_gc_date)
|
||||||
|
), ins AS (
|
||||||
|
INSERT INTO reserves
|
||||||
|
(reserve_pub
|
||||||
|
,current_balance_val
|
||||||
|
,current_balance_frac
|
||||||
|
,expiration_date
|
||||||
|
,gc_date)
|
||||||
|
SELECT * FROM input_rows
|
||||||
|
ON CONFLICT DO NOTHING
|
||||||
|
RETURNING reserve_uuid)
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
reserve_uuid,
|
||||||
|
ROW_NUMBER () OVER (ORDER BY reserve_uuid)
|
||||||
|
FROM
|
||||||
|
ins
|
||||||
|
) x
|
||||||
|
LOOP
|
||||||
|
IF i.ROW_NUMBER = 1
|
||||||
|
THEN
|
||||||
|
ruuid = i.reserve_uuid;
|
||||||
|
ELSE
|
||||||
|
ruuid2 = i.reserve_uuid;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PERFORM pg_notify(in_notify, NULL);
|
||||||
|
|
||||||
|
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_expiration_date),
|
||||||
|
(in2_reserve_pub
|
||||||
|
,in2_wire_ref
|
||||||
|
,in2_credit_val
|
||||||
|
,in2_credit_frac
|
||||||
|
,in2_exchange_account_name
|
||||||
|
,in2_wire_source_h_payto
|
||||||
|
,in_expiration_date)
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
IF FOUND
|
||||||
|
THEN
|
||||||
|
transaction_duplicate = FALSE; /*HAPPY PATH THERE IS NO DUPLICATE TRANS AND NEW RESERVE*/
|
||||||
|
transaction_duplicate2 = FALSE;
|
||||||
|
RETURN;
|
||||||
|
ELSE
|
||||||
|
FOR l IN curs_transaction_exist
|
||||||
|
LOOP
|
||||||
|
IF in_reserve_pub = l.reserve_pub
|
||||||
|
THEN
|
||||||
|
transaction_duplicate = TRUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF in2_reserve_pub = l.reserve_pub
|
||||||
|
THEN
|
||||||
|
transaction_duplicate2 = TRUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF transaction_duplicate AND transaction_duplicate2
|
||||||
|
THEN
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF transaction_duplicate IS NULL
|
||||||
|
THEN
|
||||||
|
transaction_duplicate=FALSE;
|
||||||
|
END IF;
|
||||||
|
IF transaction_duplicate2 IS NULL
|
||||||
|
THEN
|
||||||
|
transaction_duplicate2 = FALSE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN;
|
||||||
|
END $$;
|
||||||
|
|
@ -13,7 +13,8 @@
|
|||||||
-- You should have received a copy of the GNU General Public License along with
|
-- You should have received a copy of the GNU General Public License along with
|
||||||
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
--
|
--
|
||||||
CREATE OR REPLACE FUNCTION batch_reserves_in(
|
|
||||||
|
CREATE OR REPLACE FUNCTION exchange_do_batch_reserves_in_insert(
|
||||||
IN in_reserve_pub BYTEA,
|
IN in_reserve_pub BYTEA,
|
||||||
IN in_expiration_date INT8,
|
IN in_expiration_date INT8,
|
||||||
IN in_gc_date INT8,
|
IN in_gc_date INT8,
|
||||||
@ -25,16 +26,22 @@ CREATE OR REPLACE FUNCTION batch_reserves_in(
|
|||||||
IN in_wire_source_h_payto BYTEA, ---h_payto
|
IN in_wire_source_h_payto BYTEA, ---h_payto
|
||||||
IN in_payto_uri VARCHAR,
|
IN in_payto_uri VARCHAR,
|
||||||
IN in_reserve_expiration INT8,
|
IN in_reserve_expiration INT8,
|
||||||
|
IN in_notify text,
|
||||||
OUT out_reserve_found BOOLEAN,
|
OUT out_reserve_found BOOLEAN,
|
||||||
OUT transaction_duplicate BOOLEAN,
|
OUT transaction_duplicate BOOLEAN,
|
||||||
OUT ruuid INT8)
|
OUT ruuid INT8)
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
|
||||||
my_amount_val INT8;
|
|
||||||
DECLARE
|
|
||||||
my_amount_frac INT4;
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
--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)
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
|
|
||||||
INSERT INTO reserves
|
INSERT INTO reserves
|
||||||
(reserve_pub
|
(reserve_pub
|
||||||
@ -50,6 +57,7 @@ BEGIN
|
|||||||
,in_gc_date)
|
,in_gc_date)
|
||||||
ON CONFLICT DO NOTHING
|
ON CONFLICT DO NOTHING
|
||||||
RETURNING reserve_uuid INTO ruuid;
|
RETURNING reserve_uuid INTO ruuid;
|
||||||
|
PERFORM pg_notify(in_notify, NULL);
|
||||||
|
|
||||||
IF FOUND
|
IF FOUND
|
||||||
THEN
|
THEN
|
||||||
@ -57,18 +65,10 @@ BEGIN
|
|||||||
out_reserve_found = FALSE;
|
out_reserve_found = FALSE;
|
||||||
ELSE
|
ELSE
|
||||||
-- We made no change, which means the reserve existed.
|
-- We made no change, which means the reserve existed.
|
||||||
out_reserve_found = TRUE;
|
out_reserve_found = TRUE; /*RESERVE EXISTED BUT WE DO NOT KNOW ANY INFORMATIONS ABOUT TRANSACTION, RETURN*/
|
||||||
|
RETURN;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
--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)
|
|
||||||
ON CONFLICT DO NOTHING;
|
|
||||||
|
|
||||||
INSERT INTO reserves_in
|
INSERT INTO reserves_in
|
||||||
(reserve_pub
|
(reserve_pub
|
||||||
,wire_reference
|
,wire_reference
|
||||||
@ -84,47 +84,14 @@ BEGIN
|
|||||||
,in_credit_frac
|
,in_credit_frac
|
||||||
,in_exchange_account_name
|
,in_exchange_account_name
|
||||||
,in_wire_source_h_payto
|
,in_wire_source_h_payto
|
||||||
,in_expiration_date);
|
,in_expiration_date)
|
||||||
|
ON CONFLICT DO NOTHING;
|
||||||
--IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED TRANSACTION
|
|
||||||
IF FOUND
|
IF FOUND
|
||||||
THEN
|
THEN
|
||||||
transaction_duplicate = FALSE;
|
transaction_duplicate = FALSE; /*HAPPY PATH THERE IS NO DUPLICATE TRANS AND NEW RESERVE*/
|
||||||
IF out_reserve_found
|
RETURN;
|
||||||
THEN
|
|
||||||
UPDATE reserves
|
|
||||||
SET
|
|
||||||
current_balance_frac = current_balance_frac+in_credit_frac
|
|
||||||
- CASE
|
|
||||||
WHEN current_balance_frac + in_credit_frac >= 100000000
|
|
||||||
THEN 100000000
|
|
||||||
ELSE 1
|
|
||||||
END
|
|
||||||
,current_balance_val = current_balance_val+in_credit_val
|
|
||||||
+ CASE
|
|
||||||
WHEN current_balance_frac + in_credit_frac >= 100000000
|
|
||||||
THEN 1
|
|
||||||
ELSE 0
|
|
||||||
END
|
|
||||||
,expiration_date=GREATEST(expiration_date,in_expiration_date)
|
|
||||||
,gc_date=GREATEST(gc_date,in_expiration_date)
|
|
||||||
WHERE reserves.reserve_pub=in_reserve_pub;
|
|
||||||
out_reserve_found = TRUE;
|
|
||||||
RETURN;
|
|
||||||
ELSE
|
|
||||||
out_reserve_found=FALSE;
|
|
||||||
RETURN;
|
|
||||||
END IF;
|
|
||||||
out_reserve_found = TRUE;
|
|
||||||
ELSE
|
ELSE
|
||||||
transaction_duplicate = TRUE;
|
transaction_duplicate = TRUE; /*HAPPY PATH IF THERE IS A DUPLICATE TRANS WE JUST NEED TO ROLLBACK COMPLAIN*/
|
||||||
IF out_reserve_found
|
RETURN;
|
||||||
THEN
|
|
||||||
out_reserve_found = TRUE;
|
|
||||||
RETURN;
|
|
||||||
ELSE
|
|
||||||
out_reserve_found = FALSE;
|
|
||||||
RETURN;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
END IF;
|
||||||
END $$;
|
END $$;
|
75
src/exchangedb/exchange_do_batch_reserves_update.sql
Normal file
75
src/exchangedb/exchange_do_batch_reserves_update.sql
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
--
|
||||||
|
-- This file is part of TALER
|
||||||
|
-- Copyright (C) 2014--2022 Taler Systems SA
|
||||||
|
--
|
||||||
|
-- TALER is free software; you can redistribute it and/or modify it under the
|
||||||
|
-- terms of the GNU General Public License as published by the Free Software
|
||||||
|
-- Foundation; either version 3, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU General Public License along with
|
||||||
|
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE OR REPLACE PROCEDURE exchange_do_batch_reserves_update(
|
||||||
|
IN in_reserve_pub BYTEA,
|
||||||
|
IN in_expiration_date INT8,
|
||||||
|
IN in_wire_ref INT8,
|
||||||
|
IN in_credit_val INT8,
|
||||||
|
IN in_credit_frac INT4,
|
||||||
|
IN in_exchange_account_name VARCHAR,
|
||||||
|
IN in_reserve_found BOOLEAN,
|
||||||
|
IN in_wire_source_h_payto BYTEA,
|
||||||
|
IN in_notify text) ---h_payto
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
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_expiration_date);
|
||||||
|
|
||||||
|
--IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED TRANSACTION
|
||||||
|
IF FOUND
|
||||||
|
THEN
|
||||||
|
-- transaction_duplicate = FALSE;
|
||||||
|
IF in_reserve_found
|
||||||
|
THEN
|
||||||
|
UPDATE reserves
|
||||||
|
SET
|
||||||
|
current_balance_frac = current_balance_frac+in_credit_frac
|
||||||
|
- CASE
|
||||||
|
WHEN current_balance_frac + in_credit_frac >= 100000000
|
||||||
|
THEN 100000000
|
||||||
|
ELSE 1
|
||||||
|
END
|
||||||
|
,current_balance_val = current_balance_val+in_credit_val
|
||||||
|
+ CASE
|
||||||
|
WHEN current_balance_frac + in_credit_frac >= 100000000
|
||||||
|
THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END
|
||||||
|
,expiration_date=GREATEST(expiration_date,in_expiration_date)
|
||||||
|
,gc_date=GREATEST(gc_date,in_expiration_date)
|
||||||
|
WHERE reserves.reserve_pub=in_reserve_pub;
|
||||||
|
END IF;
|
||||||
|
PERFORM pg_notify(in_notify, NULL);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
END $$;
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2022 Taler Systems SA
|
Copyright (C) 2022 Taler Systems SA
|
||||||
@ -93,7 +94,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
|
|||||||
",transaction_duplicate2"
|
",transaction_duplicate2"
|
||||||
",ruuid AS reserve_uuid"
|
",ruuid AS reserve_uuid"
|
||||||
",ruuid2 AS reserve_uuid2"
|
",ruuid2 AS reserve_uuid2"
|
||||||
" FROM batch2_reserves_insert"
|
" FROM exchange_do_batch2_reserves_insert"
|
||||||
" ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21);");
|
" ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21);");
|
||||||
expiry = GNUNET_TIME_absolute_to_timestamp (
|
expiry = GNUNET_TIME_absolute_to_timestamp (
|
||||||
GNUNET_TIME_absolute_add (reserves->execution_time.abs_time,
|
GNUNET_TIME_absolute_add (reserves->execution_time.abs_time,
|
||||||
@ -199,18 +200,18 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
|
|||||||
results[i] = (transaction_duplicate)
|
results[i] = (transaction_duplicate)
|
||||||
? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
|
? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
|
||||||
: GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
|
: GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
|
||||||
conflicts[i] = conflicted;
|
conflicts[i] = conflicted;
|
||||||
conflicts2[i] = conflicted2;
|
conflicts2[i] = conflicted2;
|
||||||
// fprintf(stdout, "%d", conflicts[i]);
|
// fprintf(stdout, "%d",conflicts[i]);
|
||||||
// fprintf(stdout, "%d", conflicts2[i]);
|
// fprintf(stdout, "%d", conflicts2[i]);
|
||||||
if ((! conflicts[i] && transaction_duplicate) || (! conflicts2[i] &&
|
if ((!conflicts[i] && transaction_duplicate) ||(!conflicts2[i] && transaction_duplicate2))
|
||||||
transaction_duplicate2))
|
{
|
||||||
{
|
GNUNET_break (0);
|
||||||
GNUNET_break (0);
|
TEH_PG_rollback (pg);
|
||||||
TEH_PG_rollback (pg);
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
}
|
||||||
}
|
need_update |= conflicted;
|
||||||
need_update |= conflicted |= conflicted2;
|
need_update2 |= conflicted2;
|
||||||
}
|
}
|
||||||
// commit
|
// commit
|
||||||
{
|
{
|
||||||
@ -237,7 +238,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
|
|||||||
enum GNUNET_DB_QueryStatus qs2;
|
enum GNUNET_DB_QueryStatus qs2;
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"reserves_in_add_transaction",
|
"reserves_in_add_transaction",
|
||||||
"SELECT batch_reserves_update"
|
"CALL exchange_do_batch_reserves_update"
|
||||||
" ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
|
" ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
|
||||||
for (unsigned int i = 0; i<reserves_length; i++)
|
for (unsigned int i = 0; i<reserves_length; i++)
|
||||||
{
|
{
|
||||||
|
@ -86,7 +86,7 @@ TEH_PG_batch_reserves_in_insert (
|
|||||||
"out_reserve_found AS conflicted"
|
"out_reserve_found AS conflicted"
|
||||||
",transaction_duplicate"
|
",transaction_duplicate"
|
||||||
",ruuid AS reserve_uuid"
|
",ruuid AS reserve_uuid"
|
||||||
" FROM batch_reserves_insert"
|
" FROM exchange_do_batch_reserves_in_insert"
|
||||||
" ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);");
|
" ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);");
|
||||||
expiry = GNUNET_TIME_absolute_to_timestamp (
|
expiry = GNUNET_TIME_absolute_to_timestamp (
|
||||||
GNUNET_TIME_absolute_add (reserves->execution_time.abs_time,
|
GNUNET_TIME_absolute_add (reserves->execution_time.abs_time,
|
||||||
@ -203,7 +203,7 @@ TEH_PG_batch_reserves_in_insert (
|
|||||||
enum GNUNET_DB_QueryStatus qs2;
|
enum GNUNET_DB_QueryStatus qs2;
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"reserves_in_add_transaction",
|
"reserves_in_add_transaction",
|
||||||
"SELECT batch_reserves_update"
|
"SELECT exchange_do_batch_reserves_update"
|
||||||
" ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
|
" ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
|
||||||
for (unsigned int i = 0; i<reserves_length; i++)
|
for (unsigned int i = 0; i<reserves_length; i++)
|
||||||
{
|
{
|
||||||
|
@ -35,7 +35,8 @@ SET search_path TO exchange;
|
|||||||
#include "exchange_do_reserve_open_deposit.sql"
|
#include "exchange_do_reserve_open_deposit.sql"
|
||||||
#include "exchange_do_reserve_open.sql"
|
#include "exchange_do_reserve_open.sql"
|
||||||
#include "exchange_do_insert_or_update_policy_details.sql"
|
#include "exchange_do_insert_or_update_policy_details.sql"
|
||||||
#include "exchange_do_batch_reserves_in.sql"
|
#include "exchange_do_batch_reserves_in_insert.sql"
|
||||||
|
#include "exchange_do_batch_reserves_update.sql"
|
||||||
|
#include "exchange_do_batch2_reserves_in_insert.sql"
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -83,15 +83,9 @@ run (void *cls)
|
|||||||
}
|
}
|
||||||
(void) plugin->drop_tables (plugin->cls);
|
(void) plugin->drop_tables (plugin->cls);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
plugin->create_tables (plugin->cls))
|
plugin->create_tables (plugin->cls,
|
||||||
{
|
true,
|
||||||
GNUNET_break (0);
|
num_partitions))
|
||||||
result = 77;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
if (GNUNET_OK !=
|
|
||||||
plugin->setup_partitions (plugin->cls,
|
|
||||||
num_partitions))
|
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
result = 77;
|
result = 77;
|
||||||
|
@ -92,17 +92,6 @@ run (void *cls)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned int i = 0; i< 7; i++)
|
|
||||||
|
|
||||||
if (GNUNET_OK !=
|
|
||||||
plugin->setup_partitions (plugin->cls,
|
|
||||||
num_partitions))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
result = 77;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i< 8; i++)
|
for (unsigned int i = 0; i< 8; i++)
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -134,7 +123,7 @@ run (void *cls)
|
|||||||
reserves[k].wire_reference = k;
|
reserves[k].wire_reference = k;
|
||||||
}
|
}
|
||||||
FAILIF (batch_size !=
|
FAILIF (batch_size !=
|
||||||
plugin->batch_reserves_in_insert (plugin->cls,
|
plugin->batch2_reserves_in_insert (plugin->cls,
|
||||||
reserves,
|
reserves,
|
||||||
batch_size,
|
batch_size,
|
||||||
results));
|
results));
|
||||||
|
Loading…
Reference in New Issue
Block a user