Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 96670fe8

Von Moritz Bunkus vor mehr als 7 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/Helper/ActsAsList.pm
40 40
sub remove_from_list {
41 41
  my ($self) = @_;
42 42

  
43
  my $worker = sub {
43
  return $self->db->with_transaction(sub {
44 44
    remove_position($self);
45 45

  
46 46
    # Set to -1 manually because $self->update_attributes() would
......
56 56
SQL
57 57
    $self->db->dbh->do($sql, undef, $self->$primary_key_col);
58 58
    $self->$column(undef);
59
  };
60

  
61
  return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker);
59
  });
62 60
}
63 61

  
64 62
sub add_to_list {
......
109 107
      ${group_by}
110 108
SQL
111 109

  
112
  my $worker = sub {
110
  return $self->db->with_transaction(sub {
113 111
    $self->db->dbh->do($query, undef, $new_position - 1, @values);
114 112
    $self->update_attributes($column => $new_position);
115
  };
116

  
117
  return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker);
113
  });
118 114
}
119 115

  
120 116
sub get_next_in_list {
......
144 140

  
145 141
  my $self   = ref($class_or_self) ? $class_or_self : $class_or_self->new;
146 142
  my $column = column_name($self);
147
  my $result = $self->db->do_transaction(sub {
143
  my $result = $self->db->with_transaction(sub {
148 144
    my $query = qq|UPDATE | . $self->meta->table . qq| SET ${column} = ? WHERE id = ?|;
149 145
    my $sth   = $self->db->dbh->prepare($query) || die $self->db->dbh->errstr;
150 146

  
......
153 149
    }
154 150

  
155 151
    $sth->finish;
152

  
153
    1;
156 154
  });
157 155

  
158 156
  return $result;

Auch abrufbar als: Unified diff