ACME-QuoteDB
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/ACME/QuoteDB/DB/DBI.pm view on Meta::CPAN
use Readonly;
use File::Basename qw/dirname/;
use Carp qw/croak/;
use Cwd 'abs_path';
use File::Spec;
Readonly my $QUOTES_DATABASE => $ENV{ACME_QUOTEDB_PATH}
|| File::Spec->catfile(_untaint_db_path(),
q(quotedb), q(quotes.db)
);
# set this to use a remote database
# i.e. mysql
Readonly my $REMOTE => $ENV{ACME_QUOTEDB_REMOTE};
# be more specific (or more general) this is mysql
# and 'remote' can be localhost
if ($REMOTE && $REMOTE ne 'mysql') {
croak "mysql is the only remote database supported"
." set ENV{ACME_QUOTEDB_REMOTE} = 'mysql'";
}
elsif ($REMOTE && $REMOTE eq 'mysql') {
my $database = $ENV{ACME_QUOTEDB_DB};
my $host = $ENV{ACME_QUOTEDB_HOST};
my $user = $ENV{ACME_QUOTEDB_USER};
my $pass = $ENV{ACME_QUOTEDB_PASS};
ACME::QuoteDB::DB::DBI->connection(
"DBI:mysql:database=$database;host=$host",$user,$pass,
{
RaiseError => 1,
mysql_enable_utf8 => 1,
}
)
|| croak "can not connect to: $database $!";
}
else {
ACME::QuoteDB::DB::DBI->connection(
'dbi:SQLite:dbname='.$QUOTES_DATABASE, '', '',
{
RaiseError => 1,
unicode => 1,
# func/pragma's may not work here,..(probably isnt' smart anyway)
#count_changes => 0,
#temp_store => 2,
#synchronous => 'OFF',
#busy_timeout => 3600000
}
)
|| croak "$QUOTES_DATABASE does not exist, or cant be created $!";
# how to enable this function?
#ACME::QuoteDB::DB::DBI->set_sql(func( 3600000, 'busy_timeout' );
}
sub get_current_db_path {
return $QUOTES_DATABASE;
}
sub _untaint_db_path {
my $sane_path = abs_path(dirname(__FILE__));
# appease taint mode, what a dir path looks like,... (probably not)
$sane_path =~ m{([a-zA-Z0-9-_\.:\/\\\s]+)}; #add '.', ':' for win32
return $1 || croak 'cannot untaint db path';
}
1;
__END__
=head1 NAME
ACME::QuoteDB::DB::DBI - DBI For ACME::QuoteDB
=head1 VERSION
Version 0.1.2
=head1 SYNOPSIS
This module is not meant to be used standalone it is used by C<ACME::QuoteDB>;
see L<ACME::QuoteDB>
=head1 DESCRIPTION
This module is not meant to be used standalone it is used by C<ACME::QuoteDB>;
see L<ACME::QuoteDB>
see L<Class::DBI>
=head1 OVERVIEW
see L<ACME::QuoteDB>
See L<Description|/Description> above
=head1 USAGE
See Synopsis
Also see t/01* included with the distribution.
(available from the CPAN if not included on your system)
=head1 SUBROUTINES/METHODS
see L<ACME::QuoteDB>
=head2 get_current_db_path
returns the path to our current database.
determined first by $ENV{ACME_QUOTEDB_PATH}
and next by the default system path to 'quotes.db'
=head1 DIAGNOSTICS
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.581 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )