]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Bug.pm
add _mergedwith_array for speed when filtering
[debbugs.git] / Debbugs / Bug.pm
index 539e7589a4035160e3c6bd655c5bba0e57c0c28a..38ebbe7ee034a0f069b06246dc6031f99bb99c76 100644 (file)
@@ -107,10 +107,7 @@ has correspondent_collection =>
     );
 sub _build_correspondent_collection   {
     my $self = shift;
-    if ($self->has_schema) {
-        return Debbugs::Collection::Correspondent->new(schema => $self->schema);
-    }
-    return Debbugs::Collection::Correspondent->new();
+    return Debbugs::Collection::Correspondent->new($self->schema_argument);
 }
 
 sub reset {
@@ -372,11 +369,23 @@ sub is_merged {
     return $self->mergedwith->count > 0;
 }
 
+has _mergedwith_array =>
+    (is => 'ro',
+     isa => 'ArrayRef[Int]',
+     builder => '_build_mergedwith_array',
+     lazy => 1,
+    );
+
+sub _build_mergedwith_array {
+    my $self = shift;
+    return [sort {$a <=> $b}
+            $self->_split_if_defined('mergedwith')];
+}
+
 sub _build_mergedwith {
     my $self = shift;
     return $self->bug_collection->
-       limit(sort {$a <=> $b}
-             $self->_split_if_defined('mergedwith'));
+       limit(@{$self->_mergedwith_array//[]});
 }
 sub _build_pending {
     return $_[0]->status->{pending} // '';
@@ -581,7 +590,7 @@ sub filter {
        return 1 if $self->matches($param{exclude});
     }
     if (exists $param{repeat_merged} and not $param{repeat_merged}) {
-       my @merged = sort {$a<=>$b} $self->bug, map {$_->bug} $self->mergedwith->members;
+       my @merged = sort {$a<=>$b} $self->bug, @{$self->_mergedwith_array // []};
        return 1 if first {sub {defined $_}}
             @{$param{seen_merged}}{@merged};
        @{$param{seen_merged}}{@merged} = (1) x @merged;
@@ -673,6 +682,12 @@ sub related_packages_and_versions {
     return @return;
 }
 
+sub CARP_TRACE {
+    my $self = shift;
+    return 'Debbugs::Bug={bug='.$self->bug.'}';
+}
+
+__PACKAGE__->meta->make_immutable;
 
 no Mouse;
 1;