Bio::EnsEMBL::DBSQL DensityTypeAdaptor
SummaryIncluded librariesPackage variablesSynopsisDescriptionGeneral documentationMethods
Toolbar
WebCvsRaw content
Summary
Bio::EnsEMBL::DBSQL::DensityTypeAdaptor
Package variables
No package variables defined.
Included modules
Bio::EnsEMBL::DBSQL::BaseAdaptor
Bio::EnsEMBL::DensityType
Bio::EnsEMBL::Utils::Exception qw ( throw warning )
Inherit
Bio::EnsEMBL::DBSQL::BaseAdaptor
Synopsis
  my $density_type_adaptor =
$registry->get_adaptor( 'Human', 'Core', 'DensityType' );
my @density_types = @{ $density_type_adaptor->fetch_all() }; my $dt = $density_type_adaptor->fetch_by_dbID(12);
Description
DensityTypeAdaptor - Performs database interaction for DensityType objects.
Methods
fetch_allDescriptionCode
fetch_all_by_logic_nameDescriptionCode
fetch_by_dbIDDescriptionCode
newDescriptionCode
storeDescriptionCode
Methods description
fetch_allcode    nextTop
  Arg [1]    : none
Example : my @density_types = @{$density_type_adaptor->fetch_all};
Description: Retrieves every density type in the database.
NOTE: In a multi-species database, this method will
return all the entries, not just the ones associated with
the current species.
Returntype : reference to list of Bio::EnsEMBL::DensityType objects
Exceptions : none
Caller : general, new
Status : Stable
fetch_all_by_logic_namecodeprevnextTop
  Arg [1]    : string $logic_name
Example : my @dts = @{$dtype_adaptor->fetch_all('repeat_coverage')};
Description: Retrieves all density types with a given logic name.
NOTE: In a multi-species database, this method will
return all the entries matching the search criteria, not
just the ones associated with the current species.
Returntype : reference to list of Bio::EnsEMBL::DensityTypes
Exceptions : thrown if logic_name argument is not provided
Caller : general
Status : Stable
fetch_by_dbIDcodeprevnextTop
  Arg [1]    : int $dbID
Example : my $dt = $density_type_adaptor->fetch_by_dbID($dbID);
Description: Retrieves a density type object via its internal identifier
Returntype : Bio::EnsEMBL::DensityType
Exceptions : throw if dbID argument not defined
Caller : general
Status : Stable
newcodeprevnextTop
  Arg [1]    : see superclass (Bio::EnsEMBL::DBSQL::BaseAdaptor) arguments
Example : #use this instead of the constructor directly:
my $dta = $db_adaptor->get_DensityTypeAdaptor();
Description: Constructor. Creates a new DensityTypeAdaptor
Returntype : Bio::EnsEMBL::DBSQL::DensityTypeAdaptor
Exceptions : none
Caller : DBAdaptor
Status : Stable
storecodeprevnextTop
  Arg [1]    : list of Bio::EnsEMBL::DensityType @dt
