setPerformancePoint ("loaded initDBI");

use OpenCA::DBI;

setPerformancePoint ("use OpenCA::DBI");

my $dbi_debug = $xml_cache->get_xpath (
                    FILENAME => $DBICONFIG,
                    XPATH    => [ 'database_config/debug' ],
                    COUNTER  => [ 0 ]);

$dbi_debug = $DEBUG if (not $dbi_debug and $DEBUG);

## setup of the environment

## determine database vendor
my $db_type = $xml_cache->get_xpath (
                    FILENAME => $DBICONFIG,
                    XPATH    => [ 'database_config/type' ],
                    COUNTER  => [ 0 ]);

setPerformancePoint ("database vendor detected");

## find configuration and detect number of options
my ($vendor_name, $vendor_number, $vendor_envs) = ("", -1, 0);
my $vendor_number = "";
my $vendor_count = $xml_cache->get_xpath_count (
                        FILENAME => $DBICONFIG,
                        XPATH    => [ 'database_config/environment/vendor' ],
                        COUNTER  => []);
for (my $k = 0; $k<$vendor_count; $k++)
{
    $vendor_name = $xml_cache->get_xpath (
                        FILENAME => $DBICONFIG,
                        XPATH    => [ 'database_config/environment/vendor', 'type' ],
                        COUNTER  => [ $k, 0 ]);
    next if ($vendor_name ne $db_type);
    $vendor_number = $k;
    $vendor_envs = $xml_cache->get_xpath (
                        FILENAME => $DBICONFIG,
                        XPATH    => [ 'database_config/environment/vendor', 'number' ],
                        COUNTER  => [ $k, 0 ]);
}
setPerformancePoint ("database environment found");

## load environment
for (my $i = 0; $i<$vendor_envs; $i++)
{
  my $env_name = $xml_cache->get_xpath (
                        FILENAME => $DBICONFIG,
                        XPATH    => [ 'database_config/environment/vendor', 'option', 'name' ],
                        COUNTER  => [ $vendor_number, $i, 0 ]);
  my $env_value = $xml_cache->get_xpath (
                        FILENAME => $DBICONFIG,
                        XPATH    => [ 'database_config/environment/vendor', 'option', 'value' ],
                        COUNTER  => [ $vendor_number, $i, 0 ]);
  $ENV {$env_name} = $env_value;
  print "NUMBER: $i<br>\n".
        "OPTION: $env_name<br>\n".
        "VALUE:  $env_value<br>\n" if ($DEBUG);
}
setPerformancePoint ("database environment loaded");

my $db_name = $xml_cache->get_xpath (
                                FILENAME => $DBICONFIG,
                                XPATH    => [ 'database_config/name' ],
                                COUNTER  => [ 0 ]);
my $db_host = $xml_cache->get_xpath (
                                FILENAME => $DBICONFIG,
                                XPATH    => [ 'database_config/host' ],
                                COUNTER  => [ 0 ]);
my $db_port = $xml_cache->get_xpath (
                                FILENAME => $DBICONFIG,
                                XPATH    => [ 'database_config/port' ],
                                COUNTER  => [ 0 ]);
my $db_user = $xml_cache->get_xpath (
                                FILENAME => $DBICONFIG,
                                XPATH    => [ 'database_config/user' ],
                                COUNTER  => [ 0 ]);
my $db_passwd = $xml_cache->get_xpath (
                                FILENAME => $DBICONFIG,
                                XPATH    => [ 'database_config/passwd' ],
                                COUNTER  => [ 0 ]);
my $db_namespace = $xml_cache->get_xpath (
                                FILENAME => $DBICONFIG,
                                XPATH    => [ 'database_config/namespace' ],
                                COUNTER  => [ 0 ]);
setPerformancePoint ("database configuration options loaded");

$db = new OpenCA::DBI (
	SHELL          	=> $cryptoShell,
	GETTEXT		=> \&i18nGettext,
	DEBUG          	=> $dbi_debug,
	DB_Type     	=> $db_type,
	DB_Name     	=> $db_name,
	DB_Host     	=> $db_host,
	DB_Port     	=> $db_port,
	DB_User     	=> $db_user,
	DB_Passwd   	=> $db_passwd,
	DB_Namespace   	=> $db_namespace
);
setPerformancePoint ("database object instantiated");

if ( not $db ) {
	configError( i18nGettext (
	                 "Cannot initialize OpenCA::DBI class! The database returns errorcode __ERRNO__. (__ERRVAL__)",
	                 "__ERRNO__", $OpenCA::DBI::errno,
	                 "__ERRVAL__", $OpenCA::DBI::errval
	                         ) );
}

$versions->{DB}	= OpenCA::DBI->VERSION;

1;
