/;
use mro 'c3';
-use DBD::Pg qw(:pg_types);
use Scope::Guard ();
use Context::Preserve 'preserve_context';
+use DBIx::Class::Carp;
+use Try::Tiny;
use namespace::clean;
__PACKAGE__->sql_limit_dialect ('LimitOffset');
__PACKAGE__->sql_quote_char ('"');
__PACKAGE__->datetime_parser_type ('DateTime::Format::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()
-
sub _determine_supports_insert_returning {
return shift->_server_info->{normalized_dbms_version} >= 8.002
? 1
sub bind_attribute_by_data_type {
my ($self,$data_type) = @_;
- my $bind_attributes = {
- 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};
+ if ($self->_is_binary_lob_type($data_type)) {
+ # this is a hot-ish codepath, use an escape flag to minimize
+ # amount of function/method calls
+ # additionally version.pm is cock, and memleaks on multiple
+ # ->VERSION calls
+ # the flag is stored in the DBD namespace, so that Class::Unload
+ # will work (unlikely, but still)
+ unless ($DBD::Pg::__DBIC_DBD_VERSION_CHECK_DONE__) {
+ if ($self->_server_info->{normalized_dbms_version} >= 9.0) {
+ try { DBD::Pg->VERSION('2.17.2'); 1 } or carp (
+ __PACKAGE__.': BYTEA columns are known to not work on Pg >= 9.0 with DBD::Pg < 2.17.2'
+ );
+ }
+ elsif (not try { DBD::Pg->VERSION('2.9.2'); 1 } ) { carp (
+ __PACKAGE__.': DBD::Pg 2.9.2 or greater is strongly recommended for BYTEA column support'
+ )}
+
+ $DBD::Pg::__DBIC_DBD_VERSION_CHECK_DONE__ = 1;
+ }
+
+ return { pg_type => DBD::Pg::PG_BYTEA() };
}
else {
- return;
+ return undef;
}
}
-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 {