the density types to store in the database
Example : $density_type->store(@density_types);
Description: Stores a list of density type objects in the database
Returntype : none
Exceptions : thrown if @dt is not defined
or if any elements of @dt are not Bio::EnsEMBL::DensityType
Caller : general
Status : Stable
Methods code
fetch_alldescriptionprevnextTop
sub fetch_all {
  my $self = shift;

  my @out;

  my $sth = $self->prepare("SELECT density_type_id, analysis_id, block_size,".
                           "       value_type, region_features " .
                           "FROM density_type");

  $sth->execute();

  my($dbID, $analysis_id, $blk_size, $vtype, $region_features );
  $sth->bind_columns(\$dbID,\$ analysis_id,\$ blk_size,\$ vtype,\$ region_features );

  my $analysis_adaptor = $self->db->get_AnalysisAdaptor();

  while($sth->fetch()) {
    my $analysis = $analysis_adaptor->fetch_by_dbID($analysis_id);


    my $dt = Bio::EnsEMBL::DensityType->new(-ADAPTOR => $self,
                                            -DBID    => $dbID,
                                            -ANALYSIS => $analysis,
                                            -BLOCK_SIZE => $blk_size,
					    -REGION_FEATURES => $region_features,
                                            -VALUE_TYPE => $vtype);

    $self->{'dbID_cache'}->{$dbID} = $dt;

    push @out, $dt;
  }

  return\@ out;
}
fetch_all_by_logic_namedescriptionprevnextTop
sub fetch_all_by_logic_name {
  my $self = shift;
  my $logic_name = shift;

  if(!defined($logic_name)) {
    throw("logic_name argument is required.");
  }

  my $analysis_adaptor = $self->db()->get_AnalysisAdaptor();
  my $analysis = $analysis_adaptor->fetch_by_logic_name($logic_name);

  return [] if(!$analysis);

  my $sth = $self->prepare("SELECT density_type_id, block_size,".
                           "       value_type, region_features " .
                           "FROM density_type " .
                           "WHERE analysis_id = ?");
  $sth->bind_param(1,$analysis->dbID,SQL_INTEGER);
  $sth->execute();

  my($dbID, $blk_size, $vtype, $region_features );
  $sth->bind_columns(\$dbID,\$ blk_size,\$ vtype,\$ region_features);

  my @out;

  while($sth->fetch()) {

    my $dt = Bio::EnsEMBL::DensityType->new(-ADAPTOR => $self,
                                            -DBID    => $dbID,
                                            -ANALYSIS => $analysis,
                                            -BLOCK_SIZE => $blk_size,
					    -REGION_FEATURES => $region_features,
                                            -VALUE_TYPE => $vtype);

    $self->{'dbID_cache'}->{$dbID} = $dt;

    push @out, $dt;
  }

  return\@ out;
}
fetch_by_dbIDdescriptionprevnextTop
sub fetch_by_dbID {
  my $self = shift;
  my $dbID = shift;

  if(!defined($dbID)) {
    throw("dbID argument must be defined");
  }

  if($self->{'dbID_cache'}->{$dbID}) {
    return $self->{'dbID_cache'}->{$dbID};
  }

  # go back to database and refill caches
$self->fetch_all(); return $self->{'dbID_cache'}->{$dbID};
}
newdescriptionprevnextTop
sub new {
  my $class = shift;

  my $self = $class->SUPER::new(@_);

  $self->{'dbID_cache'} = {};

  return $self;
}
storedescriptionprevnextTop
sub store {
  my ($self,@dt) = @_;

  if( scalar(@dt) == 0 ) {
    throw("Must call store with list of Density Types");
  }

  my $sth = $self->prepare
    ("INSERT IGNORE INTO density_type (analysis_id,".
                                  "block_size, value_type, region_features ) ". 
    "VALUES (?, ?, ?, ?)");

  my $db = $self->db();
  my $analysis_adaptor = $db->get_AnalysisAdaptor();

 FEATURE: foreach my $dt ( @dt ) {
    if( !ref $dt || !$dt->isa("Bio::EnsEMBL::DensityType") ) {
      throw("Density Type must be an Ensembl DensityType, " .
            "not a [".ref($dt)."]");
    }

    if($dt->is_stored($db)) {
      next FEATURE;
    }

    if(!defined($dt->analysis())) {
      throw("An analysis must be attached to the density type to be stored.");
    }

    #store the analysis if it has not been stored yet
if(!$dt->analysis->is_stored($db)) { $analysis_adaptor->store($dt->analysis()); } my $block_size = $dt->block_size(); $block_size |= 0; my $region_features = $dt->region_features(); $region_features |= 0; $sth->bind_param(1,$dt->analysis->dbID,SQL_INTEGER); $sth->bind_param(2,$block_size,SQL_INTEGER); $sth->bind_param(3,$dt->value_type,SQL_VARCHAR); $sth->bind_param(4,$region_features, SQL_VARCHAR); my $inserted = $sth->execute(); my $dbID; # $inserted can be 0E0 which is true but equal to 0
if(!$inserted || $inserted == 0) { # insert failed, presumably because was already stored in database
my @dts=@{$self->fetch_all_by_logic_name($dt->analysis()->logic_name())}; my ($stored_dt) = grep {$_->block_size() == $dt->block_size()} @dts; if(!$stored_dt) { throw("Could not retrieve or store DensityType from database.\n" . "Incorrect db permissions or missing density_type table?\n"); } $dbID = $stored_dt->dbID(); } else { $dbID = $sth->{'mysql_insertid'}; } # next two lines are to set the density type as stored
$dt->dbID($dbID); $dt->adaptor($self); $self->{'dbID_cache'}->{$dbID} = $dt; } } 1;
}
General documentation
LICENSETop
  Copyright (c) 1999-2009 The European Bioinformatics Institute and
Genome Research Limited. All rights reserved.
This software is distributed under a modified Apache license. For license details, please see /info/about/code_licence.html
CONTACTTop
  Please email comments or questions to the public Ensembl
developers list at <ensembl-dev@ebi.ac.uk>.
Questions may also be sent to the Ensembl help desk at <helpdesk@ensembl.org>.