Revision dcab2b89
Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt
SL/Form.pm | ||
---|---|---|
2648 | 2648 |
my ($var) = $sth->fetchrow_array; |
2649 | 2649 |
$sth->finish; |
2650 | 2650 |
|
2651 |
$var =~ s/\d+$/ sprintf '%0*d', length($&), $&+1 /e; |
|
2652 |
$var ||= 1; |
|
2651 |
if ($var =~ m/\d+$/) { |
|
2652 |
my $new_var = (substr $var, $-[0]) * 1 + 1; |
|
2653 |
my $len_diff = length($var) - $-[0] - length($new_var); |
|
2654 |
$var = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var; |
|
2655 |
|
|
2656 |
} else { |
|
2657 |
$var = $var . '1'; |
|
2658 |
} |
|
2653 | 2659 |
|
2654 | 2660 |
$query = qq|UPDATE defaults SET $fld = ?|; |
2655 | 2661 |
do_query($self, $dbh, $query, $var); |
... | ... | |
2680 | 2686 |
WHERE id = ? FOR UPDATE|; |
2681 | 2687 |
my ($var) = selectrow_query($self, $dbh, $query, $business_id); |
2682 | 2688 |
|
2683 |
$var =~ s/\d+$/ sprintf '%0*d', length($&), $&+1 /e; |
|
2684 |
|
|
2689 |
if ($var =~ m/\d+$/) { |
|
2690 |
my $new_var = (substr $var, $-[0]) * 1 + 1; |
|
2691 |
my $len_diff = length($var) - $-[0] - length($new_var); |
|
2692 |
$var = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var; |
|
2693 |
|
|
2694 |
} else { |
|
2695 |
$var = $var . '1'; |
|
2696 |
} |
|
2697 |
|
|
2685 | 2698 |
$query = qq|UPDATE business |
2686 | 2699 |
SET customernumberinit = ? |
2687 | 2700 |
WHERE id = ?|; |
Auch abrufbar als: Unified diff
update_business und update_defaults: Bei sehr langen Zahlenkomponenten wurden die erzeugten Nummern leider auf -0000000...001 gesetzt. Grund ist, dass der Formatierer '%d' für sprintf auf 32bit-Systemen nun mal nur mit 32bit-Zahlen umgehen kann. Geriet die Zahlenkomponente größer als 2147483647, so erhielt man einen Überlauf.