1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +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.


scripts/mysqlhotcopy.sh:
  Use "SHOW TABLES FROM `db`" instead of $dbh->tables() in
  get_list_of_tables().  DBI's ->tables() method calls
  "SHOW TABLES" under the hood, and then quotes the
  names and (depending on DBD::mysql version) adds the schema
  name, too.  mysqlhotcopy doesn't want the schema name
  or the quotes, so it's all around better to just call
  "SHOW TABLES" itself.
This commit is contained in:
unknown
2007-08-20 11:00:51 -06:00
parent db53902678
commit 539d58a36a

View File

@ -821,30 +821,14 @@ sub get_raid_dirs {
sub get_list_of_tables {
my ( $db ) = @_;
# "use database" cannot cope with database names containing spaces
# so create a new connection
my $tables =
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",
$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;
return (map { $_->[0] } @$tables);
}
sub quote_names {