aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-01-17 12:22:11 +0100
committerChristian Grothoff <christian@grothoff.org>2020-01-17 12:25:11 +0100
commitd3fb16b38049d61ad5bb5271e43420421dd10d91 (patch)
treee027e3388ff56c7bea1e9b5c94ee10cf86a92584 /src
parent099884ee66fc642179c9ad799a61f0b1a6d8cdc9 (diff)
also cover drop/restart cases with psql logic
Diffstat (limited to 'src')
-rw-r--r--src/auditordb/Makefile.am4
-rw-r--r--src/auditordb/drop0000.sql49
-rw-r--r--src/auditordb/plugin_auditordb_postgres.c61
-rw-r--r--src/auditordb/restart0000.sql47
-rw-r--r--src/exchangedb/Makefile.am3
-rw-r--r--src/exchangedb/drop0000.sql50
-rw-r--r--src/exchangedb/exchangedb-postgres.conf1
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c34
8 files changed, 164 insertions, 85 deletions
diff --git a/src/auditordb/Makefile.am b/src/auditordb/Makefile.am
index 58aec5a84..1378c5496 100644
--- a/src/auditordb/Makefile.am
+++ b/src/auditordb/Makefile.am
@@ -15,7 +15,9 @@ sqldir = $(prefix)/share/taler/sql/auditor/
sql_DATA = \
0000.sql \
- 0001.sql
+ 0001.sql \
+ drop0000.sql \
+ restart0000.sql
EXTRA_DIST = \
auditordb-postgres.conf \
diff --git a/src/auditordb/drop0000.sql b/src/auditordb/drop0000.sql
new file mode 100644
index 000000000..2a2db9213
--- /dev/null
+++ b/src/auditordb/drop0000.sql
@@ -0,0 +1,49 @@
+--
+-- This file is part of TALER
+-- Copyright (C) 2014--2020 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/>
+--
+
+-- Everything in one big transaction
+BEGIN;
+
+-- This script DROPs all of the tables we create, including the
+-- versioning schema!
+--
+-- Unlike the other SQL files, it SHOULD be updated to reflect the
+-- latest requirements for dropping tables.
+
+-- Drops for 0001.sql
+DROP TABLE IF EXISTS auditor_predicted_result;
+DROP TABLE IF EXISTS auditor_historic_denomination_revenue;
+DROP TABLE IF EXISTS auditor_balance_summary;
+DROP TABLE IF EXISTS auditor_denomination_pending;
+DROP TABLE IF EXISTS auditor_reserve_balance;
+DROP TABLE IF EXISTS auditor_wire_fee_balance;
+DROP TABLE IF EXISTS auditor_reserves;
+DROP TABLE IF EXISTS auditor_progress_reserve;
+DROP TABLE IF EXISTS auditor_progress_aggregation;
+DROP TABLE IF EXISTS auditor_progress_deposit_confirmation;
+DROP TABLE IF EXISTS auditor_progress_coin;
+DROP TABLE IF EXISTS wire_auditor_progress;
+DROP TABLE IF EXISTS wire_auditor_account_progress;
+DROP TABLE IF EXISTS auditor_historic_reserve_summary CASCADE;
+DROP TABLE IF EXISTS auditor_denominations CASCADE;
+DROP TABLE IF EXISTS deposit_confirmations CASCADE;
+DROP TABLE IF EXISTS auditor_exchanges CASCADE;
+
+-- Drop versioning (0000.sql)
+DROP SCHEMA IF EXISTS _v CASCADE;
+
+-- And we're out of here...
+COMMIT;
diff --git a/src/auditordb/plugin_auditordb_postgres.c b/src/auditordb/plugin_auditordb_postgres.c
index 52488fd2c..0d552ff12 100644
--- a/src/auditordb/plugin_auditordb_postgres.c
+++ b/src/auditordb/plugin_auditordb_postgres.c
@@ -113,69 +113,20 @@ postgres_drop_tables (void *cls,
int drop_exchangelist)
{
struct PostgresClosure *pc = cls;
- struct GNUNET_PQ_ExecuteStatement es[] = {
- GNUNET_PQ_make_execute ("DELETE FROM auditor_predicted_result;"),
- GNUNET_PQ_make_execute (
- "DELETE FROM auditor_historic_denomination_revenue;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_balance_summary;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_denomination_pending;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_reserve_balance;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_wire_fee_balance;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_reserves;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_progress_reserve;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_progress_aggregation;"),
- GNUNET_PQ_make_execute (
- "DELETE FROM auditor_progress_deposit_confirmation;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_progress_coin;"),
- GNUNET_PQ_make_execute ("DELETE FROM wire_auditor_progress;"),
- GNUNET_PQ_make_execute ("DELETE FROM wire_auditor_account_progress;"),
- GNUNET_PQ_make_execute ("DELETE FROM auditor_historic_reserve_summary;"),
- GNUNET_PQ_EXECUTE_STATEMENT_END
- };
- struct GNUNET_PQ_ExecuteStatement esx[] = {
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_predicted_result;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS auditor_historic_denomination_revenue;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_balance_summary;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS auditor_denomination_pending;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserve_balance;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_wire_fee_balance;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserves;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_progress_reserve;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS auditor_progress_aggregation;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS auditor_progress_deposit_confirmation;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_progress_coin;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS wire_auditor_progress;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS wire_auditor_account_progress;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS auditor_historic_reserve_summary CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS auditor_denominations CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS deposit_confirmations CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_exchanges CASCADE;"),
- GNUNET_PQ_make_execute ("DROP SCHEMA IF EXISTS _v CASCADE;"),
- GNUNET_PQ_EXECUTE_STATEMENT_END
- };
struct GNUNET_PQ_Context *conn;
- int ret;
+ char *exec_dir;
+ GNUNET_asprintf (&exec_dir,
+ (drop_exchangelist) ? "%sdrop" : "%srestart",
+ pc->sql_dir);
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
+ exec_dir,
NULL,
- es,
NULL);
if (NULL == conn)
return GNUNET_SYSERR;
- ret = GNUNET_OK;
- if (drop_exchangelist)
- ret = GNUNET_PQ_exec_statements (conn,
- esx);
GNUNET_PQ_disconnect (conn);
- return ret;
+ return GNUNET_OK;
}
diff --git a/src/auditordb/restart0000.sql b/src/auditordb/restart0000.sql
new file mode 100644
index 000000000..1a141f78f
--- /dev/null
+++ b/src/auditordb/restart0000.sql
@@ -0,0 +1,47 @@
+--
+-- This file is part of TALER
+-- Copyright (C) 2014--2020 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/>
+--
+
+-- Everything in one big transaction
+BEGIN;
+
+-- This script restart the auditor state as done to RESTART
+-- an audit from scratch. It does NOT drop tables and also
+-- PRESERVES data that running the auditor would not recover,
+-- such as:
+-- * the list of audited exchanges
+-- * deposit confirmation reports the auditor received from merchants
+-- * schema versioning information
+--
+-- Unlike the other SQL files, it SHOULD be updated to reflect the
+-- latest requirements for dropping tables.
+
+DELETE FROM auditor_predicted_result;
+DELETE FROM auditor_historic_denomination_revenue;
+DELETE FROM auditor_balance_summary;
+DELETE FROM auditor_denomination_pending;
+DELETE FROM auditor_reserve_balance;
+DELETE FROM auditor_wire_fee_balance;
+DELETE FROM auditor_reserves;
+DELETE FROM auditor_progress_reserve;
+DELETE FROM auditor_progress_aggregation;
+DELETE FROM auditor_progress_deposit_confirmation;
+DELETE FROM auditor_progress_coin;
+DELETE FROM wire_auditor_progress;
+DELETE FROM wire_auditor_account_progress;
+DELETE FROM auditor_historic_reserve_summary;
+
+-- And we're out of here...
+COMMIT;
diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am
index 40db09749..e7ac4d719 100644
--- a/src/exchangedb/Makefile.am
+++ b/src/exchangedb/Makefile.am
@@ -16,7 +16,8 @@ sqldir = $(prefix)/share/taler/sql/exchange/
sql_DATA = \
0000.sql \
- 0001.sql
+ 0001.sql \
+ drop0000.sql
EXTRA_DIST = \
exchangedb.conf \
diff --git a/src/exchangedb/drop0000.sql b/src/exchangedb/drop0000.sql
new file mode 100644
index 000000000..26e193ca6
--- /dev/null
+++ b/src/exchangedb/drop0000.sql
@@ -0,0 +1,50 @@
+--
+-- This file is part of TALER
+-- Copyright (C) 2014--2020 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/>
+--
+
+-- Everything in one big transaction
+BEGIN;
+
+-- This script DROPs all of the tables we create, including the
+-- versioning schema!
+--
+-- Unlike the other SQL files, it SHOULD be updated to reflect the
+-- latest requirements for dropping tables.
+
+-- Drops for 0001.sql
+DROP TABLE IF EXISTS prewire CASCADE;
+DROP TABLE IF EXISTS payback CASCADE;
+DROP TABLE IF EXISTS payback_refresh CASCADE;
+DROP TABLE IF EXISTS aggregation_tracking CASCADE;
+DROP TABLE IF EXISTS wire_out CASCADE;
+DROP TABLE IF EXISTS wire_fee CASCADE;
+DROP TABLE IF EXISTS deposits CASCADE;
+DROP TABLE IF EXISTS refunds CASCADE;
+DROP TABLE IF EXISTS refresh_commitments CASCADE;
+DROP TABLE IF EXISTS refresh_revealed_coins CASCADE;
+DROP TABLE IF EXISTS refresh_transfer_keys CASCADE;
+DROP TABLE IF EXISTS known_coins CASCADE;
+DROP TABLE IF EXISTS reserves_close CASCADE;
+DROP TABLE IF EXISTS reserves_out CASCADE;
+DROP TABLE IF EXISTS reserves_in CASCADE;
+DROP TABLE IF EXISTS reserves CASCADE;
+DROP TABLE IF EXISTS denomination_revocations CASCADE;
+DROP TABLE IF EXISTS denominations CASCADE;
+
+-- Drop versioning (0000.sql)
+DROP SCHEMA IF EXISTS _v CASCADE;
+
+-- And we're out of here...
+COMMIT;
diff --git a/src/exchangedb/exchangedb-postgres.conf b/src/exchangedb/exchangedb-postgres.conf
index 40fe3de0e..7d600586f 100644
--- a/src/exchangedb/exchangedb-postgres.conf
+++ b/src/exchangedb/exchangedb-postgres.conf
@@ -2,4 +2,5 @@
CONFIG = "postgres:///taler"
# Where are the SQL files to setup our tables?
+# Important: this MUST end with a "/"!
SQL_DIR = $DATADIR/sql/exchange/
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index afdebf927..80f91785c 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -147,39 +147,17 @@ static int
postgres_drop_tables (void *cls)
{
struct PostgresClosure *pc = cls;
- struct GNUNET_PQ_ExecuteStatement es[] = {
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS prewire CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS payback CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS payback_refresh CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS aggregation_tracking CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS wire_out CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS wire_fee CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS deposits CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS refunds CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS refresh_commitments CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS refresh_revealed_coins CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS refresh_transfer_keys CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS known_coins CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves_close CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves_out CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves_in CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves CASCADE;"),
- GNUNET_PQ_make_execute (
- "DROP TABLE IF EXISTS denomination_revocations CASCADE;"),
- GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS denominations CASCADE;"),
- GNUNET_PQ_make_execute ("DROP SCHEMA IF EXISTS _v CASCADE;"),
- GNUNET_PQ_EXECUTE_STATEMENT_END
- };
struct GNUNET_PQ_Context *conn;
+ char *drop_dir;
+ GNUNET_asprintf (&drop_dir,
+ "%sdrop",
+ pc->sql_dir);
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
+ drop_dir,
NULL,
- es,
NULL);
+ GNUNET_free (drop_dir);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_PQ_disconnect (conn);