On Friday 16 November 2018 17:04:50 Marius Feraru wrote:
> On Fri, Nov 16, 2018 at 10:38 AM <p...@cpan.org> wrote:
> > Hi! If you want to list all databases then use DBI's data_sources method:
> > https://metacpan.org/pod/DBI#data_sources
> 
> And DBD::mysql points to this method for a while:
> https://github.com/perl5-dbi/DBD-mysql/blame/9f96fab985327773397a60020f5dcb76dfd8c396/lib/DBD/mysql.pm#L1432
> 
> Yet, it never worked for me, while their "legacy" version still does:
> $ perl -MData::Dump=dd -MDBI -e 'for $impl (qw[mysql MariaDB]) { $plm
> = lc $impl; $dbh =
> DBI->connect("dbi:$impl:;${plm}_read_default_group=mysql"); dd {
> listdbs => [ eval {$dbh->func("_ListDBs")} ], data_sources => [
> $dbh->data_sources ], dbd => "DBD::$impl", dbi_version =>
> $DBI::VERSION, dbd_version => ${"DBD::$impl\::VERSION"}, map { $_ =>
> $dbh->{"${plm}_$_"} } qw(clientinfo clientversion serverversion) } }'
> {
>   clientinfo => "8.0.13",
>   clientversion => 80013,
>   data_sources => [],
>   dbd => "DBD::mysql",
>   dbd_version => 4.048,
>   dbi_version => 1.642,
>   listdbs => ["information_schema", "mysql", "performance_schema", "sys"],
>   serverversion => 80013,
> }
> {
>   clientinfo => "8.0.13",
>   clientversion => 80013,
>   data_sources => [
>     "DBI:MariaDB:information_schema",
>     "DBI:MariaDB:mysql",
>     "DBI:MariaDB:performance_schema",
>     "DBI:MariaDB:sys",
>   ],
>   dbd => "DBD::MariaDB",
>   dbd_version => "1.00",
>   dbi_version => 1.642,
>   listdbs => [],
>   serverversion => 80013,
> }
> 
> Pali, seeing that your flavor's data_sources does work, I reckon it
> might be yet another update to upstream. I suggest keeping ListDBs
> retirement separate though. ;-)

In DBD::MariaDB was that legacy _ListDBs() method removed. Just because
DBI provides generic method data_sources().

Documentation for DBD::MariaDB also describes how to call data_sources()
method also without need to create $dbh connection. You need to specify
host, port, user, password:
https://metacpan.org/pod/DBD::MariaDB#data_sources

Btw, same additional arguments (host, port, user, password) work also
with DBD::mysql, just it is not properly documented.

IIRC, data_sources() method work also with PostgreSQL...
https://metacpan.org/pod/DBD::Pg#data_sources

> For the sake of discussion –and to disappoint Daniel, sorry– given
> this lack of coherence (NOT only at DBD level, e.g. privileges might
> be involved), I have not been able to rely on DBI::data_sources,
> having to employ DBMS specific queries instead.
> e.g. @mysql: while "show databases" usually still works, an
> "information_schema" based alternative/fallback could be useful.
> 
> Cheers!

Reply via email to