Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision e285ec14

Von Bernd Bleßmann vor fast 2 Jahren hinzugefügt

  • ID e285ec14e2a7c89d408a51b6731e968218c92c7f
  • Vorgänger c2342266

S::CVar->get_custom_variables beschleunigt, …

… indem CVar-values aller Variablen einer trans_id gleichzeitig geholt werden.
Das beschleunigt z.B. das Laden von Rechnungen mit vielen Positionen stark,
wenn viele benutzerdef. Variablen bei Waren hinterlegt sind.
Im Test mit 30 Positionen und 30 Variablen um ca. das 10-fache.

Unterschiede anzeigen:

SL/CVar.pm
my $sub_module = $params{sub_module} ? $params{sub_module} : '';
my $q_var =
qq|SELECT text_value, timestamp_value, timestamp_value::date AS date_value, number_value, bool_value
my $custom_variables = $self->get_configs(module => $params{module});
my $q_var =
qq|SELECT config_id, text_value, timestamp_value, timestamp_value::date AS date_value, number_value, bool_value
FROM custom_variables
WHERE (config_id = ?) AND (trans_id = ?) AND (sub_module = ?)|;
my $h_var = prepare_query($form, $dbh, $q_var);
WHERE (config_id IN (| . join(', ', ('?') x scalar( @$custom_variables )) . qq|))
AND (trans_id = ?) AND (sub_module = ?)|;
my $custom_variables = $self->get_configs(module => $params{module});
my $results_var = [];
if ($params{trans_id} && scalar( @$custom_variables )) {
$results_var = selectall_hashref_query($form, $dbh, $q_var, (map( { conv_i($_->{id}) } @$custom_variables), conv_i($params{trans_id}), $sub_module));
}
foreach my $cvar (@{ $custom_variables }) {
if ($cvar->{type} =~ m{^(?:html|text)field}) {
......
my ($act_var, $valid);
if ($params{trans_id}) {
my @values = (conv_i($cvar->{id}), conv_i($params{trans_id}), $sub_module);
do_statement($form, $h_var, $q_var, @values);
$act_var = $h_var->fetchrow_hashref();
$act_var = first { $_->{config_id} == $cvar->{id} } @$results_var;
$valid = $self->get_custom_variables_validity(config_id => $cvar->{id}, trans_id => $params{trans_id}, sub_module => $params{sub_module});
} else {
$valid = !$cvar->{flag_defaults_to_invalid};
......
}
}
$h_var->finish();
$main::lxdebug->leave_sub();
return $custom_variables;

Auch abrufbar als: Unified diff