Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 43de7ef1

Von Sven Schöling vor fast 8 Jahren hinzugefügt

  • ID 43de7ef11a1fe565968656c24ea0772a60667b3b
  • Vorgänger 1bed9601
  • Nachfolger 6c4b42c0

CustomVariables: Requestlevel Caching für cvars_by_config

- Configs werden jetzt gecacht.
- is_valid wird en bloc vorberechnet und im Objekt gecacht.

Unterschiede anzeigen:

SL/DB/Helper/CustomVariables.pm
use Carp;
use Data::Dumper;
use List::Util qw(first);
use List::UtilsBy qw(sort_by);
use List::UtilsBy qw(sort_by partition_by);
use constant META_CVARS => 'cvars_config';
......
my $configs = _all_configs(%params);
my $cvars = $self->custom_variables;
my %cvars_by_config = map { $_->config_id => $_ } @$cvars;
my $invalids = _all_invalids($self->${\ $self->meta->primary_key_columns->[0]->name }, $configs, %params);
my %invalids_by_config = map { $_->config_id => 1 } @$invalids;
my @return = map(
{
my $cvar;
if ( $cvars_by_config{$_->id} ) {
$cvars_by_config{$_->id};
$cvar = $cvars_by_config{$_->id};
$cvar->{is_valid} = !$invalids_by_config{$_->id};
}
else {
my $cvar = _new_cvar($self, %params, config => $_);
$cvar = _new_cvar($self, %params, config => $_);
$self->add_custom_variables($cvar);
$cvar;
$cvar->{is_valid} = 1;
}
$cvar->{config} = $_;
$cvar;
}
@$configs
);
......
require SL::DB::CustomVariableConfig;
SL::DB::Manager::CustomVariableConfig->get_all_sorted($params{module} ? (query => [ module => $params{module} ]) : ());
my $cache = $::request->cache("::SL::DB::Helper::CustomVariables::object_cache");
if (!$cache->{all}) {
my $configs = SL::DB::Manager::CustomVariableConfig->get_all_sorted;
$cache->{all} = $configs;
$cache->{module} = { partition_by { $_->module } @$configs };
}
$params{module}
? $cache->{modules}{$params{module}}
: $cache->{all};
}
sub _overload_by_module {
......
);
}
sub _all_invalids {
my ($trans_id, $configs, %params) = @_;
require SL::DB::CustomVariableValidity;
# easy 1: no trans_id, all valid by default.
return [] unless $trans_id;
# easy 2: no module in params? no validity
return [] unless $params{module};
my @module_configs = grep { $_->module eq $params{module} } @$configs;
return [] unless @module_configs;
# nor find all entries for that and return
SL::DB::Manager::CustomVariableValidity->get_all(
query => [
config_id => [ map { $_->id } @module_configs ],
trans_id => $trans_id,
]
);
}
1;
__END__

Auch abrufbar als: Unified diff