use namespace::clean w/ Try::Tiny
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Oracle / Generic.pm
index 3c28b08..933de9d 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 use Scope::Guard ();
 use Context::Preserve ();
 use Try::Tiny;
+use namespace::clean;
 
 =head1 NAME
 
@@ -125,13 +126,27 @@ sub _dbh_execute {
   my $self = shift;
   my ($dbh, $op, $extra_bind, $ident, $bind_attributes, @args) = @_;
 
-  my $retried;
+  my (@res, $tried);
+  my $wantarray = wantarray();
+  my $next = $self->next::can;
   do {
     try {
-      return $self->next::method($dbh, $op, $extra_bind, $ident, $bind_attributes, @args);
+      my $exec = sub { $self->$next($dbh, $op, $extra_bind, $ident, $bind_attributes, @args) };
+
+      if (!defined $wantarray) {
+        $exec->();
+      }
+      elsif (! $wantarray) {
+        $res[0] = $exec->();
+      }
+      else {
+        @res = $exec->();
+      }
+
+      $tried++;
     }
     catch {
-      if (!$retried and $_ =~ /ORA-01003/) {
+      if (! $tried and $_ =~ /ORA-01003/) {
         # ORA-01003: no statement parsed (someone changed the table somehow,
         # invalidating your cursor.)
         my ($sql, $bind) = $self->_prep_for_execute($op, $extra_bind, $ident, \@args);
@@ -141,7 +156,9 @@ sub _dbh_execute {
         $self->throw_exception($_);
       }
     };
-  } while (not $retried++);
+  } while (! $tried++);
+
+  return $wantarray ? @res : $res[0];
 }
 
 =head2 get_autoinc_seq
@@ -156,19 +173,6 @@ sub get_autoinc_seq {
   $self->dbh_do('_dbh_get_autoinc_seq', $source, $col);
 }
 
-=head2 columns_info_for
-
-This wraps the superclass version of this method to force table
-names to uppercase
-
-=cut
-
-sub columns_info_for {
-  my ($self, $table) = @_;
-
-  $self->next::method($table);
-}
-
 =head2 datetime_parser_type
 
 This sets the proper DateTime::Format module for use with
@@ -352,7 +356,7 @@ sub with_deferred_fk_checks {
   my $txn_scope_guard = $self->txn_scope_guard;
 
   $self->_do_query('alter session set constraints = deferred');
-  
+
   my $sg = Scope::Guard->new(sub {
     $self->_do_query('alter session set constraints = immediate');
   });