Anansi-Database-MySQL
view release on metacpan or search on metacpan
lib/Anansi/Database/MySQL.pm view on Meta::CPAN
package Anansi::Database::MySQL;
=head1 NAME
Anansi::Database::MySQL - A manager for MySQL databases.
=head1 SYNOPSIS
use Anansi::Database::MySQL;
if(Anansi::Database::MySQL->validate(
undef,
DRIVER => 'MySQL',
)) {
my $OBJECT = Anansi::Database::MySQL->new();
if($OBJECT->connect(
undef,
DATABASE => 'someDatabase',
PASSWORD => 'somePassword',
USERNAME => 'someUser',
)) {
my $records = $OBJECT->statement(
undef,
INPUT => [
{
DEFAULT => '0',
NAME => 'yetAnotherField',
}
],
SQL => 'SELECT some_field, another_field FROM some_table WHERE yet_another_field = ?;',
yetAnotherField => 123,
);
$OBJECT->disconnect();
if(defined($records)) {
if(ref($records) =~ /^ARRAY$/i) {
my $record = 0;
foreach my $record (@{$records}) {
next if(ref($record) !~ /^HASH$/i);
print "\n" if(0 < $record);
my $field = 0;
foreach my $key (keys(%{$record})) {
print ', ' if(0 < $field);
print '"'.$key.'" = "'.${record}{$key}.'"';
$field++;
}
$record++;
}
print "\n";
}
}
}
}
use Anansi::Database;
my $OBJECT = Anansi::Database->new();
my $component = $OBJECT->addComponent(
undef,
DRIVER => 'MySQL',
);
if(defined($component)) {
if($OBJECT->channel(
'CONNECT',
$component,
DATABASE => 'someDatabase',
PASSWORD => 'somePassword',
USERNAME => 'someUser',
)) {
my $records = $OBJECT->channel(
'STATEMENT',
$component,
INPUT => [
{
DEFAULT => '0',
NAME => 'yetAnotherField',
}
],
SQL => 'SELECT some_field, another_field FROM some_table WHERE yet_another_field = ?;',
yetAnotherField => 123,
);
if(defined($records)) {
if(ref($records) =~ /^ARRAY$/i) {
my $record = 0;
foreach my $record (@{$records}) {
next if(ref($record) !~ /^HASH$/i);
print "\n" if(0 < $record);
my $field = 0;
foreach my $key (keys(%{$record})) {
print ', ' if(0 < $field);
print '"'.$key.'" = "'.${record}{$key}.'"';
$field++;
}
$record++;
}
print "\n";
}
}
}
}
=head1 DESCRIPTION
Manages MySQL databases allowing the opening and closing of MySQL databases.
=cut
our $VERSION = '0.03';
use base qw(Anansi::DatabaseComponent);
=head1 METHODS
=cut
=head2 Anansi::Class
See L<Anansi::Class|Anansi::Class> for details. A parent module of L<Anansi::Component|Anansi::Component>.
=cut
=head3 DESTROY
See L<Anansi::Class::DESTROY|Anansi::Class/"DESTROY"> for details.
=cut
=head3 finalise
lib/Anansi/Database/MySQL.pm view on Meta::CPAN
=item AutoCommit I<(String, Optional)>
Defines whether the MySQL driver automatically saves any changes made to the
B<DATABASE>. A value of B<1> I<(one)> means changes will be saved, a value of
B<0> I<(zero)> means changes will need to be manually saved. Changes are not
saved by default.
=item DATABASE I<(String, Optional)>
The name of the MySQL database. A value of B<mysql> is used by default.
=item HANDLE I<(DBI::db, Optional)>
The database handle of an existing database connection.
=item HOSTNAME I<(String, Optional)>
The IP address of the computer where the MySQL B<DATABASE> is hosted. A value
of B<127.0.0.1> is used by default.
=item PASSWORD I<(String, Optional)>
The password of the B<USERNAME> that is accessing the MySQL database. A value
of B<undef> is used by default.
=item PORT I<(String, Optional)>
The IP address port number of the computer where the MySQL B<DATABASE> is
hosted. A value of B<3306> I<(three three zero six)> is used by default.
=item PrintError I<(String, Optional)>
Defines whether the MySQL driver will use the B<warn> function. A value of B<1>
I<(one)> means errors will be output using B<warn>, a value of B<0> I<(zero)>
means errors will not be output in this way. Errors are output by default.
=item RaiseError I<(String, Optional)>
Defines whether the MySQL driver will use the B<die> function. A value of B<1>
I<(one)> means errors will be output using B<die>, a value of B<0> I<(zero)>
means errors will not be output in this way. Errors are output by default.
=item USERNAME I<(String, Optional)>
The user that is accessing the MySQL database. A value of B<undef> is used by
default.
=back
=back
Overrides L<Anansi::DatabaseComponent::connect|Anansi::DatabaseComponent/"connect">.
=cut
sub connect {
my ($self, $channel, %parameters) = @_;
return $self->SUPER::connect(
undef,
INPUT => [
{
INPUT => [
'dbi:mysql:database=', {
DEFAULT => 'mysql',
NAME => 'DATABASE',
REF => '',
},
';host=', {
DEFAULT => '127.0.0.1',
NAME => 'HOSTNAME',
REF => '',
},
';port=', {
DEFAULT => '3306',
NAME => 'PORT',
REF => '',
}
],
REF => '',
}, {
NAME => 'USERNAME',
REF => '',
}, {
NAME => 'PASSWORD',
REF => '',
}, {
INPUT => [
{
DEFAULT => 0,
NAME => 'AutoCommit',
REF => '',
}, {
DEFAULT => 1,
NAME => 'PrintError',
REF => '',
}, {
DEFAULT => 1,
NAME => 'RaiseError',
REF => '',
}
],
REF => 'HASH',
}
],
(%parameters),
);
}
Anansi::Component::addChannel('Anansi::Database::MySQL', 'CONNECT' => 'connect');
=head2 validate
if(1 == Anansi::Database::MySQL::validate($OBJECT, undef));
if(1 == Anansi::Database::MySQL::channel($OBJECT, 'VALIDATE_AS_APPROPRIATE'));
if(1 == Anansi::Database::MySQL->validate(undef));
if(1 == Anansi::Database::MySQL->channel('VALIDATE_AS_APPROPRIATE'));
if(1 == $OBJECT->validate(undef, DRIVER => 'MySQL'));
if(1 == $OBJECT->channel('VALIDATE_AS_APPROPRIATE', DRIVER => 'MySQL'));
if(1 == Anansi::Database::MySQL->validate(undef, DRIVER => 'MySQL'));
if(1 == Anansi::Database::MySQL->channel('VALIDATE_AS_APPROPRIATE', DRIVER => 'MySQL'));
=over 4
=item self I<(Blessed Hash B<or> String, Required)>
Either an object or a string of this namespace.
=item channel I<(String, Required)>
The abstract identifier of a subroutine.
=item parameters I<(Hash, Optional)>
Named parameters.
=over 4
=item DRIVER
( run in 1.499 second using v1.01-cache-2.11-cpan-5735350b133 )