From d3fb16b38049d61ad5bb5271e43420421dd10d91 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 17 Jan 2020 12:22:11 +0100 Subject: also cover drop/restart cases with psql logic --- src/auditordb/Makefile.am | 4 +- src/auditordb/drop0000.sql | 49 +++++++++++++++++++++++ src/auditordb/plugin_auditordb_postgres.c | 61 +++-------------------------- src/auditordb/restart0000.sql | 47 ++++++++++++++++++++++ src/exchangedb/Makefile.am | 3 +- src/exchangedb/drop0000.sql | 50 +++++++++++++++++++++++ src/exchangedb/exchangedb-postgres.conf | 1 + src/exchangedb/plugin_exchangedb_postgres.c | 34 +++------------- 8 files changed, 164 insertions(+), 85 deletions(-) create mode 100644 src/auditordb/drop0000.sql create mode 100644 src/auditordb/restart0000.sql create mode 100644 src/exchangedb/drop0000.sql (limited to 'src') 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 +-- + +-- 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 +-- + +-- 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 +-- + +-- 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); -- cgit v1.2.3