BioPerl-DB

 view release on metacpan or  search on metacpan

lib/Bio/DB/CacheServer/SeqDB.pm  view on Meta::CPAN

}

=head1 Methods [that were] specific for Bio::DB::SeqI

=head2 get_PrimarySeq_stream

 Title   : get_PrimarySeq_stream
 Usage   : $stream = get_PrimarySeq_stream
 Function: Makes a Bio::DB::SeqStreamI compliant object
           which provides a single method, next_primary_seq
 Returns : Bio::DB::SeqStreamI
 Args    : none


=cut

sub get_PrimarySeq_stream{
   my ($self) = @_;

   # we just delegate back to read - this
   # is too complicated to implement at the moment

   # (ideally have a look-ahead cach'ing mechanism)

   my $stream = $self->read_db->get_PrimarySeq_stream();

   return $stream;
}

=head2 get_all_primary_ids

 Title   : get_all_ids
 Usage   : @ids = $seqdb->get_all_primary_ids()
 Function: gives an array of all the primary_ids of the 
           sequence objects in the database. These
           maybe ids (display style) or accession numbers
           or something else completely different - they
           *are not* meaningful outside of this database
           implementation.
 Example :
 Returns : an array of strings
 Args    : none


=cut

sub get_all_primary_ids{
   my ($self,@args) = @_;


   return $self->read_db->get_all_primary_ids;
}


=head2 get_Seq_by_primary_id

 Title   : get_Seq_by_primary_id
 Usage   : $seq = $db->get_Seq_by_primary_id($primary_id_string);
 Function: Gets a Bio::Seq object by the primary id. The primary
           id in these cases has to come from $db->get_all_primary_ids.
           There is no other way to get (or guess) the primary_ids
           in a database.

           The other possibility is to get Bio::PrimarySeqI objects
           via the get_PrimarySeq_stream and the primary_id field
           on these objects are specified as the ids to use here.
 Returns : A Bio::Seq object
 Args    : accession number (as a string)
 Throws  : "acc does not exist" exception


=cut

sub get_Seq_by_primary_id {
    my ($self,$id) = @_;

    # Ooops. Copy-and-paste. Bad Ewan! Bad Ewan!
    # (Doh! Second time as well. Very Bad Ewan!)
    
    my $seq;
    
    eval {
	# some future implementation would check when this was stored
	# and invalidate the cache.
	$seq = $self->db_adaptor->get_Seq_by_primary_id($self->dbid,$id);
    };
    if( $@ ) {
	# need to fetch from cache - 
	
	# we wont catch this exception - it passes up to the calling code
	$seq = $self->read_db->get_Seq_by_acc($id);
	# write it back!
	
	# a better implementation would put this on a queue to insert
	# in a fork or at leisure
	
	my $dbid = $self->seq_adaptor->store($self->dbid,$seq);
	
	# having gone to the trouble of storing retrieve it from local
	# - the whole point is that this access is better than the other db
	$seq = $self->seq_adaptor->fetch_by_dbID($dbid);
	
    }

    # return it
    return $seq;  
}



=head2 Get/Sets for attributes stored in this object

=cut

=head2 seq_adaptor

 Title   : seq_adaptor
 Usage   : $obj->seq_adaptor($newval)
 Function: 
 Example : 
 Returns : value of seq_adaptor



( run in 3.343 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )