App-Info
view release on metacpan or search on metacpan
lib/App/Info/RDBMS/SQLite.pm view on Meta::CPAN
use App::Info::Util;
use vars qw(@ISA $VERSION);
@ISA = qw(App::Info::RDBMS);
$VERSION = '0.57';
use constant WIN32 => $^O eq 'MSWin32';
my $u = App::Info::Util->new;
=head1 INTERFACE
=head2 Constructor
=head3 new
my $sqlite = App::Info::RDBMS::SQLite->new(@params);
Returns an App::Info::RDBMS::SQLite object. See L<App::Info|App::Info> for a
complete description of argument parameters.
When it called, C<new()> searches the directories returned by
F<search_bin_dirs> for an executable with a name returned by
C<search_exe_names>. If found, it will be called by the object methods below
to gather the data necessary for each. If it cannot be found, then C<new()>
will attempt to load L<DBD::SQLite|DBD::SQLite> or
L<DBD::SQLite2|DBD::SQLite2>. These DBI drivers have SQLite embedded in them
but do not install the application. If these fail, then SQLite is assumed not
to be installed, and each of the object methods will return C<undef>.
B<Events:>
=over 4
=item info
Looking for SQLite.
=item confirm
Path to SQLite executable?
=item unknown
Path to SQLite executable?
=back
=cut
sub new {
# Construct the object.
my $self = shift->SUPER::new(@_);
# Find pg_config.
$self->info("Looking for SQLite");
my @exes = $self->search_exe_names;
if (my $cfg = $u->first_cat_exe(\@exes, $self->search_bin_dirs)) {
# We found it. Confirm.
$self->{executable} = $self->confirm(
key => 'path to sqlite',
prompt => "Path to SQLite executable?",
value => $cfg,
callback => sub { -x },
error => 'Not an executable'
);
} else {
$self->info("Looking for DBD::SQLite");
# Try using DBD::SQLite, which includes SQLite.
for my $dbd ('SQLite', 'SQLite2') {
eval "use DBD::$dbd";
next if $@;
# Looks like DBD::SQLite is installed. Set up a temp database
# handle so we can get information from it.
require DBI;
$self->{dbfile} = $u->catfile($u->tmpdir, 'tmpdb');
$self->{dbh} = DBI->connect("dbi:$dbd:dbname=$self->{dbfile}","","");
# I don't think there's any way to really confirm, so just return.
return $self;
}
# Handle an unknown value.
$self->{executable} = $self->unknown(
key => 'path to sqlite',
prompt => "Path to SQLite executable?",
callback => sub { -x },
error => 'Not an executable'
);
}
return $self;
}
sub DESTROY {
my $self = shift;
$self->{dbh}->disconnect if $self->{dbh};
unlink $self->{dbfile} if $self->{dbfile};
}
##############################################################################
=head2 Class Method
=head3 key_name
my $key_name = App::Info::RDBMS::SQLite->key_name;
Returns the unique key name that describes this class. The value returned is
the string "SQLite".
=cut
sub key_name { 'SQLite' }
##############################################################################
=head2 Object Methods
=head3 installed
print "SQLite is ", ($sqlite->installed ? '' : 'not '), "installed.\n";
Returns true if SQLite is installed, and false if it is not.
App::Info::RDBMS::SQLite determines whether SQLite is installed based on the
presence or absence of the F<sqlite3> or F<sqlite> application on the file
system as found when C<new()> constructed the object. If SQLite does not
appear to be installed, then all of the other object methods will return empty
values.
=cut
sub installed { return $_[0]->{executable} || $_[0]->{dbh} ? 1 : undef }
##############################################################################
=head3 name
my $name = $sqlite->name;
Returns the name of the application. App::Info::RDBMS::SQLite simply returns
the value returned by C<key_name> if SQLite is installed, and C<undef> if
it is not installed.
=cut
( run in 1.396 second using v1.01-cache-2.11-cpan-6aa56a78535 )