$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;
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 {
}
# 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
|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