webgui/lib/WebGUI/Upgrade/File/sql.pm

46 lines
1.1 KiB
Perl

package WebGUI::Upgrade::File::sql;
use strict;
use warnings;
use WebGUI::Config;
sub run {
my ($class, $configFile, $version, $file, $quiet) = @_;
my $config = WebGUI::Config->new($configFile, 1);
my $dsn = $config->get('dsn');
my $username = $config->get('dbuser');
my $password = $config->get('dbpass');
my $database = ( split /[:;]/msx, $dsn )[2];
my $hostname = 'localhost';
my $port = '3306';
while ( $dsn =~ /([^=;:]+)=([^;:]+)/msxg ) {
if ( $1 eq 'host' || $1 eq 'hostname' ) {
$hostname = $2;
}
elsif ( $1 eq 'db' || $1 eq 'database' || $1 eq 'dbname' ) {
$database = $2;
}
elsif ( $1 eq 'port' ) {
$port = $2;
}
}
my @command_line = (
'mysql',
'-h' . $hostname,
'-P' . $port,
$database,
'-u' . $username,
( $password ? '-p' . $password : () ),
'--default-character-set=utf8',
'--batch',
'--execute=source ' . $file,
);
system { $command_line[0] } @command_line
and die "$!";
return 1;
}
1;