my ($dbc_hash, $sqlcmd, $extra, $to_params) = @_;
my $driver = $dbc_hash->{'driver'} || 'mysql';
if($sqlcmd) {
if($sqlcmd =~ /(DROP\s+DATABASE(?:\s+IF\s+EXISTS)?\s*?)(?:\s+(\w+))?/i) {
my $dbname = $2 || $dbc_hash->{dbname};
if($driver eq 'sqlite') {
return "rm -f $dbname";
} elsif(!$2) {
$sqlcmd = "$1 $dbname";
$dbc_hash->{dbname} = '';
}
} elsif($sqlcmd =~ /(CREATE\s+DATABASE\s*?)(?:\s+(\w+))?/i ) {
my $dbname = $2 || $dbc_hash->{dbname};
if($driver eq 'sqlite') {
return "touch $dbname";
} elsif(!$2) {
$sqlcmd = "$1 $dbname";
$dbc_hash->{dbname} = '';
}
}
}
my $cmd;
if($driver eq 'mysql') {
$cmd = ($to_params ? '' : 'mysql ')
."--host=$dbc_hash->{host} "
.(defined($dbc_hash->{port}) ? "--port=$dbc_hash->{port} " : '')
."--user=$dbc_hash->{user} --password='$dbc_hash->{pass}' "
.(defined($extra) ? "$extra " : '')
.($dbc_hash->{dbname} || '')
.(defined($sqlcmd) ? " -e '$sqlcmd'" : '');
} elsif($driver eq 'pgsql') {
$cmd = ($to_params ? '' : "env PGPASSWORD='$dbc_hash->{pass}' psql ")
."--host=$dbc_hash->{host} "
.(defined($dbc_hash->{port}) ? "--port=$dbc_hash->{port} " : '')
."--username=$dbc_hash->{user} "
.(defined($sqlcmd) ? "--command='$sqlcmd' " : '')
.(defined($extra) ? "$extra " : '')
.($dbc_hash->{dbname} || '');
} elsif($driver eq 'sqlite') {
die "sqlite requires a database (file) name\n" unless $dbc_hash->{dbname};
$cmd = "sqlite3 "
.(defined($extra) ? "$extra " : '')
.$dbc_hash->{dbname}
.(defined($sqlcmd) ? " '$sqlcmd'" : '');
}
return $cmd;
}