X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FPg.pm;h=f4dbda6f2a2c8fdc46772253aba1c7e4c66baa66;hb=55f68788a1e0975e4cc36e0623bf4b70c514b46e;hp=128db757ad07d4d601cb1d4a2ed4998f0cb80aca;hpb=4190ff95124ad2b3f33067b2e7d6ccfb919dab7c;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI/Pg.pm b/lib/DBIx/Class/Storage/DBI/Pg.pm index 128db75..f4dbda6 100644 --- a/lib/DBIx/Class/Storage/DBI/Pg.pm +++ b/lib/DBIx/Class/Storage/DBI/Pg.pm @@ -10,6 +10,7 @@ use mro 'c3'; use Scope::Guard (); use Context::Preserve 'preserve_context'; +use DBIx::Class::Carp; use namespace::clean; __PACKAGE__->sql_limit_dialect ('LimitOffset'); @@ -162,46 +163,43 @@ sub sqlt_type { return 'PostgreSQL'; } -my $bind_attributes; +my $type_cache; sub bind_attribute_by_data_type { my ($self,$data_type) = @_; - $bind_attributes ||= do { - require DBD::Pg; - - # Ask for a DBD::Pg with array support - warn __PACKAGE__.": DBD::Pg 2.9.2 or greater is strongly recommended\n" - if ($DBD::Pg::VERSION < 2.009002); # pg uses (used?) version::qv() - { - bytea => { pg_type => DBD::Pg::PG_BYTEA() }, - blob => { pg_type => DBD::Pg::PG_BYTEA() }, - }; - }; - - if( defined $bind_attributes->{$data_type} ) { - return $bind_attributes->{$data_type}; + # Ask for a DBD::Pg with array support + # pg uses (used?) version::qv() + require DBD::Pg; + if ($DBD::Pg::VERSION < 2.009002) { + carp_once( __PACKAGE__.": DBD::Pg 2.9.2 or greater is strongly recommended\n" ); } - else { - return; + + # cache the result of _is_binary_lob_type + if (!exists $type_cache->{$data_type}) { + $type_cache->{$data_type} = $self->_is_binary_lob_type($data_type) + ? +{ pg_type => DBD::Pg::PG_BYTEA() } + : undef } + + $type_cache->{$data_type}; } -sub _svp_begin { +sub _exec_svp_begin { my ($self, $name) = @_; - $self->_get_dbh->pg_savepoint($name); + $self->_dbh->pg_savepoint($name); } -sub _svp_release { +sub _exec_svp_release { my ($self, $name) = @_; - $self->_get_dbh->pg_release($name); + $self->_dbh->pg_release($name); } -sub _svp_rollback { +sub _exec_svp_rollback { my ($self, $name) = @_; - $self->_get_dbh->pg_rollback_to($name); + $self->_dbh->pg_rollback_to($name); } sub deployment_statements {