my ($dbc_hash, $executable, $prepend, $append, $sqlcmd, $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) {
if ($driver eq 'mysql') {
$sqlcmd = "$1 \`$dbname\`";
} else {
$sqlcmd = "$1 $dbname";
}
$dbc_hash->{dbname} = '';
}
} elsif($sqlcmd =~ /(CREATE\s+DATABASE(?:\s+IF\s+NOT\s+EXISTS)?\s*?)(?:\s+(\w+))?/i ) {
my $dbname = $2 || $dbc_hash->{dbname};
if($driver eq 'sqlite') {
return ['touch', $dbname];
} elsif(!$2) {
if ($driver eq 'mysql') {
$sqlcmd = "$1 \`$dbname\`";
} else {
$sqlcmd = "$1 $dbname";
}
$dbc_hash->{dbname} = '';
}
}
}
my @cmd;
if($driver eq 'mysql') {
$executable ||= 'mysql';
push @cmd, $executable unless $to_params;
push @cmd, @$prepend if ($prepend && @$prepend);
push @cmd, "-h$dbc_hash->{'host'}" if $dbc_hash->{'host'};
push @cmd, "-P$dbc_hash->{'port'}" if $dbc_hash->{'port'};
push @cmd, "-u$dbc_hash->{'user'}" if $dbc_hash->{'user'};
push @cmd, "-p$dbc_hash->{'pass'}" if $dbc_hash->{'pass'};
push @cmd, ('-e', $sqlcmd) if $sqlcmd;
push @cmd, $dbc_hash->{'dbname'} if $dbc_hash->{'dbname'};
push @cmd, @$append if ($append && @$append);
} elsif($driver eq 'pgsql') {
$executable ||= 'psql';
push @cmd, ('env', "PGPASSWORD='$dbc_hash->{'pass'}'") if ($to_params && $dbc_hash->{'pass'});
push @cmd, $executable unless $to_params;
push @cmd, @$prepend if ($prepend && @$prepend);
push @cmd, ('-h', $dbc_hash->{'host'}) if defined($dbc_hash->{'host'});
push @cmd, ('-p', $dbc_hash->{'port'}) if defined($dbc_hash->{'port'});
push @cmd, ('-U', $dbc_hash->{'user'}) if defined($dbc_hash->{'user'});
push @cmd, ('-c', $sqlcmd) if $sqlcmd;
push @cmd, @$append if ($append && @$append);
push @cmd, $dbc_hash->{'dbname'} if defined($dbc_hash->{'dbname'});
} elsif($driver eq 'sqlite') {
$executable ||= 'sqlite3';
die "sqlite requires a database (file) name\n" unless $dbc_hash->{dbname};
push @cmd, $executable unless $to_params;
push @cmd, @$prepend if ($prepend && @$prepend);
push @cmd, @$append if ($append && @$append);
push @cmd, $dbc_hash->{'dbname'};
push @cmd, $sqlcmd if $sqlcmd;
}
return \@cmd;
}