X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI.pm;h=d8529cb118173b25c1615c1a75216eacdd1c7667;hb=0a7eddc0faa5889d647509ade1018b1b39e964f2;hp=993748def8eaf641d932a64af7dad4032b700149;hpb=fe0708a2d68b5d34b6bc6f7e70164c3e569f1dd0;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 993748d..d8529cb 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -1075,7 +1075,16 @@ sub _server_info { $info = {}; - my $server_version = try { $self->_get_server_version }; + my $server_version; + try { + $server_version = $self->_get_server_version; + } + catch { + if ($self->{_in_determine_driver}) { + $self->throw_exception($_); + } + $server_version = undef; + }; if (defined $server_version) { $info->{dbms_version} = $server_version; @@ -1119,7 +1128,19 @@ sub _dbh_get_info { unless defined $info; } - return try { $self->_get_dbh->get_info($info) } || undef; + my $res; + + try { + $res = $self->_get_dbh->get_info($info); + } + catch { + if ($self->{_in_determine_driver}) { + $self->throw_exception($_); + } + $res = undef; + }; + + return $res; } sub _determine_driver { @@ -2197,7 +2218,15 @@ sub _select_args { } # try to simplify the joinmap further (prune unreferenced type-single joins) - $ident = $self->_prune_unused_joins ($ident, $select, $where, $attrs); + if ( + ref $ident + and + reftype $ident eq 'ARRAY' + and + @$ident != 1 + ) { + $ident = $self->_prune_unused_joins ($ident, $select, $where, $attrs); + } ### # This would be the point to deflate anything found in $where @@ -2950,6 +2979,13 @@ sub _is_text_lob_type { |national\s*character\s*varying))\z/xi); } +# Determine if a data_type is some type of a binary type +sub _is_binary_type { + my ($self, $data_type) = @_; + $data_type && ($self->_is_binary_lob_type($data_type) + || $data_type =~ /(?:var)?(?:binary|bit|graphic)(?:\s*varying)?/i); +} + 1; =head1 USAGE NOTES