From 82cc2d402135a13aa4ae1cc7f9ba2c535bef8e10 Mon Sep 17 00:00:00 2001
From: Patrick Meidl <pm2@sanger.ac.uk>
Date: Thu, 17 Apr 2008 13:35:18 +0000
Subject: [PATCH] fixed bug in load_and_merge() when using
 --cache_method=build_cache_all

---
 modules/Bio/EnsEMBL/IdMapping/Cache.pm | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/modules/Bio/EnsEMBL/IdMapping/Cache.pm b/modules/Bio/EnsEMBL/IdMapping/Cache.pm
index 1b41018c44..ebd6a8d72f 100644
--- a/modules/Bio/EnsEMBL/IdMapping/Cache.pm
+++ b/modules/Bio/EnsEMBL/IdMapping/Cache.pm
@@ -155,6 +155,9 @@ sub build_cache_by_slice {
   # write cache to file, then flush cache to reclaim memory
   my $size = $self->write_all_to_file($type);
 
+  # set cache method (required for loading cache later)
+  $self->cache_method('BY_SEQ_REGION');
+
   return $num_genes, $size;
 }
 
@@ -199,6 +202,9 @@ sub build_cache_all {
   # write cache to file, then flush cache to reclaim memory
   my $size = $self->write_all_to_file($type);
 
+  # set cache method (required for loading cache later)
+  $self->cache_method('ALL');
+
   return $num_genes, $size;
 }
 
@@ -1052,8 +1058,16 @@ sub read_and_merge {
     throw("Db type must be 'source' or 'target'.");
   }
 
-  foreach my $slice_name (@{ $self->slice_names($dbtype) }) {
-    $self->read_from_file("$dbtype.$slice_name");
+  # read cache from single or multiple files, depending on caching strategy
+  my $cache_method = $self->cache_method;
+  if ($cache_method eq 'ALL') {
+    $self->read_from_file("$dbtype.ALL");
+  } elsif ($cache_method eq 'BY_SEQ_REGION') {
+    foreach my $slice_name (@{ $self->slice_names($dbtype) }) {
+      $self->read_from_file("$dbtype.$slice_name");
+    }
+  } else {
+    throw("Unknown cache method: $cache_method.");
   }
 
   $self->merge($dbtype);
@@ -1196,6 +1210,13 @@ sub conf {
 }
 
 
+sub cache_method {
+  my $self = shift;
+  $self->{'instance'}->{'cache_method'} = shift if (@_);
+  return $self->{'instance'}->{'cache_method'};
+}
+
+
 sub highest_common_cs {
   my $self = shift;
   $self->{'instance'}->{'hccs'} = shift if (@_);
-- 
GitLab