use warnings;
use base qw/DBIx::Class::Storage::DBI/;
-
use mro 'c3';
+use Scope::Guard ();
+use Context::Preserve 'preserve_context';
+use namespace::clean;
+
+__PACKAGE__->sql_limit_dialect ('SkipFirst');
+
__PACKAGE__->mk_group_accessors('simple' => '__last_insert_id');
=head1 NAME
shift->__last_insert_id;
}
-sub _sql_maker_opts {
- my ( $self, $opts ) = @_;
-
- if ( $opts ) {
- $self->{_sql_maker_opts} = { %$opts };
- }
-
- return { limit_dialect => 'SkipFirst', %{$self->{_sql_maker_opts}||{}} };
-}
-
sub _svp_begin {
my ($self, $name) = @_;
$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 preserve_context { $sub->() } after => sub { $txn_scope_guard->commit };
+}
+
=head2 connect_call_datetime_setup
Used as: