[Bast-commits] r5465 -
DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Oracle
caelum at dev.catalyst.perl.org
caelum at dev.catalyst.perl.org
Fri Feb 13 10:40:55 GMT 2009
Author: caelum
Date: 2009-02-13 10:40:55 +0000 (Fri, 13 Feb 2009)
New Revision: 5465
Modified:
DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm
Log:
Some fixes for Oracle edge cases
Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm 2009-02-13 10:27:36 UTC (rev 5464)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm 2009-02-13 10:40:55 UTC (rev 5465)
@@ -69,6 +69,48 @@
return $id;
}
+sub _dbh_execute {
+ my $self = shift;
+ my ($dbh, $op, $extra_bind, $ident, $bind_attributes, @args) = @_;
+
+ my $wantarray = wantarray;
+ my @res;
+ my $exception;
+
+ my $try = 2;
+
+ while ($try--) {
+ eval {
+ if ($wantarray) {
+ @res = $self->SUPER::_dbh_execute(@_);
+ } else {
+ $res[0] = $self->SUPER::_dbh_execute(@_);
+ }
+ };
+ $exception = $@;
+ if ($exception =~ /ORA-(?:00028|01012)/) {
+# ORA-00028: your session has been killed
+# ORA-01012: not logged on
+ $self->disconnect;
+
+ $self->throw_exception($exception) if $self->{_in_dbh_do};
+
+ $self->ensure_connected;
+ } elsif ($exception =~ /ORA-01003/) { # invalid cursor
+# ORA-01003: no statement parsed (someone renamed a column or something,
+# invalidating your cursor.)
+ my ($sql, $bind) = $self->_prep_for_execute($op, $extra_bind, $ident, \@args);
+ delete $dbh->{CachedKids}{$sql};
+ } else {
+ last;
+ }
+ }
+
+ $self->throw_exception($exception) if $exception;
+
+ wantarray ? @res : $res[0]
+}
+
=head2 get_autoinc_seq
Returns the sequence name for an autoincrement column
More information about the Bast-commits
mailing list