MySQL-Easy
view release on metacpan or search on metacpan
return wantarray ? @$r : $r;
}
# }}}
# thread_id {{{
sub thread_id {
my $this = shift;
return $this->handle->{mysql_thread_id};
}
# }}}
# last_insert_id {{{
sub last_insert_id {
my $this = shift;
# return $this->firstcol("select last_insert_id()")->[0];
# return $this->handle->{mysql_insertid};
return $this->handle->last_insert_id(undef,undef,undef,undef);
}
# }}}
# DESTROY {{{
sub DESTROY {
my $this = shift;
$this->{dbh}->disconnect if $this->{dbh};
}
# }}}
# handle {{{
sub handle {
my $this = shift;
return $this->{dbh} if defined($this->{dbh}) and $this->{dbh}->ping;
# warn "WARNING: MySQL::Easy is trying to reconnect (if possible)" if defined $this->{dbh};
($this->{user}, $this->{pass}) = $this->unp unless $this->{user} and $this->{pass};
$this->{host} = "localhost" unless $this->{host};
$this->{port} = "3306" unless $this->{port};
$this->{dbase} = "test" unless $this->{dbase};
$this->{trace} = 0 unless $this->{trace};
if( $this->{dbh} ) {
eval {
local $SIG{__WARN__} = sub {}; # Curiously, sometimes we do have a handle, but the ping doesn't work.
# If we replace the handle, DBI complains about not disconnecting.
# If we disconnect, it complains about not desting statement handles.
# Heh. It's gone dude, let it go.
$this->{dbh}->disconnect;
};
}
$this->{dbh} =
DBI->connect("DBI:mysql:$this->{dbase}:host=$this->{host}:port=$this->{port}",
$this->{user}, $this->{pass}, {
RaiseError => ($this->{raise} ? 1:0),
PrintError => ($this->{raise} ? 0:1),
AutoCommit => 0,
mysql_enable_utf8 => 1,
mysql_compression => 1,
mysql_ssl => 1,
mysql_auto_reconnect => 1,
});
mycroak "failed to generate connection: " . DBI->errstr unless $this->{dbh};
$this->{dbh}->trace($this->{trace});
return $this->{dbh};
}
# }}}
# unp {{{
sub unp {
my $this = shift;
return ($ENV{$USER_ENV}, $ENV{$PASS_ENV}) if $ENV{$USER_ENV} and $ENV{$PASS_ENV};
my ($user, $pass, $file, $fh);
for $file (@MY_CNF_LOCATIONS) {
next unless -f $file;
next unless open $fh, $file;
while(<$fh>) {
$user = $1 if m/user\s*=\s*(.+)/;
$pass = $1 if m/password\s*=\s*(.+)/;
return ($user, $pass) if $user and $pass;
}
}
die "unable to locate a username and password\n";
return;
}
# }}}
# set_host set_user set_pass {{{
sub set_host {
my $this = shift;
$this->{host} = shift;
}
sub set_port {
my $this = shift;
$this->{port} = shift;
}
sub set_user {
my $this = shift;
$this->{user} = shift;
}
sub set_pass {
my $this = shift;
$this->{pass} = shift;
( run in 0.507 second using v1.01-cache-2.11-cpan-e1769b4cff6 )