X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FInformix.pm;h=8f230772e492b77f96bf8210d8e7d87626b638dc;hb=b9ca4ff1e045a7863033012e98dc83b5dc95e26e;hp=314f4c1ddf031979c1d05129277b550235c61143;hpb=b0a4cf8eb18957ad8076d2b3d68bcdd787aedd18;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI/Informix.pm b/lib/DBIx/Class/Storage/DBI/Informix.pm index 314f4c1..8f23077 100644 --- a/lib/DBIx/Class/Storage/DBI/Informix.pm +++ b/lib/DBIx/Class/Storage/DBI/Informix.pm @@ -3,9 +3,11 @@ use strict; use warnings; use base qw/DBIx::Class::Storage::DBI/; - use mro 'c3'; +use Scope::Guard (); +use Context::Preserve (); + __PACKAGE__->mk_group_accessors('simple' => '__last_insert_id'); =head1 NAME @@ -59,6 +61,21 @@ sub _svp_rollback { $self->_get_dbh->do("ROLLBACK TO SAVEPOINT $name") } +sub with_deferred_fk_checks { + my ($self, $sub) = @_; + + my $txn_scope_guard = $self->txn_scope_guard; + + $self->_do_query('SET CONSTRAINTS ALL DEFERRED'); + + my $sg = Scope::Guard->new(sub { + $self->_do_query('SET CONSTRAINTS ALL IMMEDIATE'); + }); + + return Context::Preserve::preserve_context(sub { $sub->() }, + after => sub { $txn_scope_guard->commit }); +} + =head2 connect_call_datetime_setup Used as: