X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FODBC%2FFirebird.pm;h=d4a5f504b207b119a66d2e9c38275861ff1230f3;hb=e02b39b48c5cca4812acb88d0bb71443cd8c8ff9;hp=0784e243a82fe7c944d16f9499d96f88f6d72f3f;hpb=6f7a118e7728040e015699975dafde1a1fb81538;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/ODBC/Firebird.pm b/lib/DBIx/Class/Storage/DBI/ODBC/Firebird.pm index 0784e24..d4a5f50 100644 --- a/lib/DBIx/Class/Storage/DBI/ODBC/Firebird.pm +++ b/lib/DBIx/Class/Storage/DBI/ODBC/Firebird.pm @@ -2,8 +2,10 @@ package DBIx::Class::Storage::DBI::ODBC::Firebird; use strict; use warnings; -use base qw/DBIx::Class::Storage::DBI::InterBase/; +use base 'DBIx::Class::Storage::DBI::InterBase'; use mro 'c3'; +use Try::Tiny; +use namespace::clean; =head1 NAME @@ -37,9 +39,23 @@ sub _init { 1 } # ODBC uses dialect 3 by default, good sub _set_sql_dialect { 1 } -# releasing savepoints doesn't work, but that shouldn't matter +# releasing savepoints doesn't work for some reason, but that shouldn't matter sub _svp_release { 1 } +sub _svp_rollback { + my ($self, $name) = @_; + + try { + $self->_dbh->do("ROLLBACK TO SAVEPOINT $name") + } + catch { + # Firebird ODBC driver bug, ignore + if (not /Unable to fetch information about the error/) { + $self->throw_exception($_); + } + }; +} + package # hide from PAUSE DBIx::Class::Storage::DBI::ODBC::Firebird::DateTime::Format; @@ -91,3 +107,4 @@ See L and L. You may distribute this code under the same terms as Perl itself. =cut +# vim:sts=2 sw=2: