release v0.08198
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI.pm
index 993748d..d8529cb 100644 (file)
@@ -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