mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug #27694: mysqlhotcopy & p5-DBD-mysql51-4.003
Use "SHOW TABLES FROM `db`" instead of $dbh->tables() in the get_list_of_tables() routine. The symptom is that, when used with recent versions of DBD::mysql, mysqlhotcopy uses a double-qualified table name, for example: Invalid db.table name 'test.test`.`x' at /usr/bin/mysqlhotcopy line 855. This is caused by a change in DBD::mysql. See this diff: http://svn.perl.org/viewcvs/modules/DBD-mysql/trunk/lib/DBD/mysql.pm?r1=9183&r2=9188 Basically, older DBD::mysql implemented a limited ->table_info method; now the full method is implemented, and as a result DBI's ->tables() method has access to the schema value, so it uses it.
This commit is contained in:
@ -821,30 +821,14 @@ sub get_raid_dirs {
|
|||||||
sub get_list_of_tables {
|
sub get_list_of_tables {
|
||||||
my ( $db ) = @_;
|
my ( $db ) = @_;
|
||||||
|
|
||||||
# "use database" cannot cope with database names containing spaces
|
my $tables =
|
||||||
# so create a new connection
|
eval {
|
||||||
|
$dbh->selectall_arrayref('SHOW TABLES FROM ' .
|
||||||
|
$dbh->quote_identifier($db))
|
||||||
|
} || [];
|
||||||
|
warn "Unable to retrieve list of tables in $db: $@" if $@;
|
||||||
|
|
||||||
my $dbh = DBI->connect("dbi:mysql:${db}${dsn};mysql_read_default_group=mysqlhotcopy",
|
return (map { $_->[0] } @$tables);
|
||||||
$opt{user}, $opt{password},
|
|
||||||
{
|
|
||||||
RaiseError => 1,
|
|
||||||
PrintError => 0,
|
|
||||||
AutoCommit => 1,
|
|
||||||
});
|
|
||||||
|
|
||||||
my @dbh_tables = eval { $dbh->tables() };
|
|
||||||
|
|
||||||
## Remove quotes around table names
|
|
||||||
my $quote = $dbh->get_info(29); # SQL_IDENTIFIER_QUOTE_CHAR
|
|
||||||
if ($quote) {
|
|
||||||
foreach (@dbh_tables) {
|
|
||||||
s/^$quote(.*)$quote$/$1/;
|
|
||||||
s/$quote$quote/$quote/g;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$dbh->disconnect();
|
|
||||||
return @dbh_tables;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub quote_names {
|
sub quote_names {
|
||||||
|
Reference in New Issue
Block a user