Commit 74954fdd authored by Simon Green's avatar Simon Green

Bug 880093 - Cache filter_wants

r=glob, a=glob
parent 8afeaf6d
...@@ -38,28 +38,38 @@ sub filter ($$;$) { ...@@ -38,28 +38,38 @@ sub filter ($$;$) {
sub filter_wants ($$;$) { sub filter_wants ($$;$) {
my ($params, $field, $prefix) = @_; my ($params, $field, $prefix) = @_;
my %include = map { $_ => 1 } @{ $params->{'include_fields'} || [] };
my %exclude = map { $_ => 1 } @{ $params->{'exclude_fields'} || [] };
# Since this is operation is resource intensive, we will cache the results
# This assumes that $params->{*_fields} doesn't change between calls
my $cache = Bugzilla->request_cache->{filter_wants} ||= {};
$field = "${prefix}.${field}" if $prefix; $field = "${prefix}.${field}" if $prefix;
if (exists $cache->{$field}) {
return $cache->{$field};
}
my %include = map { $_ => 1 } @{ $params->{'include_fields'} || [] };
my %exclude = map { $_ => 1 } @{ $params->{'exclude_fields'} || [] };
my $wants = 1;
if (defined $params->{exclude_fields} && $exclude{$field}) { if (defined $params->{exclude_fields} && $exclude{$field}) {
return 0; $wants = 0;
} }
if (defined $params->{include_fields} && !$include{$field}) { elsif (defined $params->{include_fields} && !$include{$field}) {
if ($prefix) { if ($prefix) {
# Include the field if the parent is include (and this one is not excluded) # Include the field if the parent is include (and this one is not excluded)
return 0 if !$include{$prefix}; $wants = 0 if !$include{$prefix};
} }
else { else {
# We want to include this if one of the sub keys is included # We want to include this if one of the sub keys is included
my $key = $field . '.'; my $key = $field . '.';
my $len = length($key); my $len = length($key);
return 0 if ! grep { substr($_, 0, $len) eq $key } keys %include; $wants = 0 if ! grep { substr($_, 0, $len) eq $key } keys %include;
} }
} }
return 1; $cache->{$field} = $wants;
return $wants;
} }
sub taint_data { sub taint_data {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment