Raw content of Bio::EnsEMBL::Analysis::Tools::Otter::DBSQL::DnaAlignFeatureHistoryAdaptor
# Perl module for Bio::EnsEMBL::Analysis::Tools::Otter::DBSQL::DnaAlignFeatureHistoryAdaptor
#
# You may distribute this module under the same terms as perl itself
# POD documentation - main docs before the code
=head1 NAME
Bio::EnsEMBL::Analysis::Tools::Otter::DBSQL::DnaAlignFeatureHistoryAdaptor
=head1 SYNOPSIS
fetches the DnaAlignFeatureHistory objects from an Otter database
=head1 DESCRIPTION
=head1 CONTACT
Post questions/comments to the EnsEMBL development list:
ensembl-dev@ebi.ac.uk
=head1 METHODS
=cut
package Bio::EnsEMBL::Analysis::Tools::Otter::DBSQL::DnaAlignFeatureHistoryAdaptor;
use Bio::EnsEMBL::Analysis::Tools::Otter::DnaAlignFeatureHistory;
use Bio::EnsEMBL::DBSQL::BaseAdaptor;
use Bio::EnsEMBL::Utils::Exception;
use Bio::EnsEMBL::Utils::Cache;
use vars qw(@ISA);
use strict;
@ISA = qw( Bio::EnsEMBL::DBSQL::BaseAdaptor);
sub new {
my ($class, $db) = @_;
my $self = $class->SUPER::new($db);
return $self;
}
sub fetch_all_by_seq_region {
my $self = shift;
my ($seq_region_id, $analysis_id, $daf_id) = @_;
my ($daf_history, $dbID);
my $rowHashRef;
my $sth = $self->prepare(
"SELECT align_feature_history_id, ".
"seq_region_id, analysis_id, align_feature_id_start, ".
"align_feature_id_end, db_version, date ".
"FROM dna_align_feature_history ".
"WHERE seq_region_id = ? ".
"AND analysis_id = ? ".
"AND align_feature_id_start <= ? ".
"AND align_feature_id_end >= ? "
);
$sth->bind_param(1,$seq_region_id ,SQL_INTEGER);
$sth->bind_param(2,$analysis_id ,SQL_SMALLINT);
$sth->bind_param(3,$daf_id ,SQL_INTEGER);
$sth->bind_param(4,$daf_id ,SQL_INTEGER);
$sth->execute;
while ($rowHashRef = $sth->fetchrow_hashref) {
my $daf_history = $self->_objFromHashref($rowHashRef);
foreach my $num ($daf_history->align_feature_id_start .. $daf_history->align_feature_id_end) {
my $key = uc(join(':', $daf_history->seq_region_id,$daf_history->analysis->dbID,$daf_id));
$self->{_dafh_cache}->{$key} = $daf_history;
#$self->{_dafh_cache}->{$key} = $daf_history;
}
}
$sth->finish;
my @daf_histories = values %{$self->{_dafh_cache}};
return \@daf_histories;
}
sub clear_cache {
my ($self) = @_;
$self->{'_dafh_cache'} = ();
}
sub _tables {
my $self = shift;
return (['dna_align_feature_history' , 'dafh']);
}
sub _columns {
my $self = shift;
return ('dafh.align_feature_history_id','dafh.seq_region_id',
'dafh.analysis_id','dafh.align_feature_id_start',
'dafh.align_feature_id_end','dafh.db_version','dafh.date');
}
sub fetch_by_DnaAlignFeature_info {
my $self = shift;
my ($dna_align_feature_id, $seq_region_id, $analysis_id) = @_;
# each row in dna_align_feature_history is uniquely identified
my $key = uc(join(':', $seq_region_id,$analysis_id,$dna_align_feature_id));
#will only use feature_cache if hasn't been no_cache attribute set
if (!defined $self->db->no_cache || !$self->db->no_cache){
if (exists($self->{'_dafh_cache'}->{$key}) && defined $self->{'_dafh_cache'}->{$key}) {
#print STDERR " Found $key in cache\n";
return $self->{'_dafh_cache'}->{$key};
} else {
#print STDERR "Not found $key , load cache\n";
}
}
#
# load the cache with some extras
#
$self->fetch_all_by_seq_region($seq_region_id, $analysis_id, $dna_align_feature_id);
my $original_key = uc(join(':', $seq_region_id,$analysis_id,$dna_align_feature_id));
my $dafh = $self->{'_dafh_cache'}->{$original_key};
#will only use feature_cache when set attribute no_cache in DBAdaptor
if (!defined $self->db->no_cache || !$self->db->no_cache){
# let's try to be clever and make keys for all dafs associated with this dafh
foreach my $num ($dafh->align_feature_id_start .. $dafh->align_feature_id_end) {
my $k = uc(join(':', $seq_region_id,$analysis_id,$num));
if (!exists $self->{'_dafh_cache'}->{$k} || !defined $self->{'_dafh_cache'}->{$k}) {
#print STDERR " created key $k... size hash is ".scalar(keys %{$self->{'_dafh_cache'}})."\n";
$self->{'_dafh_cache'}->{$k} = $dafh;
}
}
}
return $dafh;
}
=head2 _objFromHashref
Arg [1] : hashref $rowHash
Description: Private helper function generates an Analysis object from a
mysql row hash reference.
Returntype : Bio::EnsEMBL::Analysis
Exceptions : none
Caller : Bio::EnsEMBL::DBSQL::AnalsisAdaptor::fetch_* methods
Status : Stable
=cut
sub _objFromHashref {
my $self = shift;
my $rowHash = shift;
my $aa = $self->db->get_AnalysisAdaptor();
my $analysis = $aa->fetch_by_dbID($rowHash->{analysis_id});
my $dna_align_feature_history = Bio::EnsEMBL::Analysis::Tools::Otter::DnaAlignFeatureHistory->new(
-id => $rowHash->{align_feature_history_id},
-seq_region_id => $rowHash->{seq_region_id},
-analysis => $analysis,
-align_feature_id_start => $rowHash->{align_feature_id_start},
-align_feature_id_end => $rowHash->{align_feature_id_end},
-db_version => $rowHash->{db_version},
-date => $rowHash->{date},
-adaptor => $self,
);
return $dna_align_feature_history;
}
=head2 _objFromHashref
Arg [1] : $sth
Description: Private helper function generates an DnaAlignFeatureHistory object
Returntype : Bio::EnsEMBL::Analysis::Tools::Otter::DnaAlignFeatureHistory
Exceptions : none
Caller : Bio::EnsEMBL::DBSQL::AnalsisAdaptor::fetch_* methods
Status : Stable
=cut
sub _objs_from_sth {
my ($self, $sth) = @_;
my $aa = $self->db->get_AnalysisAdaptor();
my @out;
my ($align_feature_history_id, $seq_region_id, $analysis_id, $align_feature_id_start,
$align_feature_id_end, $db_version, $date);
$sth->bind_columns(\$align_feature_history_id, \$seq_region_id, \$analysis_id, \$align_feature_id_start,
\$align_feature_id_end, \$db_version, \$date);
while($sth->fetch()) {
my $analysis = $aa->fetch_by_dbID($analysis_id);
push @out, Bio::EnsEMBL::Analysis::Tools::Otter::DnaAlignFeatureHistory->new(
-id => $align_feature_history_id,
-seq_region_id => $seq_region_id,
-analysis => $analysis,
-align_feature_id_start => $align_feature_id_start,
-align_feature_id_end => $align_feature_id_end,
-db_version => $db_version,
-date => $date,
-adaptor => $self,
);
}
return \@out;
}
1;