SL::TransNumber: Belegtabelle vor Auslesen locken
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 3 Jun 2015 09:33:47 +0000 (11:33 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 3 Jun 2015 14:53:00 +0000 (16:53 +0200)
Die Tabelle, aus der die Liste der bereits benutzten Belegnummern
ausgelesen wird, muss exklusiv gelockt werden, um zu verhindern, dass
danach zwischen dem Auslesen und der Vergabe der neuen Belegnummer eine
andere DB-Verbindung dasselbe macht und dieselbe Nummer verwendet.

Dieses Locking muss daher vor dem Auslesen der Daten geschehen.

SL/TransNumber.pm

index 8be5bcd..1e62cfb 100644 (file)
@@ -125,6 +125,7 @@ sub create_unique {
     $where
 SQL
 
+  do_query($form, $self->dbh, "LOCK TABLE " . $filters{table}) || die $self->dbh->errstr;
   my %numbers_in_use = selectall_as_map($form, $self->dbh, $query, $filters{trans_number}, 'in_use');
 
   my $business_number;