use Scalar::Util 'reftype';
use Hash::Merge;
use List::Util qw/min max reduce/;
+use Try::Tiny;
use namespace::clean -except => 'meta';
is_datatype_numeric
_supports_insert_returning
_count_select
- _subq_count_select
_subq_update_delete
svp_rollback
svp_begin
my @unimplemented = qw(
_arm_global_destructor
_preserve_foreign_dbh
+ _verify_pid
+ _verify_tid
);
for my $method (@unimplemented) {
my @result;
my $want_array = wantarray;
- eval {
+ my $exception;
+ try {
if($want_array) {
@result = $coderef->(@args);
} elsif(defined $want_array) {
} else {
$coderef->(@args);
}
+ } catch {
+ $self->throw_exception("coderef returned an error: $_");
+ } finally {
+ ##Reset to the original state
+ $self->read_handler($current);
};
- ##Reset to the original state
- $self->read_handler($current);
-
- ##Exception testing has to come last, otherwise you might leave the
- ##read_handler set to master.
-
- if($@) {
- $self->throw_exception("coderef returned an error: $@");
- } else {
- return $want_array ? @result : $result[0];
- }
+ return $want_array ? @result : $result[0];
}
=head2 set_reliable_storage
return $self->_server_info->{dbms_version};
}
-sub _verify_pid {
- my $self = shift;
-
- for my $storage ($self->all_storages) {
- $storage->_verify_pid;
- }
-}
-
-sub _verify_tid {
- my $self = shift;
-
- for my $storage ($self->all_storages) {
- $storage->_verify_tid;
- }
-}
-
=head1 GOTCHAS
Due to the fact that replicants can lag behind a master, you must take care to