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

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 =head1 LICENSE
2
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
4 Genome Research Limited. All rights reserved.
5
6 This software is distributed under a modified Apache license.
7 For license details, please see
8
9 http://www.ensembl.org/info/about/code_licence.html
10
11 =head1 CONTACT
12
13 Please email comments or questions to the public Ensembl
14 developers list at <dev@ensembl.org>.
15
16 Questions may also be sent to the Ensembl help desk at
17 <helpdesk@ensembl.org>.
18
19 =cut
20
21 =head1 NAME
22
23 Bio::EnsEMBL::DBSQL::DBAdaptor
24
25 =head1 SYNOPSIS
26
27 $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
28 -user => 'root',
29 -dbname => 'pog',
30 -host => 'caldy',
31 -driver => 'mysql'
32 );
33
34 $gene_adaptor = $db->get_GeneAdaptor();
35
36 $gene = $gene_adaptor->fetch_by_stable_id($stable_id);
37
38 $slice =
39 $db->get_SliceAdaptor()->fetch_by_chr_start_end( 'X', 1, 10000 );
40
41 =head1 DESCRIPTION
42
43 Formerly this class provided database connectivity and a means
44 to retrieve object adaptors. This class is now provided for
45 convenience and backwards compatibility, and delegates its connection
46 responsibilities to the DBConnection class (no longer inherited from)
47 and its object adaptor retrieval to the static Bio::EnsEMBL::Registry.
48
49 Please use Bio::EnsEMBL::Registry to retrieve object adaptors.
50
51 =head1 METHODS
52
53 =cut
54
55 package Bio::EnsEMBL::DBSQL::DBAdaptor;
56
57 use strict;
58
59 use Bio::EnsEMBL::DBSQL::DBConnection;
60 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
61 use Bio::EnsEMBL::Utils::SeqRegionCache;
62 use Bio::EnsEMBL::Utils::Exception qw(throw warning deprecate);
63 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
64 use Bio::EnsEMBL::Registry;
65 use Bio::EnsEMBL::Utils::ConfigRegistry;
66
67 my $reg = "Bio::EnsEMBL::Registry";
68
69 =head2 new
70
71 Arg [-DNADB]: (optional) Bio::EnsEMBL::DBSQL::DBAdaptor DNADB
72 All sequence, assembly, contig information etc, will
73 be retrieved from this database instead.
74
75 Arg [-NO_CACHE]: (optional) int 1
76 This option will turn off caching for slice features,
77 so, every time a set of features is retrieved,
78 they will come from the database instead of the
79 cache. This option is only recommended for advanced
80 users, specially if you need to store and retrieve
81 features. It might reduce performance when querying
82 the database if not used properly. If in doubt, do
83 not use it or ask in the developer mailing list.
84
85 Arg [..] : Other args are passed to superclass
86 Bio::EnsEMBL::DBSQL::DBConnection
87
88 Example : $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
89 -user => 'root',
90 -dbname => 'pog',
91 -host => 'caldy',
92 -driver => 'mysql'
93 );
94
95 $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
96 -species => 'Homo_sapiens',
97 -group => 'core',
98 -user => 'root',
99 -dbname => 'pog',
100 -host => 'caldy',
101 -driver => 'mysql'
102 );
103
104 $db = new Bio::EnsEMBL::DBSQL::DBAdaptor(
105 -species => 'staphylococcus_aureus',
106 -group => 'core',
107 -user => 'root',
108 -dbname => 'staphylococcus_collection_1_52_1a',
109 -multispecies_db => 1,
110 -host => 'caldy',
111 -driver => 'mysql'
112 );
113
114 Description: Constructor for DBAdaptor.
115 Returntype : Bio::EnsEMBL::DBSQL::DBAdaptor
116 Exceptions : none
117 Caller : general
118 Status : Stable
119
120 =cut
121
122 sub new {
123 my ( $class, @args ) = @_;
124
125 my $self = bless {}, $class;
126
127 my ( $is_multispecies, $species, $species_id, $group, $con, $dnadb,
128 $no_cache, $dbname )
129 = rearrange( [
130 'MULTISPECIES_DB', 'SPECIES', 'SPECIES_ID', 'GROUP',
131 'DBCONN', 'DNADB', 'NO_CACHE', 'DBNAME'
132 ],
133 @args
134 );
135
136 if ( defined($con) ) { $self->dbc($con) }
137 else {
138 if(! defined $dbname) {
139 throw "-DBNAME is a required parameter when creating a DBAdaptor";
140 }
141 $self->dbc( new Bio::EnsEMBL::DBSQL::DBConnection(@args) );
142 }
143
144 if ( defined($species) ) { $self->species($species) }
145 if ( defined($group) ) { $self->group($group) }
146
147
148 $self = Bio::EnsEMBL::Utils::ConfigRegistry::gen_load($self);
149
150 # if(!defined($species) ){
151 # $reg->find_and_add_aliases($self);
152 # }
153
154 $self->species_id( $species_id || 1 );
155
156 $self->is_multispecies( defined($is_multispecies)
157 && $is_multispecies == 1 );
158
159 if ( defined($dnadb) ) { $self->dnadb($dnadb) }
160 if ( defined($no_cache) ) { $self->no_cache($no_cache) }
161
162 return $self;
163 } ## end sub new
164
165 =head2 clear_caches
166
167 Example : $dba->clear_caches();
168 Description : Loops through all linked adaptors and clears their
169 caches if C<clear_cache()> is implemented. Not all caches
170 are cleared & the DBAdaptor instance should be removed from
171 the registry to clear these remaining essential caches.
172 Returntype : None
173 Exceptions : None
174
175 =cut
176
177 sub clear_caches {
178 my ($self) = @_;
179 my $adaptors = Bio::EnsEMBL::Registry->get_all_adaptors(
180 $self->species(), $self->group());
181 while (my $adaptor = shift @{$adaptors}) {
182 if($adaptor->can('clear_cache')) {
183 $adaptor->clear_cache();
184 }
185 }
186 return;
187 }
188
189 =head2 dbc
190
191 Arg[1] : (optional) Bio::EnsEMBL::DBSQL::DBConnection
192
193 Example : $dbc = $dba->dbc();
194 Description: Getter/Setter for DBConnection.
195 Returntype : Bio::EnsEMBL::DBSQL::DBConnection
196 Exceptions : throws if argument not a Bio::EnsEMBL::DBSQL::DBConnection
197 Caller : general
198 Status : Stable
199
200 =cut
201
202 sub dbc{
203 my $self = shift;
204
205 if(@_){
206 my $arg = shift;
207 if(defined($arg)){
208 if(!$arg->isa('Bio::EnsEMBL::DBSQL::DBConnection')){
209 throw("$arg is no a DBConnection\n");
210 }
211 }
212 $self->{_dbc} = $arg;
213 }
214 return $self->{_dbc};
215 }
216
217
218
219 =head2 add_db_adaptor
220
221 Arg [1] : string $name
222 the name of the database to attach to this database
223 Arg [2] : Bio::EnsEMBL::DBSQL::DBConnection
224 the db adaptor to attach to this database
225 Example : $db->add_db_adaptor('lite', $lite_db_adaptor);
226 Description: Attaches another database instance to this database so
227 that it can be used in instances where it is required.
228 Returntype : none
229 Exceptions : none
230 Caller : EnsWeb
231 Status : At Risk
232 : may get deprecated, please use add_db from the registry instead
233
234 =cut
235
236 sub add_db_adaptor {
237 my ($self, $name, $adaptor) = @_;
238
239 unless($name && $adaptor && ref $adaptor) {
240 throw('adaptor and name arguments are required');
241 }
242
243 Bio::EnsEMBL::Registry->add_db($self, $name, $adaptor);
244
245 }
246
247
248 =head2 remove_db_adaptor
249
250 Arg [1] : string $name
251 the name of the database to detach from this database.
252 Example : $lite_db = $db->remove_db_adaptor('lite');
253 Description: Detaches a database instance from this database and returns
254 it.
255 Returntype : none
256 Exceptions : none
257 Caller : ?
258 Status : At Risk
259 : mey get deprecated, use remove_db instead from the Registry
260
261 =cut
262
263 sub remove_db_adaptor {
264 my ($self, $name) = @_;
265
266 return Bio::EnsEMBL::Registry->remove_db($self, $name);
267 }
268
269
270 =head2 get_all_db_adaptors
271
272 Arg [1] : none
273 Example : @attached_dbs = values %{$db->get_all_db_adaptors()};
274 Description: returns all of the attached databases as
275 a hash reference of key/value pairs where the keys are
276 database names and the values are the attached databases
277 Returntype : hash reference with Bio::EnsEMBL::DBSQL::DBConnection values
278 Exceptions : none
279 Caller : Bio::EnsEMBL::DBSQL::ProxyAdaptor
280 Status : At Risk
281 : may get deprecated soon
282 : please use Bio::EnsEMBL::Registry->get_all_db_adaptors
283
284 =cut
285
286 sub get_all_db_adaptors {
287 my ($self) = @_;
288 return Bio::EnsEMBL::Registry->get_all_db_adaptors($self);
289 }
290
291
292
293 =head2 get_db_adaptor
294
295 Arg [1] : string $name
296 the name of the attached database to retrieve
297 Example : $lite_db = $db->get_db_adaptor('lite');
298 Description: returns an attached db adaptor of name $name or undef if
299 no such attached database exists
300 Returntype : Bio::EnsEMBL::DBSQL::DBConnection
301 Exceptions : none
302 Caller : ?
303 Status : At Risk
304 : may get deprecated soon
305 : please use Bio::EnsEMBL::Registry->get_db_adaptors
306
307 =cut
308
309 sub get_db_adaptor {
310 my ($self, $name) = @_;
311
312 return Bio::EnsEMBL::Registry->get_db($self, $name);
313 }
314
315 =head2 get_available_adaptors
316
317 Example : my %pairs = %{$dba->get_available_adaptors()};
318 Description: gets a hash of the available adaptors
319 ReturnType : reference to a hash
320 Exceptions : none
321 Caller : Bio::EnsEMBL::Utils::ConfigRegistry
322 Status : Stable
323
324 =cut
325
326 sub get_available_adaptors {
327 my %pairs = (
328 # Firstly those that just have an adaptor named after there object
329 # in the main DBSQL directory.
330 map( { $_ => "Bio::EnsEMBL::DBSQL::${_}Adaptor" } qw(
331 Analysis ArchiveStableId Attribute
332 AssemblyExceptionFeature AssemblyMapper CoordSystem
333 CompressedSequence DBEntry DnaAlignFeature
334 DensityFeature DensityType Exon
335 Gene KaryotypeBand MiscSet
336 MiscFeature PredictionTranscript PredictionExon
337 ProteinFeature ProteinAlignFeature RepeatConsensus
338 RepeatFeature Sequence SeqRegionSynonym SimpleFeature
339 Slice SupportingFeature Transcript
340 TranscriptSupportingFeature Translation UnmappedObject
341 UnconventionalTranscriptAssociation AssemblySlice
342 SplicingEvent SplicingEventFeature SplicingTranscriptPair
343 Operon OperonTranscript
344 DataFile Assembly
345 IntronSupportingEvidence
346 ) ),
347 # Those whose adaptors are in Map::DBSQL
348 map( { $_ => "Bio::EnsEMBL::Map::DBSQL::${_}Adaptor" } qw(
349 Marker MarkerFeature QtlFeature Qtl Ditag DitagFeature
350 ) ),
351 # Finally the exceptions... those that have non-standard mapping
352 # between object / adaptor ....
353 # 'Blast' => 'Bio::EnsEMBL::External::BlastAdaptor',
354 'MetaCoordContainer' => 'Bio::EnsEMBL::DBSQL::MetaCoordContainer',
355 'MetaContainer' => 'Bio::EnsEMBL::DBSQL::MetaContainer',
356 'SNP' => 'Bio::EnsEMBL::DBSQL::ProxySNPAdaptor',
357 );
358
359 return ( \%pairs );
360 } ## end sub get_available_adaptors
361
362 ###########################################################
363 #
364 # Support for DAS
365 #
366 ###########################################################
367
368 =head2 add_DASFeatureFactory
369
370 Arg [1] : Bio::EnsEMBL::ExternalFeatureFactory $value
371 Example : none
372 Description: Attaches a DAS Feature Factory to this method.
373 ExternalFeatureFactory objects are not really used right now.
374 They may be reintroduced or taken out completely. The fate
375 of this function is unknown (although it is presently needed).
376 Returntype : none
377 Exceptions : none
378 Caller : EnsWeb
379 Status : At Risk
380 : with the new web code this may not be needed/supported
381
382 =cut
383
384 sub add_DASFeatureFactory{
385
386 my ($self,$value) = @_;
387
388 push(@{$self->{'_das_ff'}},$value);
389 }
390
391
392 sub remove_all_DASFeatureFactories {
393 $_[0]->{'_das_ff'} = [];
394 }
395 =head2 _each_DASFeatureFactory
396
397 Args : none
398 Example : none
399 Description: Not sure if this is used, or if it should be removed. It
400 does not seem to be used at the moment
401 Returntype : Bio::EnsEMBL::ExternalFeatureFactory
402 Exceptions : none
403 Caller : ??
404 Status : At Risk
405 : with the new web code this may not be needed/supported
406
407 =cut
408
409 sub _each_DASFeatureFactory{
410 my ($self) = @_;
411
412 return @{$self->{'_das_ff'}||[]}
413 }
414
415
416 ##################################################################
417 #
418 # SUPPORT FOR EXTERNAL FEATURE FACTORIES
419 #
420 ##################################################################
421
422
423
424 =head2 add_ExternalFeatureAdaptor
425
426 Arg [1] : Bio::EnsEMBL::External::ExternalFeatureAdaptor
427 Example : $db_adaptor->add_ExternalFeatureAdaptor($xfa);
428 Description: Adds an external feature adaptor to this database adaptor.
429 Adding the external adaptor in this way allows external
430 features to be obtained from Slices and from RawContigs.
431
432 The external feature adaptor which is passed to this method
433 will have its db attribuite set to this DBAdaptor object via
434 the db accessor method.
435
436 ExternalFeatureAdaptors passed to this method are stored
437 internally in a hash keyed on the string returned by the
438 ExternalFeatureAdaptors track_name method.
439
440 If the track name method is not implemented then the
441 a default key named 'External features' is assigned. In the
442 event of duplicate key names, a number is appended to the
443 key name, and incremented for each subsequent adaptor with the
444 same track name. For example, if no track_names are specified
445 then the the external feature adaptors will be stored under the
446 keys 'External features', 'External features2'
447 'External features3' etc.
448 Returntype : none
449 Exceptions : none
450 Caller : general
451
452 =cut
453
454 sub add_ExternalFeatureAdaptor {
455 my ($self, $adaptor) = @_;
456
457 unless($adaptor && ref $adaptor &&
458 $adaptor->isa('Bio::EnsEMBL::External::ExternalFeatureAdaptor')) {
459 throw("[$adaptor] is not a " .
460 "Bio::EnsEMBL::External::ExternalFeatureAdaptor");
461 }
462
463 unless(exists $self->{'_xf_adaptors'}) {
464 $self->{'_xf_adaptors'} = {};
465 }
466
467 my $track_name = $adaptor->{'_track_name'};
468 if(!$track_name) {
469 $track_name = $adaptor->track_name();
470 }
471
472 #use a generic track name if one hasn't been defined
473 unless(defined $track_name) {
474 $track_name = "External features";
475 }
476
477 #if the track name exists add numbers to the end until a free name is found
478 if(exists $self->{'_xf_adaptors'}->{"$track_name"}) {
479 my $num = 2;
480 $num++ while(exists $self->{'_xf_adaptors'}->{"$track_name$num"});
481 $self->{'_xf_adaptors'}->{"$track_name$num"} = $adaptor;
482 } else {
483 $self->{'_xf_adaptors'}->{"$track_name"} = $adaptor;
484 }
485
486 $adaptor->ensembl_db($self);
487 }
488
489
490
491 =head2 get_ExternalFeatureAdaptors
492
493 Arg [1] : none
494 Example : @xfas = values %{$db_adaptor->get_ExternalFeatureAdaptors};
495 Description: Retrieves all of the ExternalFeatureAdaptors which have been
496 added to this DBAdaptor. The ExternalFeatureAdaptors are
497 returned in a reference to a hash keyed on the track names
498 of the external adaptors
499 Returntype : Reference to a hash of ExternalFeatureAdaptors keyed on
500 their track names.
501 Exceptions : none
502 Caller : general
503
504 =cut
505
506 sub get_ExternalFeatureAdaptors {
507 my $self = shift;
508
509 return $self->{'_xf_adaptors'};
510 }
511
512
513 =head2 add_ExternalFeatureFactory
514
515 Arg [1] : Bio::EnsEMBL::DB::ExternalFeatureFactoryI $value
516 Example : $db_adaptor->add_ExternalFeatureFactory
517 Description: It is recommended that add_ExternalFeatureAdaptor be used
518 instead. See documentation for
519 Bio::EnsEMBL::External::ExternalFeatureAdaptor
520
521 Adds an external feature factory to the core database
522 so that features from external sources can be displayed in
523 ensembl. This method is still available mainly for legacy
524 support for external EnsEMBL installations.
525 Returntype : none
526 Exceptions : none
527 Caller : external
528
529 =cut
530
531 sub add_ExternalFeatureFactory{
532 my ($self,$value) = @_;
533
534 $self->add_ExternalFeatureAdaptor($value);
535 }
536
537 #
538 # OVERWRITABLE STANDARD ADAPTORS
539 #
540
541 =head2 get_adaptor
542
543 Arg [1] : Canonical data type for which an adaptor is required.
544 Example : $db_adaptor->get_adaptor("Protein")
545 Description: Gets an adaptor object for a standard data type.
546 Returntype : Adaptor Object of arbitrary type or undef
547 Exceptions : none
548 Caller : external
549 Status : Medium Risk
550 : please use the Registry method, as at some time this
551 : may no longer be supprted.
552
553 =cut
554
555 sub get_adaptor {
556 my ($self, $canonical_name, @other_args) = @_;
557
558 return $reg->get_adaptor($self->species(),$self->group(),$canonical_name);
559 }
560
561
562
563 =head2 set_adaptor
564
565 Arg [1] : Canonical data type for new adaptor.
566 Arg [2] : Object defining the adaptor for arg1.
567 Example : $aa = Bio::EnsEMBL::DBSQL::GeneAdaptor->new($db_adaptor);
568 : $db_adaptor->set_adaptor("Gene", $ga)
569 Description: Stores the object which represents the adaptor for the
570 arg1 data type.
571 Returntype : none
572 Exceptions : none
573 Caller : external
574 Status : Medium Risk
575 : please use the Registry method, as at some time this
576 : may no longer be supprted.
577
578 =cut
579
580 sub set_adaptor {
581 my ($self, $canonical_name, $module) = @_;
582
583 $reg->add_adaptor($self->species(),$self->group(),$canonical_name,$module);
584
585 return $module;
586 }
587
588
589 #
590 # GENERIC FEATURE ADAPTORS
591 #
592
593 =head2 get_GenericFeatureAdaptors
594
595 Arg [1] : List of names of feature adaptors to get. If no
596 adaptor names are given, all the defined adaptors are returned.
597 Example : $db->get_GenericFeature("SomeFeature", "SomeOtherFeature")
598 Description: Returns a hash containing the named feature adaptors (or
599 all feature adaptors).
600 Returntype : reference to a Hash containing the named
601 feature adaptors (or all feature adaptors).
602 Exceptions : If any of the the named generic feature adaptors do not exist.
603 Caller : external
604
605 =cut
606
607 sub get_GenericFeatureAdaptors {
608
609 my ($self, @names) = @_;
610
611 my %adaptors = ();
612
613 if (!@names) {
614 %adaptors = %{$self->{'generic_feature_adaptors'}};
615 } else {
616 foreach my $name (@names) {
617 if (!exists($self->{'generic_feature_adaptors'}->{$name})) {
618 throw("No generic feature adaptor has been defined for $name" );
619 }
620
621
622 $adaptors{$name} = $self->{'generic_feature_adaptors'}->{$name};
623 }
624 }
625
626 return \%adaptors;
627 }
628
629
630 =head2 add_GenericFeatureAdaptor
631
632 Arg [1] : The name of the feature.
633 Arg [2] : Adaptor object for a generic feature.
634 Example : $db->add_GenericFeatureAdaptor("SomeFeature",
635 "Bio::EnsEMBL::DBSQL::SomeFeatureAdaptor")
636 Description: Stores the object which represents the adaptor for the
637 named feature type.
638 Returntype : none
639 Exceptions :
640 Caller : external
641
642 =cut
643
644 sub add_GenericFeatureAdaptor {
645 my ($self, $name, $adaptor_obj) = @_;
646
647 # check that $adaptor is an object that subclasses BaseFeatureAdaptor
648 if (!$adaptor_obj->isa("Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor")) {
649 throw("$name is a " . ref($adaptor_obj) . "which is not a " .
650 "subclass of Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor" );
651 }
652
653 $self->{'generic_feature_adaptors'}->{$name} = $adaptor_obj;
654 }
655
656 =head2 species
657
658 Arg [1] : (optional) string $arg
659 The new value of the species used by this DBAdaptor.
660 Example : $species = $dba->species()
661 Description: Getter/Setter for the species of to use for
662 this connection. There is currently no point in setting
663 this value after the connection has already been established
664 by the constructor.
665 Returntype : string
666 Exceptions : none
667 Caller : new
668 Status : Stable
669
670 =cut
671
672 sub species {
673 my ( $self, $arg ) = @_;
674
675 if ( defined($arg) ) {
676 $self->{_species} = $arg;
677 }
678
679 $self->{_species};
680 }
681
682 =head2 all_species
683
684 Args : NONE
685 Example : @all_species = @{$dba->all_species()};
686 Description: Returns the names of all species contained in the
687 database to which this DBAdaptor is connected.
688 Returntype : array reference
689 Exceptions : none
690 Caller : general
691 Status : Stable
692
693 =cut
694
695 sub all_species {
696 my ($self) = @_;
697
698 if ( !$self->is_multispecies() ) { return [ $self->species() ] }
699
700 if ( exists( $self->{'_all_species'} ) ) {
701 return $self->{'_all_species'};
702 }
703
704 my $statement =
705 "SELECT meta_value "
706 . "FROM meta "
707 . "WHERE meta_key = 'species.db_name'";
708
709 my $sth = $self->dbc()->db_handle()->prepare($statement);
710
711 $sth->execute();
712
713 my $species;
714 $sth->bind_columns( \$species );
715
716 my @all_species;
717 while ( $sth->fetch() ) { push( @all_species, $species ) }
718
719 $self->{'_all_species'} = \@all_species;
720
721 return $self->{'_all_species'};
722 } ## end sub all_species
723
724
725 =head2 is_multispecies
726
727 Arg [1] : (optional) boolean $arg
728 Example : if ($dba->is_multispecies()) { }
729 Description: Getter/Setter for the is_multispecies boolean of
730 to use for this connection. There is currently no
731 point in setting this value after the connection has
732 already been established by the constructor.
733 Returntype : boolean
734 Exceptions : none
735 Caller : new
736 Status : Stable
737
738 =cut
739
740 sub is_multispecies {
741 my ( $self, $arg ) = @_;
742
743 if ( defined($arg) ) {
744 $self->{_is_multispecies} = $arg;
745 }
746
747 return $self->{_is_multispecies};
748 }
749
750
751 =head2 species_id
752
753 Arg [1] : (optional) string $arg
754 The new value of the species_id used by this DBAdaptor
755 when dealing with multi-species databases.
756 Example : $species_id = $dba->species_id()
757 Description: Getter/Setter for the species_id of to use for this
758 connection. There is currently no point in setting
759 this value after the connection has already been
760 established by the constructor.
761 Returntype : string
762 Exceptions : none
763 Caller : new
764 Status : Stable
765
766 =cut
767
768 sub species_id {
769 my ( $self, $arg ) = @_;
770
771 if ( defined($arg) ) {
772 $self->{_species_id} = $arg;
773 }
774
775 return $self->{_species_id};
776 }
777
778
779 =head2 no_cache
780
781 Arg [1] : (optional) int $arg
782 The new value of the no cache attribute used by this DBAdaptor.
783 Example : $no_cache = $dba->no_cache();
784 Description: Getter/Setter for the no_cache to use for
785 this connection. There is currently no point in setting
786 this value after the connection has already been established
787 by the constructor.
788 Returntype : int
789 Exceptions : none
790 Caller : new
791 Status : Stable
792
793 =cut
794
795 sub no_cache {
796 my ($self, $arg ) = @_;
797
798 if ( defined $arg ){
799 if ($arg != 1 && $arg != 0){
800 throw("$arg is not allowed for this attribute. Only value 1|0 is allowed");
801 }
802 $self->{_no_cache} = $arg;
803 }
804 $self->{_no_cache};
805 }
806
807
808 =head2 group
809
810 Arg [1] : (optional) string $arg
811 The new value of the group used by this DBAdaptor.
812 Example : $group = $dba->group()
813 Description: Getter/Setter for the group of to use for
814 this connection. There is currently no point in setting
815 this value after the connection has already been established
816 by the constructor.
817 Returntype : string
818 Exceptions : none
819 Caller : new
820 Status : Stable
821
822 =cut
823
824 sub group {
825 my ($self, $arg ) = @_;
826 ( defined $arg ) &&
827 ( $self->{_group} = $arg );
828 $self->{_group};
829 }
830
831 =head2 get_SeqRegionCache
832
833 Arg [1] : none
834 Example : my $srcache = $dba->get_SeqRegionCache();
835 Description: Retrieves a seq_region cache for this database
836 Returntype : Bio::EnsEMBL::Utils::SeqRegionCache
837 Exceptions : none
838 Caller : SliceAdaptor, AssemblyMapperAdaptor
839 Status : Stable
840
841 =cut
842
843 sub get_SeqRegionCache {
844 my $self = shift;
845
846 # use the cache from the database where seq_regions are stored
847 if($self != $self->dnadb()) {
848 return $self->dnadb()->get_SeqRegionCache();
849 }
850
851 if(!$self->{'seq_region_cache'}) {
852 $self->{'seq_region_cache'} = Bio::EnsEMBL::Utils::SeqRegionCache->new();
853 }
854
855 return $self->{'seq_region_cache'};
856 }
857
858
859
860 #convenient method to retrieve the schema_build version for the database being used
861
862 sub _get_schema_build{
863 my ($self) = @_;
864
865 #avoided using dnadb by default to avoid obfuscation of behaviour
866
867 my @dbname = split/_/, $self->dbc->dbname();
868
869 #warn "dbname is $schema_build";
870
871 my $schema_build = pop @dbname;
872 $schema_build = pop(@dbname).'_'.$schema_build;
873
874
875 return $schema_build;
876 }
877
878
879 =head2 dnadb
880
881 Title : dnadb
882 Usage : my $dnadb = $db->dnadb();
883 Function: returns the database adaptor where the dna lives
884 Useful if you only want to keep one copy of the dna
885 on disk but have other databases with genes and features in
886 Returns : dna database adaptor
887 Args : Bio::EnsEMBL::DBSQL::BaseAdaptor
888 Status : Medium Risk.
889 : Use the Registry method add_DNAAdaptor/get_DNAAdaptor instead
890
891 =cut
892
893 sub dnadb {
894 my $self = shift;
895
896 if(@_) {
897 my $arg = shift;
898 $reg->add_DNAAdaptor($self->species(),$self->group(),$arg->species(),$arg->group());
899 }
900
901 # return $self->{'dnadb'} || $self;
902 return $reg->get_DNAAdaptor($self->species(),$self->group()) || $self;
903 }
904
905
906 use vars '$AUTOLOAD';
907
908 sub AUTOLOAD {
909 my ( $self, @args ) = @_;
910
911 my $type;
912 if ( $AUTOLOAD =~ /^.*::get_(\w+)Adaptor$/ ) {
913 $type = $1;
914 } elsif ( $AUTOLOAD =~ /^.*::get_(\w+)$/ ) {
915 $type = $1;
916 } else {
917 throw( sprintf( "Could not work out type for %s\n", $AUTOLOAD ) );
918 }
919
920 my $ret = $reg->get_adaptor( $self->species(), $self->group(), $type );
921
922 return $ret if $ret;
923
924 warning( sprintf(
925 "Could not find %s adaptor in the registry for %s %s\n",
926 $type, $self->species(), $self->group() ) );
927
928 throw( sprintf(
929 "Could not get adaptor %s for %s %s\n",
930 $type, $self->species(), $self->group() ) );
931
932 } ## end sub AUTOLOAD
933
934 sub DESTROY { } # required due to AUTOLOAD
935
936
937 #########################
938 # sub DEPRECATED METHODS
939 #########################
940 =head2 db
941
942 Description: DEPRECATED
943
944 =cut
945
946 sub db{
947 my ($self, $arg ) = @_;
948 deprecate("db Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
949 return $self->dbc($arg);
950 }
951
952
953 sub source { deprecate('Do not use - this method does nothing'); }
954
955
956 =head2 assembly_type
957
958 Description: DEPRECATED - Use CoordSystemAdaptor to obtain default coordinate
959 system instead.
960
961 =cut
962
963 sub assembly_type{
964 my $self = shift;
965
966 deprecate('Use CoordSystemAdaptor $csa->fetch_all->[0]->version() instead');
967
968 my $csa = $self->get_CoordSystemAdaptor();
969 my ($cs) = @{$csa->fetch_all()};
970 return ($cs) ? $cs->version() : undef;
971 }
972
973
974
975 =head2 list_supported_assemblies
976
977 Description: DEPRECATED - Use CoordSystemAdaptor to obtain list of top-level
978 coordinate systems instead
979
980 =cut
981
982 sub list_supported_assemblies {
983 my($self) = @_;
984 deprecate('Use CoordSystemAdaptor::fetch_all instead');
985
986 my $csa = $self->get_CoordSystemAdaptor();
987 my %versions;
988 foreach my $cs (@{$csa->fetch_all()}) {
989 $versions{$cs->version()} = 1;
990 }
991
992 return keys %versions;
993 }
994
995
996 sub prepare{
997 my ($self, @args) = @_;
998
999 deprecate("prepare Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1000 $self->dbc->prepare(@args);
1001 }
1002
1003 sub dbname{
1004 my ($self, @args) = @_;
1005
1006 deprecate("dbname Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1007 $self->dbc->dbname(@args);
1008 }
1009
1010 sub disconnect_when_inactive{
1011 my ($self, @args) = @_;
1012
1013 deprecate("disconnect_when_inactive Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1014 $self->dbc->disconnect_when_inactive(@args);
1015 }
1016
1017 sub reconnect_when_lost{
1018 my ($self, @args) = @_;
1019
1020 deprecate("reconnect_when_lost Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1021 $self->dbc->reconnect_when_lost(@args);
1022 }
1023
1024
1025 sub host{
1026 my ($self, @args) = @_;
1027
1028 deprecate("host Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1029 $self->dbc->host(@args);
1030 }
1031 sub username{
1032 my ($self, @args) = @_;
1033
1034 deprecate("username Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1035 $self->dbc->username(@args);
1036 }
1037 sub password{
1038 my ($self, @args) = @_;
1039
1040 deprecate("password Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1041 $self->dbc->password(@args);
1042 }
1043 sub driver{
1044 my ($self, @args) = @_;
1045
1046 deprecate("driver Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1047 $self->dbc->driver(@args);
1048 }
1049 sub port{
1050 my ($self, @args) = @_;
1051
1052 deprecate("port Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1053 $self->dbc->port(@args);
1054 }
1055
1056 sub db_handle{
1057 my ($self, @args) = @_;
1058
1059
1060 deprecate("db_handle Should no longer be called from the DBAdaptor. DBConnection should now be used OR preferably the object adaptor itself\n");
1061 $self->dbc->db_handle(@args);
1062 }
1063
1064
1065 1;