From: Rafael Kitover Date: Wed, 1 Jul 2009 13:21:30 +0000 (+0000) Subject: new connected() for dbd::sybase users X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=eabab5d0d07817310c72a6851d01283a62c9f4de;p=dbsrgits%2FDBIx-Class-Historic.git new connected() for dbd::sybase users --- diff --git a/lib/DBIx/Class/Storage/DBI/Sybase.pm b/lib/DBIx/Class/Storage/DBI/Sybase.pm index ec4fcf7..9b80f81 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase.pm @@ -2,8 +2,11 @@ package DBIx::Class::Storage::DBI::Sybase; use strict; use warnings; - -use base qw/DBIx::Class::Storage::DBI::NoBindVars/; +use mro 'c3'; +use base qw/ + DBIx::Class::Storage::DBI::Sybase::Base + DBIx::Class::Storage::DBI::NoBindVars +/; sub _rebless { my $self = shift; diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm b/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm new file mode 100644 index 0000000..a26ed23 --- /dev/null +++ b/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm @@ -0,0 +1,52 @@ +package DBIx::Class::Storage::DBI::Sybase::Base; + +use strict; +use warnings; + +=head1 NAME + +DBIx::Class::Storage::DBI::Sybase::Base - Common functionality for drivers using +L + +=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 { + my $self = shift; + + my $dbh = $self->_dbh; + + local $dbh->{RaiseError} = 1; + + my $ping_sth; + + eval { + my $ping_sth = $dbh->prepare_cached("select 1"); + $ping_sth->execute; + $ping_sth->finish; + }; + + return $@ ? 0 : 1; +} + +1; + +=head1 AUTHORS + +See L. + +=head1 LICENSE + +You may distribute this code under the same terms as Perl itself. + +=cut diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm b/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm index 58ac36f..e6809ec 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm @@ -2,10 +2,10 @@ package DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server; use strict; use warnings; - +use mro 'c3'; use base qw/ + DBIx::Class::Storage::DBI::Sybase::Base DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server - DBIx::Class::Storage::DBI::Sybase /; 1;