From: Rafael Kitover Date: Wed, 1 Jul 2009 15:39:18 +0000 (+0000) Subject: move connection tests into _ping() X-Git-Tag: v0.08108~35^2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=6dc4be0f0d3810cff001512a91f3b832056e21e6;p=dbsrgits%2FDBIx-Class.git move connection tests into _ping() --- diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 3d9a200..63d41e4 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -669,12 +669,20 @@ sub connected { $self->_verify_pid; return 0 if !$self->_dbh; } - return ($dbh->FETCH('Active') && $dbh->ping); + return ($dbh->FETCH('Active') && $self->_ping); } return 0; } +sub _ping { + my $self = shift; + + my $dbh = $self->_dbh or return 0; + + return $dbh->ping; +} + # handle pid changes correctly # NOTE: assumes $self->_dbh is a valid $dbh sub _verify_pid { diff --git a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm index ee356aa..46b76df 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm @@ -83,33 +83,18 @@ sub _sequence_fetch { return $id; } -=head2 connected - -Returns true if we have an open (and working) database connection, false if it is not (yet) -open (or does not work). (Executes a simple SELECT to make sure it works.) - -The reason this is needed is that L's ping() does not do a real -OCIPing but just gets the server version, which doesn't help if someone killed -your session. - -=cut - -sub connected { +sub _ping { my $self = shift; - if (not $self->next::method(@_)) { - return 0; - } else { - my $dbh = $self->_dbh; + my $dbh = $self->_dbh or return 0; - local $dbh->{RaiseError} = 1; + local $dbh->{RaiseError} = 1; - eval { - $dbh->do("select 1 from dual"); - }; + eval { + $dbh->do("select 1 from dual"); + }; - return $@ ? 0 : 1; - } + return $@ ? 0 : 1; } sub _dbh_execute { diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm b/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm index 29265fb..9ce130f 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm @@ -1,4 +1,5 @@ -package DBIx::Class::Storage::DBI::Sybase::Base; +package # hide from PAUSE + DBIx::Class::Storage::DBI::Sybase::Base; use strict; use warnings; @@ -8,24 +9,12 @@ use warnings; DBIx::Class::Storage::DBI::Sybase::Base - Common functionality for drivers using DBD::Sybase -=head1 METHODS - -=head2 connected - -Returns true if we have an open (and working) database connection, false if it -is not (yet) open (or does not work). (Executes a simple SELECT to make sure it -works.) - -The reason this is needed is that L's ping() does not work with an -active statement handle, leading to masked database errors. - =cut -sub connected { +sub _ping { my $self = shift; my $dbh = $self->_dbh or return 0; - $dbh->FETCH('Active') or return 0; local $dbh->{RaiseError} = 1; eval {