The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package select_dsn;
use base Exporter;
our @EXPORT = qw(first_dsn all_dsn);

use strict;
use warnings;
use DBI;
use FindBin '$Bin';

sub all_dsn {
    return split /\s+/,$ENV{TEST_DSN} if $ENV{TEST_DSN};
    my @result;

    my %drivers = map {$_=>1} DBI->available_drivers;
    my $base = "$Bin/../lib/DBI/Filesystem/DBD";
    foreach (keys %drivers) {
	next unless eval {require "$base/${_}.pm"};
	my $class    = 'DBI::Filesystem::DBD::'.$_;
	my $dsn      = eval{$class->test_dsn} or next;
	my $dbh      = DBI->connect($dsn,undef,undef,{PrintError=>0}) or next;
	push @result,$dsn;
    }
    $ENV{TEST_DSN} = join ' ',@result;
    return @result;
}

sub first_dsn {
    my @dsn = all_dsn() or return;
    return $dsn[0];
}

1;