2015-01-08 18:37:20 +01:00
/*
This file is part of TALER
2020-01-19 19:21:58 +01:00
Copyright ( C ) 2014 , 2015 Taler Systems SA
2015-01-08 18:37:20 +01:00
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
2016-07-07 17:55:25 +02:00
TALER ; see the file COPYING . If not , see < http : //www.gnu.org/licenses/>
2015-01-08 18:37:20 +01:00
*/
/**
2016-03-01 15:35:04 +01:00
* @ file exchange - tools / taler - exchange - dbinit . c
* @ brief Create tables for the exchange database .
2015-01-08 18:37:20 +01:00
* @ author Florian Dold
*/
# include "platform.h"
# include <gnunet/gnunet_util_lib.h>
2020-01-16 22:40:12 +01:00
# include "taler_exchangedb_lib.h"
2015-01-08 18:37:20 +01:00
2016-04-16 19:49:53 +02:00
/**
* Return value from main ( ) .
*/
static int global_ret ;
2016-05-21 19:22:03 +02:00
/**
* - r option : do full DB reset
*/
static int reset_db ;
2016-05-31 09:16:09 +02:00
/**
* - g option : garbage collect DB reset
*/
static int gc_db ;
2016-04-16 19:49:53 +02:00
/**
* Main function that will be run .
*
* @ param cls closure
* @ param args remaining command - line arguments
* @ param cfgfile name of the configuration file used ( for saving , can be NULL ! )
* @ param cfg configuration
*/
static void
run ( void * cls ,
char * const * args ,
const char * cfgfile ,
const struct GNUNET_CONFIGURATION_Handle * cfg )
{
struct TALER_EXCHANGEDB_Plugin * plugin ;
2019-11-01 14:34:34 +01:00
( void ) cls ;
( void ) args ;
( void ) cfgfile ;
2016-04-16 19:49:53 +02:00
if ( NULL = =
( plugin = TALER_EXCHANGEDB_plugin_load ( cfg ) ) )
{
fprintf ( stderr ,
" Failed to initialize database plugin. \n " ) ;
global_ret = 1 ;
return ;
}
2016-05-21 19:22:03 +02:00
if ( reset_db )
2020-03-07 12:23:32 +01:00
{
if ( GNUNET_OK ! = plugin - > drop_tables ( plugin - > cls ) )
{
GNUNET_log ( GNUNET_ERROR_TYPE_WARNING ,
2020-03-13 19:34:24 +01:00
" Could not drop tables as requested. Either database was not yet initialized, or permission denied. Consult the logs. Will still try to create new tables. \n " ) ;
2020-03-07 12:23:32 +01:00
}
}
2016-04-16 19:49:53 +02:00
if ( GNUNET_OK ! =
2016-05-02 06:36:58 +02:00
plugin - > create_tables ( plugin - > cls ) )
2016-04-16 19:49:53 +02:00
{
fprintf ( stderr ,
" Failed to initialize database. \n " ) ;
TALER_EXCHANGEDB_plugin_unload ( plugin ) ;
global_ret = 1 ;
return ;
}
2016-05-31 09:16:09 +02:00
if ( gc_db )
2019-08-25 16:18:24 +02:00
{
if ( GNUNET_SYSERR = = plugin - > gc ( plugin - > cls ) )
2020-03-07 12:23:32 +01:00
{
2019-08-25 16:18:24 +02:00
fprintf ( stderr ,
" Garbage collection failed! \n " ) ;
2020-03-07 12:23:32 +01:00
}
2019-08-25 16:18:24 +02:00
}
2016-04-16 19:49:53 +02:00
TALER_EXCHANGEDB_plugin_unload ( plugin ) ;
}
2015-01-08 18:37:20 +01:00
/**
2015-03-16 18:19:05 +01:00
* The main function of the database initialization tool .
2016-03-01 15:35:04 +01:00
* Used to initialize the Taler Exchange ' s database .
2015-01-08 18:37:20 +01:00
*
* @ param argc number of arguments from the command line
* @ param argv command line arguments
* @ return 0 ok , 1 on error
*/
int
2015-03-16 18:19:05 +01:00
main ( int argc ,
char * const * argv )
2015-01-08 18:37:20 +01:00
{
2016-04-10 17:10:20 +02:00
const struct GNUNET_GETOPT_CommandLineOption options [ ] = {
2017-03-25 21:22:22 +01:00
GNUNET_GETOPT_option_flag ( ' r ' ,
2019-08-25 16:18:24 +02:00
" reset " ,
" reset database (DANGEROUS: all existing data is lost!) " ,
& reset_db ) ,
2017-03-25 21:22:22 +01:00
GNUNET_GETOPT_option_flag ( ' g ' ,
2019-08-25 16:18:24 +02:00
" gc " ,
" garbage collect database " ,
& gc_db ) ,
2015-01-08 18:37:20 +01:00
GNUNET_GETOPT_OPTION_END
} ;
2016-04-16 19:53:01 +02:00
/* force linker to link against libtalerutil; if we do
not do this , the linker may " optimize " libtalerutil
away and skip # TALER_OS_init ( ) , which we do need */
( void ) TALER_project_data_default ( ) ;
2015-03-16 18:19:05 +01:00
GNUNET_assert ( GNUNET_OK = =
2016-03-01 15:35:04 +01:00
GNUNET_log_setup ( " taler-exchange-dbinit " ,
2015-03-16 18:19:05 +01:00
" INFO " ,
NULL ) ) ;
2015-03-21 14:04:13 +01:00
if ( GNUNET_OK ! =
2016-04-16 19:49:53 +02:00
GNUNET_PROGRAM_run ( argc , argv ,
" taler-exchange-dbinit " ,
2019-08-25 16:18:24 +02:00
" Initialize Taler exchange database " ,
options ,
& run , NULL ) )
2015-01-08 18:37:20 +01:00
return 1 ;
2016-04-16 19:49:53 +02:00
return global_ret ;
2015-01-08 18:37:20 +01:00
}
2015-03-16 18:19:05 +01:00
2016-04-16 19:49:53 +02:00
2016-03-01 15:35:04 +01:00
/* end of taler-exchange-dbinit.c */