From: Peter Rabbitson Date: Wed, 5 Aug 2009 10:09:07 +0000 (+0000) Subject: Rename last_dbh and turn it into a public method X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a52c8b220cc34804bf227aea8682aec7c0f10b99;p=dbsrgits%2FDBIx-Class-Historic.git Rename last_dbh and turn it into a public method --- diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 3c34088..121a2ca 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -667,6 +667,22 @@ sub with_deferred_fk_checks { $sub->(); } +=head2 connected + +=over + +=item Arguments: none + +=item Return Value: 1|0 + +=back + +Verifies that the the current database handle is active and ready to execute +an SQL statement (i.e. the connection did not get stale, server is still +answering, etc.) This method is used internally by L. + +=cut + sub connected { my ($self) = @_; @@ -718,7 +734,9 @@ sub ensure_connected { =head2 dbh -Returns the dbh - a data base handle of class L. +Returns a C<$dbh> - a data base handle of class L. The returned handle +is guaranteed to be healthy by implicitly calling L, and if +necessary performing a reconnection before returning. =cut @@ -733,12 +751,19 @@ sub dbh { return $self->_dbh; } -sub _get_dbh { - my $self = shift; +=head2 last_dbh - if (not $self->_dbh) { - $self->_populate_dbh; - } +This returns the B available C<$dbh> if any, or attempts to +connect and returns the resulting handle. This method differs from +L by not validating if a preexisting handle is still healthy +via L. Make sure you take appropriate precautions +when using this method, as the C<$dbh> may be useless at this point. + +=cut + +sub last_dbh { + my $self = shift; + $self->_populate_dbh unless $self->_dbh; return $self->_dbh; } @@ -748,7 +773,7 @@ sub _sql_maker_args { return ( bindtype=>'columns', array_datatypes => 1, - limit_dialect => $self->_get_dbh, + limit_dialect => $self->last_dbh, %{$self->_sql_maker_opts} ); } @@ -1203,7 +1228,7 @@ sub insert { $updated_cols->{$col} = $to_insert->{$col} = $self->_sequence_fetch( 'nextval', $col_info->{sequence} || - $self->_dbh_get_autoinc_seq($self->_get_dbh, $source) + $self->_dbh_get_autoinc_seq($self->last_dbh, $source) ); } } @@ -1993,7 +2018,7 @@ Returns the database driver name. =cut -sub sqlt_type { shift->_get_dbh->{Driver}->{Name} } +sub sqlt_type { shift->last_dbh->{Driver}->{Name} } =head2 bind_attribute_by_data_type @@ -2240,7 +2265,7 @@ See L for a list of values for C<$sqlt_args>. sub deployment_statements { my ($self, $schema, $type, $version, $dir, $sqltargs) = @_; # Need to be connected to get the correct sqlt_type - $self->_get_dbh() unless $type; + $self->last_dbh() unless $type; $type ||= $self->sqlt_type; $version ||= $schema->schema_version || '1.x'; $dir ||= './'; @@ -2285,7 +2310,7 @@ sub deploy { return if $line =~ /^\s+$/; # skip whitespace only $self->_query_start($line); eval { - $self->_get_dbh->do($line); + $self->last_dbh->do($line); }; if ($@) { carp qq{$@ (running "${line}")}; @@ -2314,7 +2339,7 @@ Returns the datetime parser class sub datetime_parser { my $self = shift; return $self->{datetime_parser} ||= do { - $self->_get_dbh; + $self->last_dbh; $self->build_datetime_parser(@_); }; } diff --git a/lib/DBIx/Class/Storage/DBI/ODBC.pm b/lib/DBIx/Class/Storage/DBI/ODBC.pm index d9b810a..7c3b739 100644 --- a/lib/DBIx/Class/Storage/DBI/ODBC.pm +++ b/lib/DBIx/Class/Storage/DBI/ODBC.pm @@ -8,7 +8,7 @@ use mro 'c3'; sub _rebless { my ($self) = @_; - my $dbtype = eval { $self->_get_dbh->get_info(17) }; + my $dbtype = eval { $self->last_dbh->get_info(17) }; unless ( $@ ) { # Translate the backend name into a perl identifier diff --git a/lib/DBIx/Class/Storage/DBI/Oracle.pm b/lib/DBIx/Class/Storage/DBI/Oracle.pm index 7a49b50..c0edb9a 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle.pm @@ -9,7 +9,7 @@ use mro 'c3'; sub _rebless { my ($self) = @_; - my $version = eval { $self->_get_dbh->get_info(18); }; + my $version = eval { $self->last_dbh->get_info(18); }; if ( !$@ ) { my ($major, $minor, $patchlevel) = split(/\./, $version); diff --git a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm index b97e34f..832da97 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm @@ -76,7 +76,7 @@ sub _dbh_get_autoinc_seq { sub _sequence_fetch { my ( $self, $type, $seq ) = @_; - my ($id) = $self->_get_dbh->selectrow_array("SELECT ${seq}.${type} FROM DUAL"); + my ($id) = $self->last_dbh->selectrow_array("SELECT ${seq}.${type} FROM DUAL"); return $id; } @@ -209,7 +209,7 @@ sub connect_call_datetime_setup { sub _svp_begin { my ($self, $name) = @_; - $self->_get_dbh->do("SAVEPOINT $name"); + $self->last_dbh->do("SAVEPOINT $name"); } =head2 source_bind_attributes @@ -263,7 +263,7 @@ sub _svp_release { 1 } sub _svp_rollback { my ($self, $name) = @_; - $self->_get_dbh->do("ROLLBACK TO SAVEPOINT $name") + $self->last_dbh->do("ROLLBACK TO SAVEPOINT $name") } =head1 AUTHOR diff --git a/lib/DBIx/Class/Storage/DBI/Pg.pm b/lib/DBIx/Class/Storage/DBI/Pg.pm index ac24ad3..7723a21 100644 --- a/lib/DBIx/Class/Storage/DBI/Pg.pm +++ b/lib/DBIx/Class/Storage/DBI/Pg.pm @@ -15,7 +15,7 @@ warn "DBD::Pg 2.9.2 or greater is strongly recommended\n" sub with_deferred_fk_checks { my ($self, $sub) = @_; - $self->_get_dbh->do('SET CONSTRAINTS ALL DEFERRED'); + $self->last_dbh->do('SET CONSTRAINTS ALL DEFERRED'); $sub->(); } @@ -82,26 +82,26 @@ sub bind_attribute_by_data_type { sub _sequence_fetch { my ( $self, $type, $seq ) = @_; - my ($id) = $self->_get_dbh->selectrow_array("SELECT nextval('${seq}')"); + my ($id) = $self->last_dbh->selectrow_array("SELECT nextval('${seq}')"); return $id; } sub _svp_begin { my ($self, $name) = @_; - $self->_get_dbh->pg_savepoint($name); + $self->last_dbh->pg_savepoint($name); } sub _svp_release { my ($self, $name) = @_; - $self->_get_dbh->pg_release($name); + $self->last_dbh->pg_release($name); } sub _svp_rollback { my ($self, $name) = @_; - $self->_get_dbh->pg_rollback_to($name); + $self->last_dbh->pg_rollback_to($name); } 1; diff --git a/lib/DBIx/Class/Storage/DBI/Sybase.pm b/lib/DBIx/Class/Storage/DBI/Sybase.pm index 41b0c81..c7031a1 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase.pm @@ -13,7 +13,7 @@ sub _rebless { my $self = shift; my $dbtype = eval { - @{$self->_get_dbh + @{$self->last_dbh ->selectrow_arrayref(qq{sp_server_info \@attribute_id=1}) }[2] }; diff --git a/lib/DBIx/Class/Storage/DBI/mysql.pm b/lib/DBIx/Class/Storage/DBI/mysql.pm index 89624f4..6510f7a 100644 --- a/lib/DBIx/Class/Storage/DBI/mysql.pm +++ b/lib/DBIx/Class/Storage/DBI/mysql.pm @@ -40,28 +40,28 @@ sub sqlt_type { sub _svp_begin { my ($self, $name) = @_; - $self->_get_dbh->do("SAVEPOINT $name"); + $self->last_dbh->do("SAVEPOINT $name"); } sub _svp_release { my ($self, $name) = @_; - $self->_get_dbh->do("RELEASE SAVEPOINT $name"); + $self->last_dbh->do("RELEASE SAVEPOINT $name"); } sub _svp_rollback { my ($self, $name) = @_; - $self->_get_dbh->do("ROLLBACK TO SAVEPOINT $name") + $self->last_dbh->do("ROLLBACK TO SAVEPOINT $name") } sub is_replicating { - my $status = shift->_get_dbh->selectrow_hashref('show slave status'); + my $status = shift->last_dbh->selectrow_hashref('show slave status'); return ($status->{Slave_IO_Running} eq 'Yes') && ($status->{Slave_SQL_Running} eq 'Yes'); } sub lag_behind_master { - return shift->_get_dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master}; + return shift->last_dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master}; } # MySql can not do subquery update/deletes, only way is slow per-row operations.