diff variant_effect_predictor/Bio/EnsEMBL/DBSQL/DBAdaptor.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/EnsEMBL/DBSQL/DBAdaptor.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,1065 @@
+=head1 LICENSE
+
+  Copyright (c) 1999-2012 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
+
+    http://www.ensembl.org/info/about/code_licence.html
+
+=head1 CONTACT
+
+  Please email comments or questions to the public Ensembl
+  developers list at <dev@ensembl.org>.
+
+  Questions may also be sent to the Ensembl help desk at
+  <helpdesk@ensembl.org>.
+
+=cut
+
+=head1 NAME
+
+Bio::EnsEMBL::DBSQL::DBAdaptor
+
+=head1 SYNOPSIS
+
+  $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
+    -user   => 'root',
+    -dbname => 'pog',
+    -host   => 'caldy',
+    -driver => 'mysql'
+  );
+
+  $gene_adaptor = $db->get_GeneAdaptor();
+
+  $gene = $gene_adaptor->fetch_by_stable_id($stable_id);
+
+  $slice =
+    $db->get_SliceAdaptor()->fetch_by_chr_start_end( 'X', 1, 10000 );
+
+=head1 DESCRIPTION
+
+Formerly this class provided database connectivity and a means
+to retrieve object adaptors.  This class is now provided for
+convenience and backwards compatibility, and delegates its connection
+responsibilities to the DBConnection class (no longer inherited from)
+and its object adaptor retrieval to the static Bio::EnsEMBL::Registry.
+
+Please use Bio::EnsEMBL::Registry to retrieve object adaptors.
+
+=head1 METHODS
+
+=cut
+
+package Bio::EnsEMBL::DBSQL::DBAdaptor;
+
+use strict;
+
+use Bio::EnsEMBL::DBSQL::DBConnection;
+use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
+use Bio::EnsEMBL::Utils::SeqRegionCache;
+use Bio::EnsEMBL::Utils::Exception qw(throw warning deprecate);
+use Bio::EnsEMBL::Utils::Argument qw(rearrange);
+use Bio::EnsEMBL::Registry;
+use Bio::EnsEMBL::Utils::ConfigRegistry;
+
+my $reg = "Bio::EnsEMBL::Registry";
+
+=head2 new
+
+  Arg [-DNADB]: (optional) Bio::EnsEMBL::DBSQL::DBAdaptor DNADB 
+               All sequence, assembly, contig information etc, will
+               be retrieved from this database instead.
+
+  Arg [-NO_CACHE]: (optional) int 1
+               This option will turn off caching for slice features,
+               so, every time a set of features is retrieved,
+               they will come from the database instead of the
+               cache.  This option is only recommended for advanced
+               users, specially if you need to store and retrieve
+               features.  It might reduce performance when querying
+               the database if not used properly.  If in doubt, do
+               not use it or ask in the developer mailing list.
+
+  Arg [..]   : Other args are passed to superclass
+               Bio::EnsEMBL::DBSQL::DBConnection
+
+  Example    : $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
+                -user   => 'root',
+                -dbname => 'pog',
+                -host   => 'caldy',
+                -driver => 'mysql'
+              );
+
+              $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
+                -species => 'Homo_sapiens',
+                -group   => 'core',
+                -user    => 'root',
+                -dbname  => 'pog',
+                -host    => 'caldy',
+                -driver  => 'mysql'
+              );
+
+              $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
+                -species         => 'staphylococcus_aureus',
+                -group           => 'core',
+                -user            => 'root',
+                -dbname          => 'staphylococcus_collection_1_52_1a',
+                -multispecies_db => 1,
+                -host            => 'caldy',
+                -driver          => 'mysql'
+              );
+
+  Description: Constructor for DBAdaptor.
+  Returntype : Bio::EnsEMBL::DBSQL::DBAdaptor
+  Exceptions : none
+  Caller     : general
+  Status     : Stable
+
+=cut
+
+sub new {
+  my ( $class, @args ) = @_;
+
+  my $self = bless {}, $class;
+
+  my ( $is_multispecies, $species, $species_id, $group, $con, $dnadb,
+    $no_cache, $dbname )
+    = rearrange( [
+      'MULTISPECIES_DB', 'SPECIES', 'SPECIES_ID', 'GROUP',
+      'DBCONN',          'DNADB',   'NO_CACHE',   'DBNAME'
+    ],
+    @args
+    );
+
+  if ( defined($con) ) { $self->dbc($con) }
+  else {
+    if(! defined $dbname) {
+      throw "-DBNAME is a required parameter when creating a DBAdaptor";
+    }
+    $self->dbc( new Bio::EnsEMBL::DBSQL::DBConnection(@args) );
+  }
+
+  if ( defined($species) ) { $self->species($species) }
+  if ( defined($group) )   { $self->group($group) }
+
+ 
+  $self = Bio::EnsEMBL::Utils::ConfigRegistry::gen_load($self);
+
+#  if(!defined($species) ){
+#     $reg->find_and_add_aliases($self);
+#  }
+
+  $self->species_id( $species_id || 1 );
+
+  $self->is_multispecies( defined($is_multispecies)
+                          && $is_multispecies == 1 );
+
+  if ( defined($dnadb) )    { $self->dnadb($dnadb) }
+  if ( defined($no_cache) ) { $self->no_cache($no_cache) }
+
+  return $self;
+} ## end sub new
+
+=head2 clear_caches
+
+  Example			: $dba->clear_caches();
+  Description	: Loops through all linked adaptors and clears their 
+                caches if C<clear_cache()> is implemented. Not all caches
+                are cleared & the DBAdaptor instance should be removed from
+                the registry to clear these remaining essential caches. 
+  Returntype 	: None
+  Exceptions 	: None
+
+=cut
+
+sub clear_caches {
+  my ($self) = @_;
+  my $adaptors = Bio::EnsEMBL::Registry->get_all_adaptors(
+    $self->species(), $self->group());
+  while (my $adaptor = shift @{$adaptors}) {
+    if($adaptor->can('clear_cache')) {
+      $adaptor->clear_cache();
+    }
+  }
+  return;
+}
+
+=head2 dbc
+
+  Arg[1]    : (optional) Bio::EnsEMBL::DBSQL::DBConnection
+
+  Example    : $dbc = $dba->dbc();
+  Description: Getter/Setter for DBConnection.
+  Returntype : Bio::EnsEMBL::DBSQL::DBConnection
+  Exceptions : throws if argument not a Bio::EnsEMBL::DBSQL::DBConnection
+  Caller     : general
+  Status     : Stable
+
+=cut
+
+sub dbc{
+  my $self  = shift;
+  
+  if(@_){
+    my $arg = shift;
+    if(defined($arg)){
+      if(!$arg->isa('Bio::EnsEMBL::DBSQL::DBConnection')){
+	throw("$arg is no a DBConnection\n");
+      }
+    }
+    $self->{_dbc} = $arg;
+  }
+  return $self->{_dbc};
+}
+
+
+
+=head2 add_db_adaptor
+
+  Arg [1]    : string $name
+               the name of the database to attach to this database
+  Arg [2]    : Bio::EnsEMBL::DBSQL::DBConnection
+               the db adaptor to attach to this database
+  Example    : $db->add_db_adaptor('lite', $lite_db_adaptor);
+  Description: Attaches another database instance to this database so 
+               that it can be used in instances where it is required.
+  Returntype : none
+  Exceptions : none
+  Caller     : EnsWeb
+  Status     : At Risk
+             : may get deprecated, please use add_db from the registry instead
+
+=cut
+
+sub add_db_adaptor {
+  my ($self, $name, $adaptor) = @_;
+
+  unless($name && $adaptor && ref $adaptor) {
+    throw('adaptor and name arguments are required');
+  }
+
+  Bio::EnsEMBL::Registry->add_db($self, $name, $adaptor);
+
+}
+
+
+=head2 remove_db_adaptor
+
+  Arg [1]    : string $name
+               the name of the database to detach from this database.
+  Example    : $lite_db = $db->remove_db_adaptor('lite');
+  Description: Detaches a database instance from this database and returns
+               it.
+  Returntype : none
+  Exceptions : none
+  Caller     : ?
+  Status     : At Risk
+             : mey get deprecated, use remove_db instead from the Registry
+
+=cut
+
+sub remove_db_adaptor {
+  my ($self, $name) = @_;
+
+  return Bio::EnsEMBL::Registry->remove_db($self, $name);
+}
+
+
+=head2 get_all_db_adaptors
+
+  Arg [1]    : none
+  Example    : @attached_dbs = values %{$db->get_all_db_adaptors()};
+  Description: returns all of the attached databases as 
+               a hash reference of key/value pairs where the keys are
+               database names and the values are the attached databases  
+  Returntype : hash reference with Bio::EnsEMBL::DBSQL::DBConnection values
+  Exceptions : none
+  Caller     : Bio::EnsEMBL::DBSQL::ProxyAdaptor
+  Status     : At Risk
+             : may get deprecated soon
+             : please use  Bio::EnsEMBL::Registry->get_all_db_adaptors
+
+=cut
+
+sub get_all_db_adaptors {
+  my ($self) = @_;
+  return Bio::EnsEMBL::Registry->get_all_db_adaptors($self);
+}
+
+
+
+=head2 get_db_adaptor
+
+  Arg [1]    : string $name
+               the name of the attached database to retrieve
+  Example    : $lite_db = $db->get_db_adaptor('lite');
+  Description: returns an attached db adaptor of name $name or undef if
+               no such attached database exists
+  Returntype : Bio::EnsEMBL::DBSQL::DBConnection
+  Exceptions : none
+  Caller     : ?
+  Status     : At Risk
+             : may get deprecated soon
+             : please use  Bio::EnsEMBL::Registry->get_db_adaptors
+
+=cut
+
+sub get_db_adaptor {
+  my ($self, $name) = @_;
+
+  return Bio::EnsEMBL::Registry->get_db($self, $name);
+}
+
+=head2 get_available_adaptors
+
+  Example    : my %pairs = %{$dba->get_available_adaptors()};
+  Description: gets a hash of the available adaptors
+  ReturnType : reference to a hash
+  Exceptions : none
+  Caller     : Bio::EnsEMBL::Utils::ConfigRegistry
+  Status     : Stable
+
+=cut 
+
+sub get_available_adaptors {
+  my %pairs = (
+    # Firstly those that just have an adaptor named after there object
+    # in the main DBSQL directory.
+    map( { $_ => "Bio::EnsEMBL::DBSQL::${_}Adaptor" } qw(
+        Analysis                 ArchiveStableId      Attribute
+        AssemblyExceptionFeature AssemblyMapper       CoordSystem
+        CompressedSequence       DBEntry              DnaAlignFeature
+        DensityFeature           DensityType          Exon
+        Gene                     KaryotypeBand        MiscSet
+        MiscFeature              PredictionTranscript PredictionExon
+        ProteinFeature           ProteinAlignFeature  RepeatConsensus
+        RepeatFeature            Sequence             SeqRegionSynonym  SimpleFeature
+        Slice                    SupportingFeature    Transcript
+        TranscriptSupportingFeature Translation       UnmappedObject
+        UnconventionalTranscriptAssociation           AssemblySlice
+        SplicingEvent            SplicingEventFeature SplicingTranscriptPair
+        Operon 			 OperonTranscript
+        DataFile                 Assembly
+        IntronSupportingEvidence
+        ) ),
+    # Those whose adaptors are in Map::DBSQL
+    map( { $_ => "Bio::EnsEMBL::Map::DBSQL::${_}Adaptor" } qw(
+        Marker MarkerFeature QtlFeature Qtl Ditag DitagFeature
+        ) ),
+    # Finally the exceptions... those that have non-standard mapping
+    # between object / adaptor ....
+    # 'Blast'                => 'Bio::EnsEMBL::External::BlastAdaptor',
+    'MetaCoordContainer' => 'Bio::EnsEMBL::DBSQL::MetaCoordContainer',
+    'MetaContainer'      => 'Bio::EnsEMBL::DBSQL::MetaContainer',
+    'SNP'                => 'Bio::EnsEMBL::DBSQL::ProxySNPAdaptor',
+  );
+
+  return ( \%pairs );
+} ## end sub get_available_adaptors
+
+###########################################################
+#
+# Support for DAS
+#
+###########################################################
+
+=head2 add_DASFeatureFactory
+
+  Arg [1]    : Bio::EnsEMBL::ExternalFeatureFactory $value 
+  Example    : none
+  Description: Attaches a DAS Feature Factory to this method.  
+               ExternalFeatureFactory objects are not really used right now.
+               They may be reintroduced or taken out completely.  The fate
+               of this function is unknown (although it is presently needed).
+  Returntype : none
+  Exceptions : none
+  Caller     : EnsWeb
+  Status     : At Risk
+             : with the new web code this may not be needed/supported
+
+=cut
+
+sub add_DASFeatureFactory{
+ 
+ my ($self,$value) = @_;
+  
+  push(@{$self->{'_das_ff'}},$value);
+}
+
+
+sub remove_all_DASFeatureFactories {
+  $_[0]->{'_das_ff'} = [];
+}
+=head2 _each_DASFeatureFactory
+
+  Args       : none
+  Example    : none
+  Description: Not sure if this is used, or if it should be removed.  It 
+               does not seem to be used at the moment
+  Returntype : Bio::EnsEMBL::ExternalFeatureFactory
+  Exceptions : none
+  Caller     : ??
+  Status     : At Risk
+             : with the new web code this may not be needed/supported
+
+=cut
+
+sub _each_DASFeatureFactory{
+   my ($self) = @_;
+
+   return @{$self->{'_das_ff'}||[]}
+}
+
+
+################################################################## 
+# 
+# SUPPORT FOR EXTERNAL FEATURE FACTORIES 
+# 
+##################################################################
+
+
+
+=head2 add_ExternalFeatureAdaptor
+
+  Arg [1]    : Bio::EnsEMBL::External::ExternalFeatureAdaptor
+  Example    : $db_adaptor->add_ExternalFeatureAdaptor($xfa);
+  Description: Adds an external feature adaptor to this database adaptor.
+               Adding the external adaptor in this way allows external
+               features to be obtained from Slices and from RawContigs.
+
+               The external feature adaptor which is passed to this method
+               will have its db attribuite set to this DBAdaptor object via 
+               the db accessor method. 
+
+               ExternalFeatureAdaptors passed to this method are stored 
+               internally in a hash keyed on the string returned by the 
+               ExternalFeatureAdaptors track_name method.
+               
+               If the track name method is not implemented then the 
+               a default key named 'External features' is assigned.  In the
+               event of duplicate key names, a number is appended to the
+               key name, and incremented for each subsequent adaptor with the
+               same track name.  For example, if no track_names are specified 
+               then the the external feature adaptors will be stored under the
+               keys 'External features', 'External features2' 
+               'External features3' etc.
+  Returntype : none
+  Exceptions : none
+  Caller     : general
+  
+=cut
+
+sub add_ExternalFeatureAdaptor {
+  my ($self, $adaptor) = @_;
+
+  unless($adaptor && ref $adaptor && 
+	 $adaptor->isa('Bio::EnsEMBL::External::ExternalFeatureAdaptor')) {
+     throw("[$adaptor] is not a " .
+           "Bio::EnsEMBL::External::ExternalFeatureAdaptor");
+  }
+
+  unless(exists $self->{'_xf_adaptors'}) {
+    $self->{'_xf_adaptors'} = {};
+  }
+
+  my $track_name = $adaptor->{'_track_name'};
+  if(!$track_name) {
+    $track_name = $adaptor->track_name();
+  }
+
+  #use a generic track name if one hasn't been defined
+  unless(defined $track_name) {
+    $track_name = "External features";
+  }
+
+  #if the track name exists add numbers to the end until a free name is found
+  if(exists $self->{'_xf_adaptors'}->{"$track_name"}) {
+    my $num = 2;
+    $num++ while(exists $self->{'_xf_adaptors'}->{"$track_name$num"});
+    $self->{'_xf_adaptors'}->{"$track_name$num"} = $adaptor;
+  } else {
+    $self->{'_xf_adaptors'}->{"$track_name"} = $adaptor;
+  }
+
+  $adaptor->ensembl_db($self);
+}
+
+
+
+=head2 get_ExternalFeatureAdaptors
+
+  Arg [1]    : none
+  Example    : @xfas = values %{$db_adaptor->get_ExternalFeatureAdaptors}; 
+  Description: Retrieves all of the ExternalFeatureAdaptors which have been
+               added to this DBAdaptor.  The ExternalFeatureAdaptors are 
+               returned in a reference to a hash keyed on the track names
+               of the external adaptors
+  Returntype : Reference to a hash of ExternalFeatureAdaptors keyed on 
+               their track names.
+  Exceptions : none
+  Caller     : general
+
+=cut
+
+sub get_ExternalFeatureAdaptors {
+  my $self = shift;
+
+  return $self->{'_xf_adaptors'};
+}
+
+
+=head2 add_ExternalFeatureFactory
+
+  Arg [1]    : Bio::EnsEMBL::DB::ExternalFeatureFactoryI $value
+  Example    : $db_adaptor->add_ExternalFeatureFactory
+  Description: It is recommended that add_ExternalFeatureAdaptor be used 
+               instead.  See documentation for 
+               Bio::EnsEMBL::External::ExternalFeatureAdaptor
+
+               Adds an external feature factory to the core database
+               so that features from external sources can be displayed in 
+               ensembl. This method is still available mainly for legacy
+               support for external EnsEMBL installations.
+  Returntype : none
+  Exceptions : none
+  Caller     : external
+
+=cut
+
+sub add_ExternalFeatureFactory{
+   my ($self,$value) = @_;
+
+   $self->add_ExternalFeatureAdaptor($value);
+}
+
+#
+# OVERWRITABLE STANDARD ADAPTORS
+#
+
+=head2 get_adaptor
+
+  Arg [1]    : Canonical data type for which an adaptor is required.
+  Example    : $db_adaptor->get_adaptor("Protein")
+  Description: Gets an adaptor object for a standard data type.
+  Returntype : Adaptor Object of arbitrary type or undef
+  Exceptions : none
+  Caller     : external
+  Status     : Medium Risk
+             : please use the Registry method, as at some time this
+             : may no longer be supprted.
+ 
+=cut
+
+sub get_adaptor {
+  my ($self, $canonical_name, @other_args) = @_;
+
+  return $reg->get_adaptor($self->species(),$self->group(),$canonical_name);
+}
+
+
+
+=head2 set_adaptor
+
+  Arg [1]    : Canonical data type for new adaptor.
+  Arg [2]    : Object defining the adaptor for arg1.
+  Example    : $aa = Bio::EnsEMBL::DBSQL::GeneAdaptor->new($db_adaptor);
+             : $db_adaptor->set_adaptor("Gene", $ga)
+  Description: Stores the object which represents the adaptor for the
+               arg1 data type.
+  Returntype : none
+  Exceptions : none
+  Caller     : external
+  Status     : Medium Risk
+             : please use the Registry method, as at some time this
+             : may no longer be supprted.
+ 
+=cut
+
+sub set_adaptor {
+  my ($self, $canonical_name, $module) = @_;
+
+  $reg->add_adaptor($self->species(),$self->group(),$canonical_name,$module);
+
+  return $module;
+}
+
+
+#
+# GENERIC FEATURE ADAPTORS
+#
+
+=head2 get_GenericFeatureAdaptors
+
+  Arg [1]    : List of names of feature adaptors to get. If no
+               adaptor names are given, all the defined adaptors are returned.
+  Example    : $db->get_GenericFeature("SomeFeature", "SomeOtherFeature")
+  Description: Returns a hash containing the named feature adaptors (or
+               all feature adaptors).
+  Returntype : reference to a Hash containing the named
+               feature adaptors (or all feature adaptors).
+  Exceptions : If any of the the named generic feature adaptors do not exist.
+  Caller     : external
+
+=cut
+
+sub get_GenericFeatureAdaptors {
+
+  my ($self, @names) = @_;
+
+  my %adaptors = ();
+
+  if (!@names) {
+    %adaptors = %{$self->{'generic_feature_adaptors'}};
+  } else {
+    foreach my $name (@names) {
+      if (!exists($self->{'generic_feature_adaptors'}->{$name})) {
+        throw("No generic feature adaptor has been defined for $name" );
+      }
+
+
+      $adaptors{$name} = $self->{'generic_feature_adaptors'}->{$name};
+    }
+  }
+
+  return \%adaptors;
+}
+
+
+=head2 add_GenericFeatureAdaptor
+
+  Arg [1]    : The name of the feature.
+  Arg [2]    : Adaptor object for a generic feature.
+  Example    : $db->add_GenericFeatureAdaptor("SomeFeature",
+                              "Bio::EnsEMBL::DBSQL::SomeFeatureAdaptor")
+  Description: Stores the object which represents the adaptor for the
+               named feature type.
+  Returntype : none
+  Exceptions :
+  Caller     : external
+
+=cut
+
+sub add_GenericFeatureAdaptor {
+  my ($self, $name, $adaptor_obj) = @_;
+	
+  # check that $adaptor is an object that subclasses BaseFeatureAdaptor	
+  if (!$adaptor_obj->isa("Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor")) {
+    throw("$name is a " . ref($adaptor_obj) . "which is not a " .
+          "subclass of Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor" );
+  }
+
+  $self->{'generic_feature_adaptors'}->{$name} = $adaptor_obj;
+}
+
+=head2 species
+
+  Arg [1]    : (optional) string $arg
+               The new value of the species used by this DBAdaptor. 
+  Example    : $species = $dba->species()
+  Description: Getter/Setter for the species of to use for 
+               this connection.  There is currently no point in setting 
+               this value after the connection has already been established 
+               by the constructor.
+  Returntype : string
+  Exceptions : none
+  Caller     : new
+  Status     : Stable
+
+=cut
+
+sub species {
+  my ( $self, $arg ) = @_;
+
+  if ( defined($arg) ) {
+    $self->{_species} = $arg;
+  }
+
+  $self->{_species};
+}
+
+=head2 all_species
+
+  Args       : NONE
+  Example    : @all_species = @{$dba->all_species()};
+  Description: Returns the names of all species contained in the
+               database to which this DBAdaptor is connected.
+  Returntype : array reference
+  Exceptions : none
+  Caller     : general
+  Status     : Stable
+
+=cut
+
+sub all_species {
+  my ($self) = @_;
+
+  if ( !$self->is_multispecies() ) { return [ $self->species() ] }
+
+  if ( exists( $self->{'_all_species'} ) ) {
+    return $self->{'_all_species'};
+  }
+
+  my $statement =
+      "SELECT meta_value "
+    . "FROM meta "
+    . "WHERE meta_key = 'species.db_name'";
+
+  my $sth = $self->dbc()->db_handle()->prepare($statement);
+
+  $sth->execute();
+
+  my $species;
+  $sth->bind_columns( \$species );
+
+  my @all_species;
+  while ( $sth->fetch() ) { push( @all_species, $species ) }
+
+  $self->{'_all_species'} = \@all_species;
+
+  return $self->{'_all_species'};
+} ## end sub all_species
+
+
+=head2 is_multispecies
+
+  Arg [1]    : (optional) boolean $arg
+  Example    : if ($dba->is_multispecies()) { }
+  Description: Getter/Setter for the is_multispecies boolean of
+               to use for this connection.  There is currently no
+               point in setting this value after the connection has
+               already been established by the constructor.
+  Returntype : boolean
+  Exceptions : none
+  Caller     : new
+  Status     : Stable
+
+=cut
+
+sub is_multispecies {
+  my ( $self, $arg ) = @_;
+
+  if ( defined($arg) ) {
+    $self->{_is_multispecies} = $arg;
+  }
+
+  return $self->{_is_multispecies};
+}
+
+
+=head2 species_id
+
+  Arg [1]    : (optional) string $arg
+               The new value of the species_id used by this DBAdaptor
+               when dealing with multi-species databases.
+  Example    : $species_id = $dba->species_id()
+  Description: Getter/Setter for the species_id of to use for this
+               connection.  There is currently no point in setting
+               this value after the connection has already been
+               established by the constructor.
+  Returntype : string
+  Exceptions : none
+  Caller     : new
+  Status     : Stable
+
+=cut
+
+sub species_id {
+  my ( $self, $arg ) = @_;
+
+  if ( defined($arg) ) {
+    $self->{_species_id} = $arg;
+  }
+
+  return $self->{_species_id};
+}
+
+
+=head2 no_cache
+
+  Arg [1]    : (optional) int $arg
+               The new value of the no cache attribute used by this DBAdaptor. 
+  Example    : $no_cache = $dba->no_cache();
+  Description: Getter/Setter for the no_cache to use for 
+               this connection.  There is currently no point in setting 
+               this value after the connection has already been established 
+               by the constructor.
+  Returntype : int
+  Exceptions : none
+  Caller     : new
+  Status     : Stable
+
+=cut
+
+sub no_cache {
+  my ($self, $arg ) = @_;
+
+  if ( defined $arg ){
+      if ($arg != 1 && $arg != 0){
+	  throw("$arg is not allowed for this attribute. Only value 1|0 is allowed");
+      }
+      $self->{_no_cache} = $arg;
+  }
+  $self->{_no_cache};
+}
+
+
+=head2 group
+
+  Arg [1]    : (optional) string $arg
+               The new value of the group used by this DBAdaptor. 
+  Example    : $group = $dba->group()
+  Description: Getter/Setter for the group of to use for 
+               this connection.  There is currently no point in setting 
+               this value after the connection has already been established 
+               by the constructor.
+  Returntype : string
+  Exceptions : none
+  Caller     : new
+  Status     : Stable
+
+=cut
+
+sub group {
+  my ($self, $arg ) = @_;
+  ( defined $arg ) &&
+    ( $self->{_group} = $arg );
+  $self->{_group};
+}
+
+=head2 get_SeqRegionCache
+
+  Arg [1]    : none
+  Example    : my $srcache = $dba->get_SeqRegionCache();
+  Description: Retrieves a seq_region cache for this database
+  Returntype : Bio::EnsEMBL::Utils::SeqRegionCache
+  Exceptions : none
+  Caller     : SliceAdaptor, AssemblyMapperAdaptor
+  Status     : Stable
+
+=cut
+
+sub get_SeqRegionCache {
+  my $self = shift;
+
+  # use the cache from the database where seq_regions are stored
+  if($self != $self->dnadb()) {
+    return $self->dnadb()->get_SeqRegionCache();
+  }
+
+  if(!$self->{'seq_region_cache'}) {
+    $self->{'seq_region_cache'} = Bio::EnsEMBL::Utils::SeqRegionCache->new();
+  }
+
+  return $self->{'seq_region_cache'};
+}
+
+
+
+#convenient method to retrieve the schema_build version for the database being used
+
+sub _get_schema_build{
+  my ($self) = @_;
+
+  #avoided using dnadb by default to avoid obfuscation of behaviour
+  
+  my @dbname = split/_/, $self->dbc->dbname();
+
+  #warn "dbname is $schema_build";
+
+  my $schema_build = pop @dbname;
+  $schema_build = pop(@dbname).'_'.$schema_build;
+
+
+  return $schema_build;
+}
+
+
+=head2 dnadb
+
+ Title   : dnadb
+ Usage   : my $dnadb = $db->dnadb();
+ Function: returns the database adaptor where the dna lives
+           Useful if you only want to keep one copy of the dna
+           on disk but have other databases with genes and features in
+ Returns : dna database adaptor
+ Args    : Bio::EnsEMBL::DBSQL::BaseAdaptor
+ Status  : Medium Risk.
+         : Use the Registry method add_DNAAdaptor/get_DNAAdaptor instead
+
+=cut
+
+sub dnadb {
+  my $self = shift;
+
+  if(@_) {
+    my $arg = shift;
+    $reg->add_DNAAdaptor($self->species(),$self->group(),$arg->species(),$arg->group());
+  }
+
+#  return $self->{'dnadb'} || $self;
+  return $reg->get_DNAAdaptor($self->species(),$self->group()) || $self;
+}
+
+
+use vars '$AUTOLOAD';
+
+sub AUTOLOAD {
+  my ( $self, @args ) = @_;
+
+  my $type;
+  if ( $AUTOLOAD =~ /^.*::get_(\w+)Adaptor$/ ) {
+    $type = $1;
+  } elsif ( $AUTOLOAD =~ /^.*::get_(\w+)$/ ) {
+    $type = $1;
+  } else {
+    throw( sprintf( "Could not work out type for %s\n", $AUTOLOAD ) );
+  }
+  
+  my $ret = $reg->get_adaptor( $self->species(), $self->group(), $type );
+
+  return $ret if $ret;
+  
+  warning( sprintf(
+    "Could not find %s adaptor in the registry for %s %s\n",
+    $type, $self->species(), $self->group() ) );
+
+  throw( sprintf( 
+    "Could not get adaptor %s for %s %s\n",
+    $type, $self->species(), $self->group() ) );
+
+} ## end sub AUTOLOAD
+
+sub DESTROY { }    # required due to AUTOLOAD
+
+
+#########################
+# sub DEPRECATED METHODS
+#########################
+=head2 db
+  
+  Description: DEPRECATED 
+  
+=cut
+
+sub db{
+  my ($self, $arg ) = @_;
+ deprecate("db Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+ return $self->dbc($arg);
+}
+
+
+sub source { deprecate('Do not use - this method does nothing'); }
+
+
+=head2 assembly_type
+
+  Description: DEPRECATED - Use CoordSystemAdaptor to obtain default coordinate
+               system instead.
+
+=cut
+
+sub assembly_type{
+  my $self = shift;
+
+  deprecate('Use CoordSystemAdaptor $csa->fetch_all->[0]->version() instead');
+
+  my $csa = $self->get_CoordSystemAdaptor();
+  my ($cs) = @{$csa->fetch_all()};
+  return ($cs) ? $cs->version() : undef;
+}
+
+
+
+=head2 list_supported_assemblies
+
+  Description: DEPRECATED - Use CoordSystemAdaptor to obtain list of top-level
+               coordinate systems instead
+
+=cut
+
+sub list_supported_assemblies {
+  my($self) = @_;
+  deprecate('Use CoordSystemAdaptor::fetch_all instead');
+
+  my $csa = $self->get_CoordSystemAdaptor();
+  my %versions;
+  foreach my $cs (@{$csa->fetch_all()}) {
+    $versions{$cs->version()} = 1;
+  }
+
+  return keys %versions;
+}
+
+
+sub prepare{
+  my ($self, @args) = @_;
+
+ deprecate("prepare Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->prepare(@args);
+}
+
+sub dbname{
+  my ($self, @args) = @_;
+
+ deprecate("dbname Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->dbname(@args);
+} 
+
+sub disconnect_when_inactive{
+  my ($self, @args) = @_;
+
+ deprecate("disconnect_when_inactive Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->disconnect_when_inactive(@args);
+}
+
+sub reconnect_when_lost{
+  my ($self, @args) = @_;
+
+ deprecate("reconnect_when_lost Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->reconnect_when_lost(@args);
+}
+
+
+sub host{
+  my ($self, @args) = @_;
+
+ deprecate("host Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->host(@args);
+}
+sub username{
+  my ($self, @args) = @_;
+
+ deprecate("username Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->username(@args);
+}
+sub password{
+  my ($self, @args) = @_;
+
+ deprecate("password Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->password(@args);
+}
+sub driver{
+  my ($self, @args) = @_;
+
+ deprecate("driver Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->driver(@args);
+}
+sub port{
+  my ($self, @args) = @_;
+
+ deprecate("port Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->port(@args);
+}
+
+sub db_handle{
+  my ($self, @args) = @_;
+
+
+ deprecate("db_handle Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
+  $self->dbc->db_handle(@args);
+}
+
+
+1;