Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 96670fe8

Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt

  • ID 96670fe82a38116ac10592a6ccbd34800f8ad9f8
  • Vorgänger e5a76ed1
  • Nachfolger 0b84f51f

»with_transaction« anstelle von »do_transaction« verwenden

Es sollte so selten wie möglich »do_transaction« verwndet werden, damit
man sich immer angewöhnt, »with_transaction« zu nutzen.

Hintergründe und Unterschiede zwischen den beiden Funktionen sind in der
Dokumentation von SL/DB.pm beschrieben.

Unterschiede anzeigen:

SL/DB/Object.pm
sub save {
my ($self, @args) = @_;
my ($result, $exception);
my $worker = sub {
$exception = $EVAL_ERROR unless eval {
SL::DB::Object::Hooks::run_hooks($self, 'before_save');
$result = $self->SUPER::save(@args);
SL::DB::Object::Hooks::run_hooks($self, 'after_save', $result);
1;
};
my $result;
return $result;
};
$self->db->with_transaction(sub {
SL::DB::Object::Hooks::run_hooks($self, 'before_save');
$result = $self->SUPER::save(@args);
SL::DB::Object::Hooks::run_hooks($self, 'after_save', $result);
$self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker);
die $exception if $exception;
1;
}) || die $self->error;
return $result;
}
......
sub delete {
my ($self, @args) = @_;
my ($result, $exception);
my $worker = sub {
$exception = $EVAL_ERROR unless eval {
SL::DB::Object::Hooks::run_hooks($self, 'before_delete');
$result = $self->SUPER::delete(@args);
SL::DB::Object::Hooks::run_hooks($self, 'after_delete', $result);
1;
};
return $result;
};
my $result;
$self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker);
$self->db->with_transaction(sub {
SL::DB::Object::Hooks::run_hooks($self, 'before_delete');
$result = $self->SUPER::delete(@args);
SL::DB::Object::Hooks::run_hooks($self, 'after_delete', $result);
die $exception if $exception;
1;
}) || die $self->error;
return $result;
}

Auch abrufbar als: Unified diff