annotate variant_effect_predictor/Bio/EnsEMBL/Registry.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::Registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 use Bio::EnsEMBL::Registry;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 my $registry = 'Bio::EnsEMBL::Registry';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 $registry->load_all("configuration_file");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 $gene_adaptor = $registry->get_adaptor( 'Human', 'Core', 'Gene' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 All Adaptors are stored/registered using this module. This module should
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 then be used to get the adaptors needed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 The registry can be loaded from a configuration file using the load_all
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 method.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 If a filename is passed to load_all then this is used. Else if the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 environment variable ENSEMBL_REGISTRY is set to the name on an existing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 configuration file, then this is used. Else if the file .ensembl_init
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 in your home directory exist, it is used.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 For the Web server ENSEMBL_REGISTRY should be set in SiteDefs.pm. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 will then be passed on to load_all.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 The registry can also be loaded via the method load_registry_from_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 which given a database host will load the latest versions of the Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 databases from it.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 The four types of registries are for db adaptors, dba adaptors, dna
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 adaptors and the standard type.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 =head2 db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 These are registries for backwards compatibility and enable the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 subroutines to add other adaptors to connections.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 e.g. get_all_db_adaptors, get_db_adaptor, add_db_adaptor,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 remove_db_adaptor are the old DBAdaptor subroutines which are now
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 redirected to the Registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 So if before we had
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 my $sfa = $self->adaptor()->db()->get_db_adaptor('blast');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 We now want to change this to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 my $sfa =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 Bio::EnsEMBL::Registry->get_adaptor( "human", "core", "blast" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 =head2 DBA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 These are the stores for the DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 The Registry will create all the DBConnections needed now if you set up
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 the configuration correctly. So instead of the old commands like
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 my $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(...);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 my $exon_adaptor = $db->get_ExonAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 we should now have just
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 my $exon_adaptor =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 Bio::EnsEMBL::Registry->get_adaptor( "human", "core", "exon" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 =head2 DNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 This is an internal Registry and allows the configuration of a dnadb.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 An example here is to set the est database to get its dna data from the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 core database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 ## set the est db to use the core for getting dna data.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 # Bio::EnsEMBL::Utils::ConfigRegistry->dnadb_add( "Homo Sapiens",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 # "core", "Homo Sapiens", "est" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 =head2 adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 This is the registry for all the general types of adaptors like
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 GeneAdaptor, ExonAdaptor, Slice Adaptor etc.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 These are accessed by the get_adaptor subroutine i.e.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 my $exon_adaptor =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 Bio::EnsEMBL::Registry->get_adaptor( "human", "core", "exon" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 package Bio::EnsEMBL::Registry;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 use warnings;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 use Bio::EnsEMBL::DBSQL::DBAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 use Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 use Bio::EnsEMBL::Utils::Exception qw( deprecate throw warning );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 use Bio::EnsEMBL::Utils::ConfigRegistry;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 use Bio::EnsEMBL::ApiVersion;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 use Bio::EnsEMBL::Utils::URI qw/parse_uri/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 use DBI qw(:sql_types);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 use vars qw(%registry_register);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 # This is a map from group names to Ensembl DB adaptors. Used by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 # load_all() and reset_DBAdaptor().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 my %group2adaptor = (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 'blast' => 'Bio::EnsEMBL::External::BlastAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 'compara' => 'Bio::EnsEMBL::Compara::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 'core' => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 'estgene' => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 'funcgen' => 'Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 'regulation' => 'Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 'haplotype' => 'Bio::EnsEMBL::ExternalData::Haplotype::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 'hive' => 'Bio::EnsEMBL::Hive::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 'ontology' => 'Bio::EnsEMBL::DBSQL::OntologyDBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 'otherfeatures' => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 'pipeline' => 'Bio::EnsEMBL::Pipeline::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 'snp' => 'Bio::EnsEMBL::ExternalData::SNPSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 'stable_ids' => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 'variation' => 'Bio::EnsEMBL::Variation::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 'vega' => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 'vega_update' => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 =head2 load_all
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 Will load the registry with the configuration file which is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 obtained from the first in the following and in that order.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 1) If an argument is passed to this method, this is used as the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 name of the configuration file to read.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 2) If the environment variable ENSEMBL_REGISTRY is set, this is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 used as the name of the configuration file to read.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 3) If the file .ensembl_init exist in the home directory, it is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 used as the configuration file.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 Arg [1] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 Name of file to load the registry from.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 Arg [2] : (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 If not 0, will print out all information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 Arg [3] : (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 If not 0, the database connection will not be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 cleared, if 0 or if not set the database connections
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 will be cleared (this is the default).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Arg [4]: (optional) boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 This option will turn off caching for slice features,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 so, every time a set of features is retrieved,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 they will come from the database instead of the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 cache. This option is only recommended for advanced
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 users, specially if you need to store and retrieve
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 features. It might reduce performance when querying
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 the database if not used properly. If in doubt, do
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 not use it or ask in the developer mailing list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 Example : Bio::EnsEMBL::Registry->load_all();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Returntype : Int count of the DBAdaptor instances which can be found in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 sub load_all {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 my ($class, $config_file, $verbose, $no_clear, $no_cache ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 if ( !defined($config_file) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 if ( defined( $ENV{ENSEMBL_REGISTRY} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 $config_file = $ENV{ENSEMBL_REGISTRY};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 } elsif ( defined( $ENV{HOME} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 $config_file = $ENV{HOME} . "/.ensembl_init";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 $verbose ||= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 $no_clear ||= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 $no_cache ||= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 my $original_count = $class->get_DBAdaptor_count();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 if ( !defined($config_file) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 print( STDERR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 "No default registry configuration to load.\n" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 } elsif ( !-e $config_file ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 printf( STDERR "Configuration file '%s' does not exist. "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 . "Registry configuration not loaded.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 $config_file );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 if ( defined( $registry_register{'seen'} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 if ( !$no_clear ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 print( STDERR "Clearing previously loaded "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 . "registry configuration\n" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 $class->clear();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 $registry_register{'seen'} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 printf( STDERR
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 "Loading registry configuration from '%s'.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 $config_file );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 my $cfg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 my $test_eval = eval { require Config::IniFiles };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 if ($@ or (!$test_eval)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 # The user does not have the 'Config::IniFiles' module.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 print( STDERR "No Config::IniFiles module found, "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 . "assuming this is not an ini-file\n" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 # If the configuration file *is* an ini-file, we can expect a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 # load of compilation errors from the next eval...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 # The user has the 'Config::IniFiles' module installed. See
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 # if this is an ini-file or not...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 $cfg = Config::IniFiles->new( -file => $config_file );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 if ( defined $cfg ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 my %default_adaptor_args = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 if ( $cfg->SectionExists('default') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 # The 'default' section is special. It contain default
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 # values that should be implicit to all other section in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 # this configuration file. Aliases are added if there
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 # is also a 'species' setting.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 my $alias = $cfg->val( 'default', 'alias' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 $cfg->delval( 'default', 'alias' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 my $species = $cfg->val( 'default', 'species' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 if ( defined($alias) && defined($species) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 -species => $species,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 -alias => [ split( /\n/, $alias ) ]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 %default_adaptor_args =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 map { '-' . $_ => $cfg->val( 'default', $_ ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 $cfg->Parameters('default');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 foreach my $section ( $cfg->Sections() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 if ( $section eq 'default' )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 { # We have already done the 'default' section.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 my $group = $cfg->val( $section, 'group' )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 || $cfg->val( 'default', 'group' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 if ( !defined($group) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 printf( STDERR "Key 'group' is undefined "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 . "for configuration section '%s', "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 . "skipping this section.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 $section );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 my $adaptor = $group2adaptor{ lc($group) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 if ( !defined($adaptor) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 printf( STDERR "Unknown group '%s' "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 . "for configuration section '%s', "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 . "skipping this section.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 $group, $section );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 # Handle aliases. A section must have both an 'alias'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 # setting and a 'species' setting for aliases to be
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 # added. The 'species' setting might be inherited from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 # the 'default' section.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 my $alias = $cfg->val( $section, 'alias' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 $cfg->delval( $section, 'alias' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 my $species = $cfg->val( $section, 'species' )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 || $cfg->val( 'default', 'species' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 if ( defined($alias) && defined($species) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 -species => $species,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 -alias => [ split( /\n/, $alias ) ]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 # Fill in the adaptor initialization arguments.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 # We trust the user to provide sensible key-value pairs.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 my %adaptor_args = %default_adaptor_args;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 foreach my $parameter ( $cfg->Parameters($section) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 $adaptor_args{ '-' . $parameter } =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 $cfg->val( $section, $parameter );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 # when set, do not use the feature cache in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 # different adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 if ($no_cache) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 $adaptor_args{'-no_cache'} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 printf( "Configuring adaptor '%s' "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 . "for configuration section '%s'...\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 $adaptor, $section );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 my $test_eval = eval "require $adaptor";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 if ($@ or (!$test_eval)) { die($@) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 $adaptor->new(%adaptor_args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 } ## end foreach my $section ( $cfg->Sections...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 # This is probably no ini-file but an old style piece
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 # of configuration written in Perl. We need to try to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 # require() it.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 my $test_eval = eval { require($config_file) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 if ($@ or (!$test_eval)) { die($@) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 # To make the web code avoid doing this again:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 delete $INC{$config_file};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 } ## end else [ if ( !defined($config_file...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 return $class->get_DBAdaptor_count() - $original_count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 } ## end sub load_all
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 =head2 clear
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 Will clear the registry and disconnect from all databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 Example : Bio::EnsEMBL::Registry->clear();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 sub clear{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 my ($self);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 foreach my $dba (@{$registry_register{'_DBA'}}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 if($dba->dbc->connected){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 $dba->dbc->db_handle->disconnect();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 %registry_register = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 # db adaptors. (for backwards compatibility)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 =head2 add_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 Arg [1] : db (DBAdaptor) to add adaptor to.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408 Arg [2] : name of the name to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 Arg [3] : The adaptor to be added to the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 Example : Bio::EnsEMBL::Registry->add_db($db, "lite", $dba);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 : This is here for backwards compatibility only and may
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 : be removed eventually. Solution is to make sure the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 : db and the adaptor have the same species and the call
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 : is then no longer needed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 sub add_db {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 my ( $class, $db, $name, $adap ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 if ( lc( $db->species() ) ne lc( $adap->species ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 $registry_register{_SPECIES}{ lc( $db->species() ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 { lc( $db->group() ) }{'_special'}{ lc($name) } = $adap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 =head2 remove_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 Arg [1] : db (DBAdaptor) to remove adaptor from.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 Arg [2] : name to remove the adaptor from in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 Example : my $db = Bio::EnsEMBL::Registry->remove_db($db, "lite");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 Returntype : adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 : This is here for backwards compatibility only and may
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 : be removed eventually. Solution is to make sure the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 : db and the adaptor have the same species and the call
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 : is then no longer needed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 sub remove_db {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 my ( $class, $db, $name ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 my $ret =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 $registry_register{_SPECIES}{ lc( $db->species() ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 { lc( $db->group() ) }{'_special'}{ lc($name) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 $registry_register{_SPECIES}{ lc( $db->species() ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 { lc( $db->group() ) }{'_special'}{ lc($name) } = undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 return $ret;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 =head2 get_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 Arg [1] : db (DBAdaptor) to get adaptor from.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 Arg [2] : name to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 Example : my $db = Bio::EnsEMBL::Registry->get_db("Human", "core", "lite");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 Returntype : adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 Exceptions : See get_DBAdaptor()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 : This is here for backwards compatibility only and may
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 : be removed eventually. Solution is to make sure the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 : db and the adaptor have the same species then call
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 : get_DBAdaptor instead.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 sub get_db {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 my ( $class, $db, $name ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 my $ret = Bio::EnsEMBL::Registry->get_DBAdaptor( lc( $db->species ),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 lc($name) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 if ( defined($ret) ) { return $ret }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 return $registry_register{_SPECIES}{ lc( $db->species() ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 { lc( $db->group() ) }{'_special'}{ lc($name) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 =head2 get_all_db_adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 Arg [1] : db (DBAdaptor) to get all the adaptors from.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 Example : my $db = Bio::EnsEMBL::Registry->get_all_db_adaptors($db);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 Returntype : adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 : This is here for backwards compatibility only and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 : may be removed eventually. Solution is to make
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 : sure the dbs all have the same species then call
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 : get_all_DBAdaptors(-species => "human");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 sub get_all_db_adaptors {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 my ( $class, $db ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 my %ret = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 # we now also want to add all the DBAdaptors for the same species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 # as add_db_adaptor does not add if it is from the same species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 foreach my $dba ( @{ $registry_register{'_DBA'} } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 if ( lc( $dba->species() ) eq lc( $db->species() ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 $ret{ $dba->group() } = $dba;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 foreach my $key (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 keys %{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 $registry_register{_SPECIES}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 { $class->get_alias( $db->species() ) }{ lc( $db->group() ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 {'_special'} } )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 $ret{$key} =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 $registry_register{_SPECIES}
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 { $class->get_alias( $db->species() ) }{ lc( $db->group() ) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 {'_special'}{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 return \%ret;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 } ## end sub get_all_db_adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 # DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 =head2 add_DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 Arg [1] : name of the species to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537 Arg [2] : name of the group to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 Arg [3] : DBAdaptor to be added to the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 Example : Bio::EnsEMBL::Registry->add_DBAdaptor("Human", "core", $dba);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 sub add_DBAdaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 my ( $class, $species, $group, $adap ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 if ( !( $class->alias_exists($species) ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 $class->add_alias( $species, $species );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 $species = $class->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DB'} = $adap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 if ( !defined( $registry_register{'_DBA'} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 $registry_register{'_DBA'} = [$adap];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 push( @{ $registry_register{'_DBA'} }, $adap );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 =head2 get_DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 Arg [1] : name of the species to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571 Arg [2] : name of the group to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 Arg [3] : if set will not give warnings when looking for alias.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 Example : $dba = Bio::EnsEMBL::Registry->get_DBAdaptor("Human", "core");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 Returntype : DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 Exceptions : If $species is not defined and if no valid internal name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 could be found for $species. If thrown check your API and DB
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 sub get_DBAdaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 my ( $class, $species, $group, $no_alias_check ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 if ( !defined($species) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 throw('Species not defined.');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 my $ispecies = $class->get_alias( $species, $no_alias_check );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 if ( !defined($ispecies) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592 if(! $no_alias_check) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 throw("Can not find internal name for species '$species'");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 else { $species = $ispecies }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 return $registry_register{_SPECIES}{$species}{ lc($group) }{'_DB'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 =head2 get_all_DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 Arg [SPECIES]: (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 species name to get adaptors for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 Arg [GROUP] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 group name to get adaptors for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 @dba =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 @{ Bio::EnsEMBL::Registry->get_all_DBAdaptors() };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 @human_dbas =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 @{ Bio::EnsEMBL::Registry->get_all_DBAdaptors(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 -species => 'human'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 ) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 Returntype : list of DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 sub get_all_DBAdaptors {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623 my ( $class, @args ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 my ( $species, $group ) = rearrange( [qw(SPECIES GROUP)], @args );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 if ( defined($species) ) { $species = $class->get_alias($species) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 my @ret;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 foreach my $dba ( @{ $registry_register{'_DBA'} } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 if ( ( !defined($species) || lc($species) eq lc( $dba->species() ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 && ( !defined($group) || lc($group) eq lc( $dba->group() ) ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 push( @ret, $dba );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 return \@ret;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 =head2 get_all_DBAdaptors_by_connection
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 Arg [1] : DBConnection used to find DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 Returntype : reference to list of DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 Example : @dba = @{ Bio::EnsEMBL::Registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 ->get_all_DBAdaptors_by_connection($dbc) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 sub get_all_DBAdaptors_by_connection {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 my ( $self, $dbc_orig ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 my @return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 foreach my $dba ( @{ $registry_register{'_DBA'} } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 my $dbc = $dba->dbc();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 if ( defined($dbc)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 && $dbc->can('equals')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 && $dbc->equals($dbc_orig) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 push( @return, $dba );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 return \@return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 =head2 get_all_DBAdaptors_by_dbname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 Arg [1] : string, name of database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 Returntype : reference to list of DBAdaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 Example : @dba = @{ Bio::EnsEMBL::Registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 ->get_all_DBAdaptors_by_dbname($dbname) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 sub get_all_DBAdaptors_by_dbname {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 my ( $self, $dbname ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 my @return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 foreach my $dba ( @{ $registry_register{'_DBA'} } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 my $dbc = $dba->dbc();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 if ( defined($dbc) && $dbc->dbname() eq $dbname ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 push( @return, $dba );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 return \@return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 =head2 remove_DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 Arg [1] : name of the species to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 Arg [2] : name of the group to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 Example : $dba = Bio::EnsEMBL::Registry->remove_DBAdaptor("Human", "core");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 sub remove_DBAdaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 my ( $class, $species, $group ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 $species = $class->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 delete $registry_register{_SPECIES}{$species}{$group};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 # This will remove the DBAdaptor and all the other adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 # Now remove if from the _DBA array
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 my $index;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 foreach my $i ( 0 .. $#{ $registry_register{'_DBA'} } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 my $dba = $registry_register{'_DBA'}->[$i];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 if ( ( $dba->species eq $species )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724 && $dba->group eq $group )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
726 $index = $i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
727 last;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
728 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
729 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
730
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
731 # Now remove from _DBA cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
732 if ( defined($index) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
733 splice( @{ $registry_register{'_DBA'} }, $index, 1 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
734 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
735
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
736 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
737 } ## end sub remove_DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
738
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
739
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
740
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
741 =head2 reset_DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
742
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
743 Arg [1]: string - species e.g. homo_sapiens
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
744 Arg [2]: string - DB group e.g. core
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
745 Arg [3]: string - new dbname
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
746 Args [4-7]: string - optional DB parameters, defaults to current db params if omitted
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
747 Arg [8]: hashref - Hash ref of additional parameters e.g. eFG dnadb params for auto selecting dnadb
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
748 Usage : $reg->reset_registry_db( 'homo_sapiens', 'core',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
749 'homo_sapiens_core_37_35j' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
750 Description: Resets a DB within the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
751 Exceptions: Throws if mandatory params not supplied
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
752 Throws if species name is not already seen by the registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
753 Throws if no current DB for species/group available
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
754 Status : At risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
755
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
756 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
757
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
758 sub reset_DBAdaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
759 my (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
760 $self, $species, $group, $dbname, $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
761 $port, $user, $pass, $params
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
762 ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
763
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
764 # Check mandatory params
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
765 if ( !( defined $species && defined $group && defined $dbname ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
766 throw(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
767 'Must provide at least a species, group, and dbname parameter '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
768 . 'to redefine a DB in the registry' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
769 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
770
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
771 # Validate species here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
772 my $alias = $self->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
773 throw("Could not find registry alias for species:\t$species")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
774 if ( !defined $alias );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
775
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
776 # Get all current defaults if not defined
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
777
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
778 my $db = $self->get_DBAdaptor( $alias, $group );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
779 my $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
780
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
781 if ($db) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
782 $class = ref($db);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
783 $host ||= $db->dbc->host;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
784 $port ||= $db->dbc->port;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
785 $user ||= $db->dbc->username;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
786 $pass ||= $db->dbc->password;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
787 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
788 #Now we need to test mandatory params
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
789 $class = $group2adaptor{ lc($group) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
790
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
791 if ( !( $host && $user ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
792 throw("No comparable $alias $group DB present in Registry. "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
793 . "You must pass at least a dbhost and dbuser" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
794 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
795 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
797 $self->remove_DBAdaptor( $alias, $group );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
798
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
799 # ConfigRegistry should automatically add this to the Registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
800 $db = $class->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
801 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
802 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
803 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
804 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
805 -dbname => $dbname,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
806 -species => $alias,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
807 -group => $group,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
808 %{$params} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
809
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
810 return $db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
811 } ## end sub reset_DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
812
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
813
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
814 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
815 # DNA Adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
816 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
817
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
818 =head2 add_DNAAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
819
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
820 Arg [1] : name of the species to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
821 Arg [2] : name of the group to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
822 Arg [3] : name of the species to get the dna from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
823 Arg [4] : name of the group to get the dna from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
824 Example : Bio::EnsEMBL::Registry->add_DNAAdaptor("Human", "estgene", "Human", "core");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
825 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
826 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
827 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
828
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
829 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
830
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
831 sub add_DNAAdaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
832 my ( $class, $species, $group, $dnadb_species, $dnadb_group ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
833
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
834 $species = $class->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
835 $dnadb_species = $class->get_alias($dnadb_species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
836 if ( $dnadb_group->isa('Bio::EnsEMBL::DBSQL::DBAdaptor') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
837 deprecated("");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
838 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
839 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DNA'} =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
840 $dnadb_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
841 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DNA2'} =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
842 $dnadb_species;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
843 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
844 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
845 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
846
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
847 =head2 get_DNAAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
848
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
849 Arg [1] : name of the species to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
850 Arg [2] : name of the group to get the adaptor for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
851 Example : $dnaAdap = Bio::EnsEMBL::Registry->get_DNAAdaptor("Human", "core");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
852 Returntype : adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
853 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
854 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
855
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
856 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
857
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
858 sub get_DNAAdaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
859 my ( $class, $species, $group ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
860
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
861 $species = $class->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
862 my $new_group =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
863 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DNA'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
864 my $new_species =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
865 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DNA2'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
866
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
867 if ( defined $new_group ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
868 return $class->get_DBAdaptor( $new_species, $new_group );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
869 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
870
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
871 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
872 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
873
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
874 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
875 # General Adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
876 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
877
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
878 =head2 add_adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
879
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
880 Arg [1] : name of the species to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
881 Arg [2] : name of the group to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
882 Arg [3] : name of the type to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
883 Arg [4] : The DBAdaptor to be added to the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
884 Arg [5] : (optional) Set to allow overwrites of existing adaptors.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
885 Example : Bio::EnsEMBL::Registry->add_adaptor("Human", "core", "Gene", $adap);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
886 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
887 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
888 Caller : internal
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
889 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
890
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
891 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
892
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
893 sub add_adaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
894 my ( $class, $species, $group, $type, $adap, $reset ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
895
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
896 $species = $class->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
897
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
898 # Since the adaptors are not stored initially, only their class paths
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
899 # when the adaptors are obtained, we need to store these instead. It
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
900 # is not necessarily an error if the registry is overwritten without
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
901 # the reset set but it is an indication that we are overwriting a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
902 # database which should be a warning for now
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
903
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
904 if ( defined($reset) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
905 { # JUST RESET THE HASH VALUE NO MORE PROCESSING NEEDED
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
906 $registry_register{_SPECIES}{$species}{ lc($group) }{ lc($type) } =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
907 $adap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
908 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
909 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
910
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
911 if (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
912 defined(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
913 $registry_register{_SPECIES}{$species}{ lc($group) }{ lc($type) }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
914 ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
915 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
916 # print STDERR (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
917 # "Overwriting Adaptor in Registry for $species $group $type\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
918 $registry_register{_SPECIES}{$species}{ lc($group) }{ lc($type) } =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
919 $adap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
920 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
921 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
922 $registry_register{_SPECIES}{$species}{ lc($group) }{ lc($type) } =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
923 $adap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
924
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
925 if ( !defined( $registry_register{_SPECIES}{$species}{'list'} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
926 $registry_register{_SPECIES}{$species}{'list'} = [$type];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
927 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
928 push( @{ $registry_register{_SPECIES}{$species}{'list'} }, $type );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
929 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
930
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
931 if ( !defined( $registry_register{_TYPE}{ lc($type) }{$species} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
932 $registry_register{_TYPE}{ lc($type) }{$species} = [$type];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
933 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
934 push( @{ $registry_register{_TYPE}{ lc($type) }{$species} },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
935 $adap );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
936 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
937 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
938 } ## end sub add_adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
939
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
940
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
941 =head2 get_adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
942
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
943 Arg [1] : name of the species to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
944 Arg [2] : name of the group to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
945 Arg [3] : name of the type to add the adaptor to in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
946 Example : $adap = Bio::EnsEMBL::Registry->get_adaptor("Human", "core", "Gene");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
947 Returntype : adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
948 Exceptions : Thrown if a valid internal name cannot be found for the given
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
949 name. If thrown check your API and DB version. Also thrown if
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
950 no type or group was given
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
951 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
952
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
953 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
954
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
955 sub get_adaptor {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
956 my ( $class, $species, $group, $type ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
957
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
958 my $ispecies = $class->get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
959
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
960 if ( !defined($ispecies) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
961 throw("Can not find internal name for species '$species'");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
962 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
963 else { $species = $ispecies }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
964
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
965 throw 'No adaptor group given' if ! defined $group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
966 throw 'No adaptor type given' if ! defined $type;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
967
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
968
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
969 if($type =~ /Adaptor$/i) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
970 warning("Detected additional Adaptor string in given the type '$type'. Removing it to avoid possible issues. Alter your type to stop this message");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
971 $type =~ s/Adaptor$//i;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
972 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
973
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
974 my %dnadb_adaptors = (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
975 'sequence' => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
976 'assemblymapper' => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
977 'karyotypeband' => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
978 'repeatfeature' => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
979 'coordsystem' => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
980 'assemblyexceptionfeature' => 1
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
981 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
982
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
983 # warn "$species, $group, $type";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
984
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
985 $type = lc($type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
986
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
987 # For historical reasons, allow use of group 'regulation' to refer to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
988 # group 'funcgen'.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
989 if ( lc($group) eq 'regulation' ) { $group = 'funcgen' }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
990
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
991 my $dnadb_group =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
992 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DNA'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
993
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
994 if ( defined($dnadb_group)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
995 && defined( $dnadb_adaptors{ lc($type) } ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
996 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
997 $species =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
998 $registry_register{_SPECIES}{$species}{ lc($group) }{'_DNA2'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
999 $group = $dnadb_group;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1000 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1001
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1002 my $ret =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1003 $registry_register{_SPECIES}{$species}{ lc($group) }{ lc($type) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1004
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1005 if ( !defined($ret) ) { return }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1006 if ( ref($ret) ) { return $ret }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1007
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1008 # Not instantiated yet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1009
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1010 my $dba = $registry_register{_SPECIES}{$species}{ lc($group) }{'_DB'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1011 my $module = $ret;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1012
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1013 my $test_eval = eval "require $module";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1014 if ($@ or (!$test_eval)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1015 warning("'$module' cannot be found.\nException $@\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1016 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1017 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1018
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1019 if (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1020 !defined(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1021 $registry_register{_SPECIES}{$species}{ lc($group) }{'CHECKED'} )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1022 )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1023 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1024 $registry_register{_SPECIES}{$species}{ lc($group) }{'CHECKED'} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1025 $class->version_check($dba);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1026 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1027
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1028 my $adap = "$module"->new($dba);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1029 Bio::EnsEMBL::Registry->add_adaptor( $species, $group, $type, $adap,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1030 'reset' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1031 $ret = $adap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1032
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1033 return $ret;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1034 } ## end sub get_adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1035
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1036 =head2 get_all_adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1037
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1038 Arg [SPECIES] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1039 species name to get adaptors for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1040 Arg [GROUP] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1041 group name to get adaptors for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1042 Arg [TYPE] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1043 type to get adaptors for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1044 Example : @adaps = @{Bio::EnsEMBL::Registry->get_all_adaptors()};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1045 Returntype : ref to list of adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1046 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1047 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1048
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1049 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1050
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1051 sub get_all_adaptors{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1052 my ($class,@args)= @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1053 my ($species, $group, $type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1054 my @ret=();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1055 my (%species_hash, %group_hash, %type_hash);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1056
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1057
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1058 if(@args == 1){ # Old species only one parameter
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1059 warn("-SPECIES argument should now be used to get species adaptors");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1060 $species = $args[0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1061 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1062 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1063 # new style -SPECIES, -GROUP, -TYPE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1064 ($species, $group, $type) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1065 rearrange([qw(SPECIES GROUP TYPE)], @args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1066 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1067
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1068 if(defined($species)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1069 $species_hash{$species} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1070 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1071 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1072 # get list of species
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1073 foreach my $dba (@{$registry_register{'_DBA'}}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1074 $species_hash{lc($dba->species())} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1075 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1076 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1077 if(defined($group)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1078 $group_hash{$group} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1079 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1080 else{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1081 foreach my $dba (@{$registry_register{'_DBA'}}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1082 $group_hash{lc($dba->group())} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1083 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1084 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1085
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1086 if ( defined($type) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1087 $type_hash{$type} = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1088 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1089 foreach my $dba ( @{ $registry_register{'_DBA'} } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1090 foreach my $ty (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1091 @{ $registry_register{_SPECIES}{ lc( $dba->species ) }{'list'} }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1092 )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1093 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1094 $type_hash{ lc($ty) } = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1095 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1096 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1097 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1098
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1099 ### NOW NEED TO INSTANTIATE BY CALLING get_adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1100 foreach my $sp ( keys %species_hash ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1101 foreach my $gr ( keys %group_hash ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1102 foreach my $ty ( keys %type_hash ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1103 my $temp = $class->get_adaptor( $sp, $gr, $ty );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1104 if ( defined($temp) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1105 push @ret, $temp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1106 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1107 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1108 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1109 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1111 return (\@ret);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1112 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1115 =head2 add_alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1117 Arg [1] : name of the species to add alias for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1118 Arg [2] : name of the alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1119 Example : Bio::EnsEMBL::Registry->add_alias("Homo Sapiens","Human");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1120 Description: add alternative name for the species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1121 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1122 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1123 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1124
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1125 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1127 sub add_alias{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1128 my ($class, $species,$key) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1129
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1130 $registry_register{'_ALIAS'}{lc($key)} = lc($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1131 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1132 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1133
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1134 =head2 remove_alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1136 Arg [1] : name of the species to remove alias for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1137 Arg [2] : name of the alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1138 Example : Bio::EnsEMBL::Registry->remove_alias("Homo Sapiens","Human");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1139 Description: remove alternative name for the species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1140 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1141 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1142 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1144 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1145
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1146 sub remove_alias{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1147 my ($class, $species,$key) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1149 delete $registry_register{'_ALIAS'}{lc($key)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1150 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1151 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1154
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1155 =head2 get_alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1156
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1157 Arg [1] : name of the possible alias to get species for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1158 Example : Bio::EnsEMBL::Registry->get_alias("Human");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1159 Description: get proper species name.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1160 Returntype : species name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1161 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1162 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1163
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1164 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1165
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1166 sub get_alias {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1167 my ( $class, $key, $no_warn ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1169 if ( !defined( $registry_register{'_ALIAS'}{ lc($key) } ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1170 if ( ( !defined( $registry_register{_SPECIES}{ lc($key) } ) ) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1171 ( !defined( $registry_register{_ALIAS}{ lc($key) } ) ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1172 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1173 if ( ( !defined($no_warn) ) or ( !$no_warn ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1174 warning( "$key is not a valid species name " .
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1175 "(check DB and API version)" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1177 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1178 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1179 else { return $key }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1180 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1182 return $registry_register{'_ALIAS'}{ lc($key) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1183 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1184
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1185 =head2 get_all_aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1187 Arg [1] : Species name to retrieve aliases for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1188 (may be an alias as well).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1189 Example : Bio::EnsEMBL::Registry->get_all_aliases('Homo sapiens');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1190 Description: Returns all known aliases for a given species (but not the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1191 species name/alias that was given).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1192 Returntype : ArrayRef of all known aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1193 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1194 Status : Development
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1196 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1198 sub get_all_aliases {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1199 my ( $class, $key ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1200
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1201 my $species = $registry_register{_ALIAS}{ lc($key) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1203 my @aliases;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1204 if ( defined($species) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1205 foreach my $alias ( keys( %{ $registry_register{_ALIAS} } ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1206 if ( $species ne $alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1207 && $species eq $registry_register{_ALIAS}{ lc($alias) } )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1208 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1209 push( @aliases, $alias );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1210 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1211 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1212 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1214 return \@aliases;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1215 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1216
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1217 =head2 alias_exists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1219 Arg [1] : name of the possible alias to get species for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1220 Example : Bio::EnsEMBL::Registry->alias_exists("Human");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1221 Description: does the species name exist.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1222 Returntype : 1 if exists else 0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1223 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1224 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1225
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1226 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1228 sub alias_exists {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1229 my ( $class, $key ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1230
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1231 return defined( $registry_register{'_ALIAS'}{ lc($key) } );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1232 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1233
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1234 =head2 set_disconnect_when_inactive
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1235
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1236 Example : Bio::EnsEMBL::Registry->set_disconnect_when_inactive();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1237 Description: Set the flag to make sure that the database connection is dropped if
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1238 not being used on each database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1239 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1240 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1241 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1242
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1243 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1244
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1245 sub set_disconnect_when_inactive{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1246 foreach my $dba ( @{get_all_DBAdaptors()}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1247 my $dbc = $dba->dbc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1248 # Disconnect if connected
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1249 $dbc->disconnect_if_idle() if $dbc->connected();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1250 $dbc->disconnect_when_inactive(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1251 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1252 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1253 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1255 =head2 set_reconnect_when_lost
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1256
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1257 Example : Bio::EnsEMBL::Registry->set_reconnect_when_lost();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1258 Description: Set the flag to make sure that the database connection is not lost before it's used.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1259 This is useful for long running jobs (over 8hrs).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1260 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1261 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1262 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1264 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1266 sub set_reconnect_when_lost{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1267 foreach my $dba ( @{get_all_DBAdaptors()}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1268 my $dbc = $dba->dbc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1269 $dbc->reconnect_when_lost(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1270 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1271 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1272 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1274 =head2 disconnect_all
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1275
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1276 Example : Bio::EnsEMBL::Registry->disconnect_all();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1277 Description: disconnect from all the databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1278 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1279 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1280 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1282 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1283
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1284 sub disconnect_all {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1285 foreach my $dba ( @{get_all_DBAdaptors()||[]} ){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1286 my $dbc = $dba->dbc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1287 next unless $dbc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1288 # Disconnect if connected
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1289 $dbc->disconnect_if_idle() if $dbc->connected();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1290 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1291 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1292 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1293
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1294 =head get_DBAdaptor_count
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1295
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1296 Example : Bio::EnsEMBL::Registry->get_DBAdaptor_count();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1297 Description : Returns the count of database adaptors currently held by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1298 the registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1299 Returntype : Int count of database adaptors currently known
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1300 Exceptions : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1301
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1302 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1303
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1304 sub get_DBAdaptor_count {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1305 return scalar(@{$registry_register{'_DBA'}}) if(defined $registry_register{'_DBA'});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1306 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1307 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1309 =head2 change_access
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1310
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1311 Will change the username and password for a set of databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1312 if host,user or database names are missing then these are not checked.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1313 So for example if you do not specify a database then ALL databases on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1314 the specified host and port will be changed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1315
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1316 Arg [1] : name of the host to change access on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1317 Arg [2] : port number to change access on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1318 Arg [3] : name of the user to change access on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1319 Arg [4] : name of the database to change access on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1320 Arg [5] : name of the new user
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1321 Arg [6] : new password
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1323 Example : Bio::EnsEMBL::Registry->get_alias("Human");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1324 Description: change username and password on one or more databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1325 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1326 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1327 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1329 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1330
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1331 sub change_access{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1332 my ($self, $host,$port,$user,$dbname,$new_user,$new_pass) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1333 foreach my $dba ( @{$registry_register{'_DBA'}}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1334 my $dbc = $dba->dbc;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1335 if((((!defined($host)) or ($host eq $dbc->host))) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1336 (((!defined($port)) or ($port eq $dbc->port))) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1337 (((!defined($user)) or ($user eq $dbc->username))) and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1338 ((!defined($dbname)) or ($dbname eq $dbc->dbname))){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1339 if($dbc->connected()){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1340 $dbc->db_handle->disconnect();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1341 $dbc->connected(undef);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1342 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1343 # over write the username and password
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1344 $dbc->username($new_user);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1345 $dbc->password($new_pass);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1346 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1347 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1348 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1349 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1350
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1352
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1353 =head2 load_registry_from_url
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1355 Arg [1] : string $url
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1356 Arg [2] : (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1357 If not 0, will print out all information.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1358 Arg [3] : (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1359 This option will turn off caching for slice features, so,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1360 every time a set of features is retrieved, they will come
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1361 from the database instead of the cache. This option is only
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1362 recommended for advanced users, specially if you need to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1363 store and retrieve features. It might reduce performance when
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1364 querying the database if not used properly. If in doubt, do
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1365 not use it or ask in the developer mailing list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1367 Example : load_registry_from_url(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1368 'mysql://anonymous@ensembldb.ensembl.org:3306');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1369
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1370 load_registry_from_url(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1371 'mysql://anonymous@ensembldb.ensembl.org:3306/homo_sapiens_core_65_37?group=core&species=homo_sapiens'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1372 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1374 load_registry_from_url(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1375 'mysql://anonymous@ensembldb.ensembl.org:3306/homo_sapiens_core_65_37?group=core'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1376 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1377
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1378
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1379 Description: Will load the correct versions of the ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1380 databases for the software release it can find on
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1381 a database instance into the registry. Also adds
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1382 a set of standard aliases. The url format is:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1383 mysql://[[username][:password]@]hostname[:port]. You
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1384 can also request a specific version for the databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1385 by adding a slash and the version number but your
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1386 script may crash as the API version won't match the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1387 DB version.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1388
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1389 You can also specify a database name which will cause the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1390 loading of a single DBAdaptor instance. Parameters are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1391 mapped from a normal URL parameter set to their DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1392 equivalent. Group must be defined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1393
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1394 Returntype : Int count of the DBAdaptor instances which can be found in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1395 registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1396
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1397 Exceptions : Thrown if the given URL does not parse according to the above
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1398 scheme and if the specified database cannot be connected to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1399 (see L<load_registry_from_db> for more information)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1400 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1401
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1402 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1403
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1404 sub load_registry_from_url {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1405 my ( $self, $url, $verbose, $no_cache ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1406
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1407 if ( $url =~ /^mysql\:\/\/([^\@]+\@)?([^\:\/]+)(\:\d+)?(\/\d+)?\/?$/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1408 my $user_pass = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1409 my $host = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1410 my $port = $3;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1411 my $version = $4;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1412
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1413 $user_pass =~ s/\@$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1414 my ( $user, $pass ) = $user_pass =~ m/([^\:]+)(\:.+)?/x;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1415 $pass =~ s/^\://x if ($pass);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1416 $port =~ s/^\://x if ($port);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1417 $version =~ s/^\///x if ($version);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1418
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1419 return $self->load_registry_from_db(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1420 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1421 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1422 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1423 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1424 -db_version => $version,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1425 -verbose => $verbose,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1426 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1427 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1428 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1429 my $uri = parse_uri($url);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1430 if($uri) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1431 if($uri->scheme() eq 'mysql') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1432 my %params = $uri->generate_dbsql_params();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1433 if($params{-DBNAME}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1434 $params{-SPECIES} = $params{-DBNAME} unless $params{-SPECIES};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1435 $params{-NO_CACHE} = 1 if $no_cache;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1436 my $group = $params{-GROUP};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1437 my $class = $self->_group_to_adaptor_class($group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1438 if($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1439 printf("Loading database '%s' from group '%s' with DBAdaptor class '%s' from url %s\n", $params{-DBNAME}, $group, $class, $url);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1440 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1441 $class->new(%params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1442 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1443 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1444 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1445 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1446 throw("Only MySQL URLs are accepted. Given URL was '${url}'");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1447 } ## end sub load_registry_from_url
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1448
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1449
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1450 =head2 load_registry_from_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1451
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1452 Arg [HOST] : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1453 The domain name of the database host to connect to.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1454
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1455 Arg [USER] : string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1456 The name of the database user to connect with.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1457
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1458 Arg [PASS] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1459 The password to be used to connect to the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1460
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1461 Arg [PORT] : (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1462 The port to use when connecting to the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1463
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1464 Arg [VERBOSE]: (optional) boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1465 Whether to print database messages.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1466
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1467 Arg [SPECIES]: (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1468 By default, all databases that are found on the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1469 server and that corresponds to the correct release
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1470 are probed for aliases etc. For some people,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1471 depending on where they are in the world, this might
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1472 be a slow operation. With the '-species' argument,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1473 one may reduce the startup time by restricting the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1474 set of databases that are probed to those of a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1475 particular species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1477 Note that the latin name of the species is required,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1478 e.g., 'homo sapiens', 'gallus gallus', 'callithrix
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1479 jacchus' etc. It may be the whole species name,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1480 or only the first part of the name, e.g. 'homo',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1481 'gallus', or 'callithrix'. This will be used in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1482 matching against the name of the databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1483
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1484 Arg [DB_VERSION]: (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1485 By default, only databases corresponding to the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1486 current API version are loaded. This argument
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1487 allows the script to use databases from another
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1488 version although it might not work properly. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1489 argument should only be used for production or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1490 testing purposes and if you really know what you are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1491 doing.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1492
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1493 Arg [WAIT_TIMEOUT]: (optional) integer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1494 Time in seconds for the wait timeout to happen.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1495 Time after which the connection is deleted if not
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1496 used. By default this is 28800 (8 hours), so set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1497 this to greater than this if your connection are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1498 getting deleted. Only set this if you are having
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1499 problems and know what you are doing.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1500
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1501 Arg [-NO_CACHE]: (optional) boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1502 This option will turn off caching for slice features,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1503 so, every time a set of features is retrieved, they
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1504 will come from the database instead of the cache. This
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1505 option is only recommended for advanced users, specially
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1506 if you need to store and retrieve features. It might
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1507 reduce performance when querying the database if not
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1508 used properly. If in doubt, do not use it or ask in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1509 developer mailing list.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1510
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1511 Arg [SPECIES_SUFFIX]: (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1512 This option will append the string to the species name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1513 in the registry for all databases found on this server.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1514
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1515 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1516
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1517 $registry->load_registry_from_db(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1518 -host => 'ensembldb.ensembl.org',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1519 -user => 'anonymous',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1520 -verbose => '1'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1521 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1522
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1523 Description: Will load the correct versions of the Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1524 databases for the software release it can find on a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1525 database instance into the registry. Also adds a set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1526 of standard aliases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1527
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1528 Returntype : Int count of the DBAdaptor instances which can be found in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1529 registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1530
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1531 Exceptions : Thrown if the given MySQL database cannot be connected to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1532 or there is any error whilst querying the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1533 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1534
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1535 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1536
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1537 sub load_registry_from_db {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1538 my ( $self, @args ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1539
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1540 my ( $host, $port, $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1541 $pass, $verbose, $db_version,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1542 $wait_timeout, $no_cache, $species, $species_suffix )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1543 = rearrange( [ 'HOST', 'PORT',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1544 'USER', 'PASS',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1545 'VERBOSE', 'DB_VERSION',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1546 'WAIT_TIMEOUT', 'NO_CACHE',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1547 'SPECIES', 'SPECIES_SUFFIX' ],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1548 @args );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1549
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1550 if ( defined($species) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1551 $species = lc($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1552 $species =~ tr/ -/__/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1553 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1554 if (!defined($species_suffix)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1555 $species_suffix = "";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1556 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1557
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1558 my $ontology_db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1559 my $ontology_version;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1560
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1561 my $stable_ids_db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1562 my $stable_ids_version;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1563
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1564 $user ||= "ensro";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1565 if ( !defined($port) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1566 $port = 3306;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1567 if ( $host eq "ensembldb.ensembl.org" ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1568 if ( (!defined($db_version)) or ($db_version >= 48) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1569 $port = 5306;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1570 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1571 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1572 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1573
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1574 $wait_timeout ||= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1575
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1576 my $original_count = $self->get_DBAdaptor_count();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1578 my $err_pattern = 'Cannot %s to the Ensembl MySQL server at %s:%d; check your settings & DBI error message: %s';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1579
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1580 my $dbh = DBI->connect( "DBI:mysql:host=$host;port=$port", $user, $pass ) or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1581 throw(sprintf($err_pattern, 'connect', $host, $port, $DBI::errstr));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1582 $dbh->ping() or
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1583 throw(sprintf($err_pattern, 'ping', $host, $port, $DBI::errstr));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1584
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1585 my $res = $dbh->selectall_arrayref('SHOW DATABASES');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1586 my @dbnames = map { $_->[0] } @$res;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1587
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1588 my %temp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1589 my $software_version = software_version();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1590
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1591 if ( defined($db_version) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1592 $software_version = $db_version;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1593 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1594
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1595 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1596 printf( "Will only load v%d databases\n", $software_version );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1597 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1598
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1599 # From the list of all the databses create a tempory hash of those we
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1600 # are interested in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1601
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1602 for my $db (@dbnames) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1603 if ( $db =~ /^(\w+_collection_\w+(?:_\d+)?)_((\d+)_\w+)/ )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1604 { # NEEDS TO BE FIRST TO PICK UP COLLECTION DBS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1605 if ( $3 eq $software_version ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1606 $temp{$1} = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1607 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1608 } elsif ( $db =~ /^(.+)_(userdata)$/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1609 $temp{$1} = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1610 } elsif (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1611 $db =~ /^(ensembl_compara # compara database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1612 (?:_\w+)*?) # optional ensembl genomes bit
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1613 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1614 (\d+)$/x )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1615 { # db version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1616 if ( $2 eq $software_version ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1617 $temp{$1} = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1618 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1619 } elsif ( $db =~ /^(ensembl_ancestral(?:_\w+?)*?)_(\d+)$/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1620 if ( $2 eq $software_version ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1621 $temp{$1} = $2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1622 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1623 } elsif ( $db =~ /^ensembl(?:genomes)?_ontology_(?:\d+_)?(\d+)/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1624 if ( $1 eq $software_version ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1625 $ontology_db = $db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1626 $ontology_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1627 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1628 } elsif ( $db =~ /^ensembl(?:genomes)?_stable_ids_(?:\d+_)?(\d+)/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1629 if ( $1 eq $software_version ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1630 $stable_ids_db = $db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1631 $stable_ids_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1632 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1633
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1634 } elsif (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1635 $db =~ /^([a-z]+_[a-z0-9]+(?:_[a-z0-9]+)? # species name e.g. homo_sapiens or canis_lupus_familiaris
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1636 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1637 [a-z]+ # db type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1638 (?:_\d+)?) # optional end bit for ensembl genomes databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1639 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1640 (\d+) # database release
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1641 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1642 (\w+)$ # assembly number can have letters too e.g 37c
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1643 /x
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1644 )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1645 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1646
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1647 # Species specific databases (core, cdna, vega etc.)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1648
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1649 my ( $sp_name, $db_rel, $assem ) = ( $1, $2, $3 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1650
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1651 if ( !defined($species) || $sp_name =~ /^$species/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1652 if ( $db_rel eq $software_version ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1653 $temp{$sp_name} = $db_rel . "_" . $assem;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1654 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1655 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1656
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1657 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1658 # warn( sprintf( "Skipping database '%s'\n", $db ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1659 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1660 } ## end for my $db (@dbnames)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1661
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1662 @dbnames = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1663
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1664 foreach my $key ( keys %temp ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1665 push @dbnames, $key . "_" . $temp{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1666 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1667
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1668 # Register Core like databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1669 my $core_like_dbs_found = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1670 foreach my $type (qw(core cdna vega vega_update otherfeatures rnaseq)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1671
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1672 my @dbs = grep { /^[a-z]+_[a-z0-9]+(?:_[a-z0-9]+)? # species name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1673 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1674 $type # the database type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1675 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1676 (?:\d+_)? # optional end bit for ensembl genomes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1677 \d+ # database release
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1678 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1679 /x } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1680
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1681 if(@dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1682 $core_like_dbs_found = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1683 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1684
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1685 foreach my $database (@dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1686 if ( index( $database, 'collection' ) != -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1687 # Skip multi-species databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1688 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1689 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1690
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1691
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1692 my ( $species, $num ) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1693 ( $database =~ /(^[a-z]+_[a-z0-9]+(?:_[a-z0-9]+)?) # species name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1694 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1695 $type # type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1696 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1697 (?:\d+_)? # optional endbit for ensembl genomes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1698 (\d+) # databases release
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1699 _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1700 /x );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1701
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1702 if(!defined($species)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1703 warn "Cannot extract species name from database '$database'";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1704 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1705
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1706 my $dba =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1707 Bio::EnsEMBL::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1708 -group => $type,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1709 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1710 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1711 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1712 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1713 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1714 -dbname => $database,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1715 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1716 -no_cache => $no_cache );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1717
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1718 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1719 printf( "Species '%s' loaded from database '%s'\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1720 $species, $database );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1721 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1722 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1723 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1724
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1725 # Register multi-species databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1726
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1727 my @multi_dbs = grep { /^\w+_collection_core_\w+$/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1728
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1729 foreach my $multidb (@multi_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1730 my $sth = $dbh->prepare(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1731 sprintf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1732 "SELECT species_id, meta_value FROM %s.meta "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1733 . "WHERE meta_key = 'species.db_name'",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1734 $dbh->quote_identifier($multidb) ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1735
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1736 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1737
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1738 my ( $species_id, $species );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1739 $sth->bind_columns( \( $species_id, $species ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1740
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1741 while ( $sth->fetch() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1742 my $dba = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1743 -group => "core",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1744 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1745 -species_id => $species_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1746 -multispecies_db => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1747 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1748 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1749 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1750 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1751 -dbname => $multidb,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1752 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1753 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1754 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1755
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1756 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1757 printf( "Species '%s' (id:%d) loaded from database '%s'\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1758 $species, $species_id, $multidb );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1759 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1760 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1761 } ## end foreach my $multidb (@multi_dbs)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1762
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1763 if(!$core_like_dbs_found && $verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1764 print("No core-like databases found. Check your DB_VERSION (used '$software_version')\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1765 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1766
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1767 # User upload DBs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1768
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1769 my @userupload_dbs = grep { /_userdata$/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1770 for my $userupload_db (@userupload_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1771 if ( index( $userupload_db, 'collection' ) != -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1772 # Skip multi-species databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1773 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1774 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1775
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1776 my ($species) = ( $userupload_db =~ /(^.+)_userdata$/ );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1777 my $dba =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1778 Bio::EnsEMBL::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1779 -group => "userupload",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1780 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1781 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1782 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1783 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1784 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1785 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1786 -dbname => $userupload_db,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1787 -no_cache => $no_cache );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1788
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1789 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1790 printf( "%s loaded\n", $userupload_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1791 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1792 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1793
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1794 # Register multi-species userupload databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1795 my @userdata_multidbs = grep { /^.+_collection_userdata$/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1796
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1797 foreach my $multidb (@userdata_multidbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1798 my $sth = $dbh->prepare(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1799 sprintf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1800 "SELECT species_id, meta_value FROM %s.meta "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1801 . "WHERE meta_key = 'species.db_name'",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1802 $dbh->quote_identifier($multidb) ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1803
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1804 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1805
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1806 my ( $species_id, $species );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1807 $sth->bind_columns( \( $species_id, $species ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1808
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1809 while ( $sth->fetch() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1810 my $dba = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1811 -group => "userupload",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1812 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1813 -species_id => $species_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1814 -multispecies_db => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1815 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1816 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1817 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1818 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1819 -dbname => $multidb,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1820 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1821 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1822 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1823
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1824 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1825 printf( "Species '%s' (id:%d) loaded from database '%s'\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1826 $species, $species_id, $multidb );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1827 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1828 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1829 } ## end foreach my $multidb (@userdata_multidbs)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1830
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1831 # Variation
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1832
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1833 my $test_eval = eval "require Bio::EnsEMBL::Variation::DBSQL::DBAdaptor";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1834 if ($@or (!$test_eval)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1835 # Ignore variations as code required not there for this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1836 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1837 print(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1838 "Bio::EnsEMBL::Variation::DBSQL::DBAdaptor module not found "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1839 . "so variation databases will be ignored if found\n" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1840 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1841 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1842 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1843 my @variation_dbs =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1844 grep { /^[a-z]+_[a-z0-9]+(?:_[a-z0-9]+)?_variation_(?:\d+_)?\d+_/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1845
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1846 if(! @variation_dbs && $verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1847 print("No variation databases found\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1848 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1849
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1850 for my $variation_db (@variation_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1851
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1852 if ( index( $variation_db, 'collection' ) != -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1853 # Skip multi-species databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1854 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1855 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1856
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1857 my ( $species, $num ) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1858 ( $variation_db =~ /(^[a-z]+_[a-z0-9]+(?:_[a-z0-9]+)?)_variation_(?:\d+_)?(\d+)_/ );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1859 my $dba =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1860 Bio::EnsEMBL::Variation::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1861 -group => "variation",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1862 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1863 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1864 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1865 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1866 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1867 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1868 -dbname => $variation_db,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1869 -no_cache => $no_cache );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1870
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1871 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1872 printf( "%s loaded\n", $variation_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1873 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1874 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1875
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1876 # Register variation multispecies databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1877 my @variation_multidbs =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1878 grep { /^\w+_collection_variation_\w+$/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1879
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1880 foreach my $multidb (@variation_multidbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1881 my $sth = $dbh->prepare(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1882 sprintf( 'SELECT species_id, meta_value FROM %s.meta ',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1883 $dbh->quote_identifier($multidb) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1884 . "WHERE meta_key = 'species.db_name'"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1885 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1886
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1887 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1888
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1889 my ( $species_id, $species );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1890 $sth->bind_columns( \( $species_id, $species ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1891
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1892 while ( $sth->fetch() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1893 my $dba = Bio::EnsEMBL::Variation::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1894 -group => 'variation',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1895 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1896 -species_id => $species_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1897 -multispecies_db => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1898 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1899 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1900 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1901 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1902 -dbname => $multidb,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1903 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1904 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1905 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1906
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1907 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1908 printf( "Species '%s' (id:%d) loaded from database '%s'\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1909 $species, $species_id, $multidb );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1910 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1911 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1912 } ## end foreach my $multidb (@variation_multidbs)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1913 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1914
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1915 my $func_eval = eval "require Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1916 if ($@ or (!$func_eval)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1917 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1918 # Ignore funcgen DBs as code required not there for this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1919 print("Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor module not found "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1920 . "so functional genomics databases will be ignored if found\n"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1921 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1922 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1923 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1924 my @funcgen_dbs =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1925 grep { /^[a-z]+_[a-z0-9]+(?:_[a-z0-9]+)?_funcgen_(?:\d+_)?\d+_/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1926
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1927 if(! @funcgen_dbs && $verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1928 print("No funcgen databases found\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1929 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1930
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1931 for my $funcgen_db (@funcgen_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1932 if ( index( $funcgen_db, 'collection' ) != -1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1933 # Skip multi-species databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1934 next;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1935 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1936
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1937 my ( $species, $num ) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1938 ( $funcgen_db =~ /(^[a-z]+_[a-z0-9]+(?:_[a-z0-9]+)?)_funcgen_(?:\d+_)?(\d+)_/ );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1939 my $dba = Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1940 -group => "funcgen",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1941 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1942 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1943 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1944 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1945 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1946 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1947 -dbname => $funcgen_db,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1948 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1949 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1950
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1951 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1952 printf( "%s loaded\n", $funcgen_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1953 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1954 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1955
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1956 # Register functional genomics multispecies databases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1957 my @funcgen_multidbs =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1958 grep { /^\w+_collection_funcgen_\w+$/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1959
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1960 foreach my $multidb (@funcgen_multidbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1961 my $sth = $dbh->prepare(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1962 sprintf( 'SELECT species_id, meta_value FROM %s.meta ',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1963 $dbh->quote_identifier($multidb) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1964 . "WHERE meta_key = 'species.db_name'"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1965 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1966
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1967 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1968
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1969 my ( $species_id, $species );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1970 $sth->bind_columns( \( $species_id, $species ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1971
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1972 while ( $sth->fetch() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1973 my $dba = Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1974 -group => 'funcgen',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1975 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1976 -species_id => $species_id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1977 -multispecies_db => 1,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1978 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1979 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1980 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1981 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1982 -dbname => $multidb,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1983 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1984 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1985 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1986
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1987 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1988 printf( "Species '%s' (id:%d) loaded from database '%s'\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1989 $species, $species_id, $multidb );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1990 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1991 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1992 } ## end foreach my $multidb (@funcgen_multidbs)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1993 } ## end else [ if ($@) ]
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1994
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1995 # Compara
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1996
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1997 my @compara_dbs = grep { /^ensembl_compara/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1998
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1999 if (@compara_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2000 my $comp_eval = eval "require Bio::EnsEMBL::Compara::DBSQL::DBAdaptor";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2001 if ($@ or (!$comp_eval)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2002 # Ignore Compara as code required not there for this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2003 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2004 printf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2005 "Bio::EnsEMBL::Compara::DBSQL::DBAdaptor "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2006 . "not found so the following compara "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2007 . "databases will be ignored: %s\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2008 join( ', ', @compara_dbs ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2009 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2010 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2011 foreach my $compara_db (@compara_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2012 # Looking for EnsEMBL Genomes Comparas.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2013 # ensembl_compara_bacteria_2_53 is registered as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2014 # 'bacteria', ensembl_compara_pan_homology_2_53 is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2015 # registered as 'pan_homology', ensembl_compara_53 is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2016 # registered as 'multi', and the alias 'compara' still
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2017 # operates.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2018
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2019 my ($species) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2020 $compara_db =~ /^ensembl_compara_(\w+)(?:_\d+){2}$/xm;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2021
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2022 $species ||= 'multi';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2023
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2024 my $dba = Bio::EnsEMBL::Compara::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2025 -group => 'compara',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2026 -species => $species.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2027 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2028 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2029 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2030 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2031 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2032 -dbname => $compara_db,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2033 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2034 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2035
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2036 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2037 printf( "%s loaded\n", $compara_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2038 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2039 } ## end foreach my $compara_db (@compara_dbs)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2040 } ## end else [ if ($@)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2041 } elsif ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2042 print("No Compara databases found\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2043 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2044
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2045 # Ancestral sequences
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2046
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2047 my @ancestral_dbs =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2048 sort grep { /^ensembl_ancestral/ } @dbnames;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2049
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2050 if (@ancestral_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2051 my $ancestral_db = shift @ancestral_dbs;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2052
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2053 my $dba = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2054 -group => 'core',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2055 -species => 'Ancestral sequences'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2056 -host => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2057 -user => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2058 -pass => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2059 -port => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2060 -wait_timeout => $wait_timeout,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2061 -dbname => $ancestral_db,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2062 -no_cache => $no_cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2063 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2064
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2065 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2066 printf( "%s loaded\n", $ancestral_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2067
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2068 if (@ancestral_dbs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2069 # If we still had some more then report the problem.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2070 printf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2071 "Multiple ancestral databases found.\n"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2072 . "Ignoring the following: %s\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2073 join( ', ', @ancestral_dbs ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2074 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2075 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2076 } elsif ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2077 print("No ancestral database found\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2078 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2079
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2080 # Ontology
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2081
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2082 if ( defined($ontology_version) && $ontology_version != 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2083 require Bio::EnsEMBL::DBSQL::OntologyDBAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2084
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2085 my $dba =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2086 Bio::EnsEMBL::DBSQL::OntologyDBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2087 '-species' => 'multi' . $species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2088 '-group' => 'ontology',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2089 '-host' => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2090 '-port' => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2091 '-user' => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2092 '-pass' => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2093 '-dbname' => $ontology_db, );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2094
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2095 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2096 printf( "%s loaded\n", $ontology_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2097 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2098 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2099 elsif ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2100 print("No ontology database found\n");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2101 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2104 if ( defined($stable_ids_db) && $stable_ids_version != 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2106 my $dba =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2107 Bio::EnsEMBL::DBSQL::DBAdaptor->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2108 '-species' => 'multi' . $species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2109 '-group' => 'stable_ids',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2110 '-host' => $host,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2111 '-port' => $port,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2112 '-user' => $user,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2113 '-pass' => $pass,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2114 '-dbname' => $stable_ids_db, );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2116 if ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2117 printf( "%s loaded\n", $stable_ids_db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2118 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2120 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2122
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2123 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2124 -species => 'multi'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2125 -alias => ['compara'.$species_suffix] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2127 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2128 -species => 'multi'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2129 -alias => ['ontology'.$species_suffix] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2132 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2133 -species => 'multi'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2134 -alias => ['stable_ids'.$species_suffix] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2136 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2137 -species => 'Ancestral sequences'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2138 -alias => ['ancestral_sequences'.$species_suffix] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2139
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2140 # Register aliases as found in adaptor meta tables.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2142 $self->find_and_add_aliases( '-handle' => $dbh,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2143 '-species_suffix' => $species_suffix );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2145 $self->_additional_aliases($species_suffix);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2146
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2147 $dbh->disconnect();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2149 return $self->get_DBAdaptor_count() - $original_count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2151 } ## end sub load_registry_from_db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2154 # Used as a place to push "hack" aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2155 sub _additional_aliases {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2156 my ($self, $species_suffix) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2158 #Adding branch-68 thirteen-lined ground squirrel "old" aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2159 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2160 -species => 'ictidomys_tridecemlineatus'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2161 -alias => ['spermophilus_tridecemlineatus'.$species_suffix] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2162 Bio::EnsEMBL::Utils::ConfigRegistry->add_alias(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2163 -species => 'ictidomys_tridecemlineatus'.$species_suffix,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2164 -alias => ['spermophilus tridecemlineatus'.$species_suffix] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2165
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2166 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2167 } # end sub _additional_aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2169 =head2 _group_to_adaptor_class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2171 Arg [1] : The group you wish to decode to an adaptor class
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2172 Example : Bio::EnsEMBL::Registry->_group_to_adaptor_class('core');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2173 Description : Has an internal lookup of groups to their adaptor classes
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2174 Returntype : String
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2175 Exceptions : Thrown if the group is unknown
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2176 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2178 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2180 sub _group_to_adaptor_class {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2181 my ($self, $group) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2182 my $class = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2183 core => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2184 cdna => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2185 otherfeatures => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2186 rnaseq => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2187 vega => 'Bio::EnsEMBL::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2188 variation => 'Bio::EnsEMBL::Variation::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2189 funcgen => 'Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2190 compara => 'Bio::EnsEMBL::Compara::DBSQL::DBAdaptor',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2191 }->{$group};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2192 throw "Group '${group}' is unknown" if ! $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2193 return $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2194 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2196
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2197 =head2 find_and_add_aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2199 Arg [ADAPTOR] : (optional) Bio::EnsEMBL::DBSQL::DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2200 The adaptor to use to retrieve aliases from.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2202 Arg [GROUP] : (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2203 The group you want to find aliases for. If not
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2204 given assumes all types.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2205
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2206 Arg [HANDLE] : (optional) DBI database handle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2207 A connected database handle to use instead of
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2208 the database handles stored in the DBAdaptors.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2209 Bypasses the use of MetaContainer.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2211 Arg [SPECIES_SUFFIX]: (optional) string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2212 This option will append the string to the species
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2213 name in the registry for all databases.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2214
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2215 Example : Bio::EnsEMBL::Registry->find_and_add_aliases(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2216 -ADAPTOR => $dba,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2217 -GROUP => 'core'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2218 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2220 Description : Looks in the meta container for each database for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2221 an entry called "species.alias". If any are found
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2222 then the species adaptor is registered to that
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2223 set of aliases. This can work across any adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2224 which has a MetaContainer. If no MetaContainer
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2225 can be returned from a given adaptor then no alias
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2226 searching is performed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2228 Return type : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2229 Exceptions : Throws if an alias is found in more than one species.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2230 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2232 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2233
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2234 sub find_and_add_aliases {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2235 my $class = shift ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2237 my ($adaptor, $group, $dbh, $species_suffix ) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2238 rearrange( [ 'ADAPTOR', 'GROUP', 'HANDLE', 'SPECIES_SUFFIX' ], @_ );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2240 #Can be undef; needs to be something to avoid warnings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2241 $species_suffix ||= q{};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2242
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2243 my @dbas;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2244 if ( defined($adaptor) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2245 @dbas = ($adaptor);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2246 } elsif ( defined($dbh) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2248 if ( length($species_suffix) > 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2249 my @full = @{ $class->get_all_DBAdaptors( '-GROUP' => $group ) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2251 foreach my $db (@full) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2252 if ( $db->species =~ /$species_suffix/ ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2253 push( @dbas, $db );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2254 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2255 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2256
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2257 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2258 @dbas = @{ $class->get_all_DBAdaptors( '-GROUP' => $group ) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2259 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2260
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2261 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2262 @dbas = @{ $class->get_all_DBAdaptors( '-GROUP' => $group ) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2263 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2265 foreach my $dba (@dbas) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2266 my @aliases;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2267 my $species = $dba->species();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2268
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2269 if ( defined($dbh) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2270 my $dbname = $dba->dbc()->dbname();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2271 my $sth = $dbh->prepare( sprintf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2272 "SELECT meta_value FROM %s.meta "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2273 . "WHERE meta_key = 'species.alias' "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2274 . "AND species_id = ?",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2275 $dbh->quote_identifier($dbname) ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2276
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2277 # Execute, and don't care about errors (there will be errors for
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2278 # databases without a 'meta' table.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2279 $sth->{'PrintError'} = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2280 $sth->{'RaiseError'} = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2281 if ( !$sth->execute( $dba->species_id() ) ) { next }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2282 $sth->{'PrintError'} = $dbh->{'PrintError'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2283 $sth->{'RaiseError'} = $dbh->{'RaiseError'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2284
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2285 my $alias;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2286 $sth->bind_columns( \$alias );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2287 while ( $sth->fetch() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2288 push( @aliases, $alias );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2289 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2290 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2291 my $meta_container = eval { $dba->get_MetaContainer() };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2292
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2293 if ( defined($meta_container) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2294 push( @aliases,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2295 @{ $meta_container->list_value_by_key('species.alias') }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2296 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2297 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2299 # Need to disconnect so we do not spam the MySQL servers trying to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2300 # get aliases. Can only call disonnect if dbc was defined.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2301 if ( defined( $dba->dbc() ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2302 $dba->dbc()->disconnect_if_idle();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2303 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2304 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2306 foreach my $alias (@aliases) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2307 my $alias_suffix = $alias.$species_suffix;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2308 #Lowercase because stored aliases are lowercased
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2309 my $lc_species = lc($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2310 my $lc_alias_suffix = lc($alias_suffix);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2311 if ( !$class->alias_exists( $alias_suffix )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2312 && $lc_species ne $lc_alias_suffix )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2313 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2314 $class->add_alias( $species, $alias_suffix );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2315 } elsif (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2316 $lc_species ne $class->get_alias( $alias_suffix ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2317 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2318 $class->remove_alias( $species, $alias_suffix );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2319 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2320 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2321
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2322 } ## end foreach my $dba (@dbas)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2323 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2324 } ## end sub find_and_add_aliases
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2325
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2326
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2327 =head2 load_registry_from_multiple_dbs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2328
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2329 Arg [1] : Array of hashes, each hash being a set of arguments to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2330 load_registry_from_db() (see above).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2331
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2332 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2333
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2334 $registry->load_registry_from_multiple_dbs( {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2335 '-host' => 'ensembldb.ensembl.org',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2336 '-user' => 'anonymous',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2337 '-verbose' => '1'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2338 },
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2339 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2340 '-host' => 'server.example.com',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2341 '-user' => 'anonymouse',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2342 '-password' => 'cheese',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2343 '-verbose' => '1'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2344 } );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2346 Description: Will call load_registry_from_db() (see above)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2347 multiple times and merge the resulting registries
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2348 into one, effectively allowing a user to connect to
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2349 databases on multiple database servers from within
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2350 one program.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2351
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2352 If a database is found on more than one server, the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2353 first found instance of that database will be used.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2354
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2355 Returntype : Int count of the DBAdaptor instances which can be found in the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2356 registry
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2357
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2358 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2359
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2360 sub load_registry_from_multiple_dbs {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2361 my ( $self, @args ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2363 my $original_count = $self->get_DBAdaptor_count();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2365 my %merged_register = %registry_register;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2366
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2367 foreach my $arg (@args) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2368 local %registry_register = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2369
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2370 my $verbose;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2371
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2372 ($verbose) = rearrange( ['VERBOSE'], %{$arg} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2373
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2374 $self->load_registry_from_db( %{$arg} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2375
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2376 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2377 # Merge the localized %registry_register into %merged_register.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2378 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2379
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2380 # Merge the _SPECIES and _ALIAS sections of %registry_register.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2381 foreach my $section ( 'Species', 'Alias' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2382 my $section_key = '_' . uc($section);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2383
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2384 while ( my ( $key, $value ) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2385 each( %{ $registry_register{$section_key} } ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2386 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2387 if ( !exists( $merged_register{$section_key}{$key} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2388 $merged_register{$section_key}{$key} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2389 } elsif ($verbose) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2390 printf( "%s '%s' found on multiple servers, "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2391 . "using first found\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2392 $section, $key );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2393 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2394 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2395 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2396 } ## end foreach my $arg (@args)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2398 # Add the DBAs from the _SPECIES section into the _DBA section.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2399 foreach my $species_hash ( values( %{ $merged_register{_SPECIES} } ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2400 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2401 foreach my $group_hash ( values( %{$species_hash} ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2402 if ( ref($group_hash) eq 'HASH' && exists( $group_hash->{_DB} ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2403 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2404 push( @{ $merged_register{_DBA} }, $group_hash->{_DB} );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2405 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2406 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2407 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2409 %registry_register = %merged_register;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2410
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2411 return $self->get_DBAdaptor_count() - $original_count;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2412 } ## end sub load_registry_from_multiple_dbs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2413
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2414 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2415 # Web specific routines
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2416 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2418 =head2 DEPRECATED load_registry_with_web_adaptors
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2419
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2420 DEPRECATED: Use load_registry_from_db instead.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2421
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2422 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2423
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2424 sub load_registry_with_web_adaptors{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2425 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2426
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2427 deprecate('Use the load_registry_from_db instead');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2428 my $site_eval = eval{ require SiteDefs };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2429 if ($@ or (!defined($site_eval))){ die "Can't use SiteDefs.pm - $@\n"; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2430 SiteDefs->import(qw(:ALL));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2431
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2432 my $species_eval = eval{ require SpeciesDefs };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2433 if ($@ or (!defined($species_eval))){ die "Can't use SpeciesDefs.pm - $@\n"; }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2434 my $conf = new SpeciesDefs();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2435
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2436 my %species_alias = %{$SiteDefs::ENSEMBL_SPECIES_ALIASES};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2437
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2438 foreach my $spec (keys %species_alias){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2439 Bio::EnsEMBL::Registry->add_alias($species_alias{$spec},$spec);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2440 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2441 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2442 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2443
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2444 =head2 set_default_track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2445
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2446 Sets a flag to say that that this species/group are a default track and do not
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2447 need to be added as another web track.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2448
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2449 Arg [1] : name of the species to get the adaptors for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2450 Arg [2] : name of the type to get the adaptors for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2451 Example : $merged = Bio::EnsEMBL::Registry->set_default_track("Human","core");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2452 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2453 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2454 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2455
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2456 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2457
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2458 sub set_default_track {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2459 my ( $class, $species, $group ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2460
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2461 $species = get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2462 $registry_register{'def_track'}{$species}{ lc($group) } = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2463 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2464 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2465
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2466 =head2 default_track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2467
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2468 Check flag to see if this is a default track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2469
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2470 Arg [1] : name of the species to get the adaptors for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2471 Arg [2] : name of the type to get the adaptors for in the registry.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2472 Example : $merged = Bio::EnsEMBL::Registry->set_default_track("Human","core");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2473 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2474 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2475 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2476
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2477 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2478
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2479 sub default_track {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2480 my ( $class, $species, $group ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2481
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2482 $species = get_alias($species);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2483 if (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2484 defined( $registry_register{'def_track'}{$species}{ lc($group) } ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2485 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2486 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2487 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2488
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2489 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2490 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2491
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2492
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2493 =head2 add_new_tracks
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2494
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2495 Will add new gene tracks to the configuration of the WEB server if they are
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2496 not of the type default and the configuration already has genes in the display.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2497
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2498 Arg [1] : hash of the default configuration of the web page
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2499 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2500 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2501 Called by : UserConfig.pm
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2502 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2503
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2504 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2505
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2506 sub add_new_tracks{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2507 my($class, $conf, $pos) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2508
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2509 my $start = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2510 my $reg = $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2511 my $species_reg = $reg->get_alias($conf->{'species'},"nothrow");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2512 my %pars;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2513 # print STDERR "Species $species_reg check for default tracks\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2514 if(defined($species_reg)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2515 foreach my $dba (@{$reg->get_all_DBAdaptors()}){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2516 if(!$reg->default_track($dba->species,$dba->group)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2517 $pars{'available'} = "species ".$reg->get_alias($dba->species());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2518 $pars{'db_alias'} = $dba->group();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2519 # print STDERR "Adding new track for ".$dba->species."\t".$dba->group."\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2520 $conf->add_new_track_generictranscript('',$dba->group(), "black",$pos,%pars);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2521 $pos++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2522 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2523 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2524 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2525 return $pos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2526
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2527 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2528
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2529 =head2 no_version_check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2530
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2531 getter/setter for whether to run the version checking
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2532
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2533 Arg[0] : (optional) int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2534 Returntype : int or undef if not set
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2535 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2536 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2538 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2539
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2540 sub no_version_check {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2541 my ( $self, $arg ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2542 ( defined $arg )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2543 && ( $registry_register{'_no_version_check'} = $arg );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2544
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2545 return $registry_register{'_no_version_check'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2546 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2547
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2548 =head2 no_cache_warnings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2549
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2550 Arg[0] : boolean for turning the flag on and off
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2551 Description : Turns off any warnings about not using caching in all available
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2552 adaptors.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2553 Returntype : boolean Current status
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2554 Exceptions : None
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2555
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2556 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2557
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2558 sub no_cache_warnings {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2559 my ($self, $arg) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2560 if(defined $arg) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2561 $Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor::SILENCE_CACHE_WARNINGS = $arg;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2562 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2563 return $Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor::SILENCE_CACHE_WARNINGS;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2564 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2565
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2566
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2567 =head2 version_check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2568
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2569 run the database/API code version check for a DBAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2570
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2571 Arg[0] : DBAdaptor to check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2572 Returntype : int 1 if okay, 0 if not the same
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2573 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2574 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2575
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2576 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2577
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2578
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2579 sub version_check {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2580 my ( $self, $dba ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2581
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2582 # Check the datbase and versions match
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2583 # give warning if they do not.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2584 my $check = no_version_check();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2585
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2586 if ( (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2587 defined( $ENV{HOME} )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2588 and ( -e $ENV{HOME} . "/.ensemblapi_no_version_check" ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2589 or ( defined($check) and ( $check != 0 ) ) )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2590 {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2591 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2592 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2593
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2594 my $mca =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2595 $self->get_adaptor( $dba->species(), $dba->group(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2596 "MetaContainer" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2597
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2598 my $database_version = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2599 if ( defined($mca) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2600 $database_version = $mca->get_schema_version();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2601 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2602
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2603 if ( $database_version == 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2604 # Try to work out the version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2605 if ( $dba->dbc()->dbname() =~ /^_test_db_/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2606 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2607 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2608 if ( $dba->dbc()->dbname() =~ /(\d+)_\S+$/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2609 $database_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2610 } elsif ( $dba->dbc()->dbname() =~ /ensembl_compara_(\d+)/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2611 $database_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2612 } elsif ( $dba->dbc()->dbname() =~ /ensembl_help_(\d+)/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2613 $database_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2614 } elsif ( $dba->dbc()->dbname() =~ /ensembl_ontology_(\d+)/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2615 $database_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2616 } elsif ( $dba->dbc()->dbname() =~ /ensembl_stable_ids_(\d+)/x ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2617 $database_version = $1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2618 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2619 warn(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2620 sprintf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2621 "No database version for database %s "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2622 . ". You must be using a post version 34 database "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2623 . "with version 34 or later code.\n"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2624 . "You need to update your database "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2625 . "or use the appropriate Ensembl software release "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2626 . "to ensure your script does not crash\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2627 $dba->dbc()->dbname() ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2628 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2629 } ## end if ( $database_version...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2630
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2631 if ( $database_version != software_version() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2632 warn(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2633 sprintf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2634 "For %s there is a difference in the software release (%s) "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2635 . "and the database release (%s). "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2636 . "You should update one of these to ensure that your script "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2637 . "does not crash.\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2638 $dba->dbc()->dbname(),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2639 software_version(), $database_version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2640 ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2641 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2642 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2643
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2644 return 1; # Ok
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2645 } ## end sub version_check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2646
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2647
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2648 =head2 get_species_and_object_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2649
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2650 Description: Get the species name, object type (gene, transcript,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2651 translation, or exon etc.), and database type for a
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2652 stable ID.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2653
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2654 Arg [1] : String stable_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2655 The stable ID to find species and object type for.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2656
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2657 Arg [2] : String known_type (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2658 The type of the stable ID, if it is known.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2659
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2660 Arg [3] : String known_species (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2661 The species, if known
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2662
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2663 Arg [4] : String known_db_type (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2664 The database type, if known
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2665
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2666 Example : my $stable_id = 'ENST00000326632';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2667
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2668 my ( $species, $object_type, $db_type ) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2669 $registry->get_species_and_object_type($stable_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2670
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2671 my $adaptor =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2672 $registry->get_adaptor( $species, $db_type,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2673 $object_type );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2674
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2675 my $object = $adaptor->fetch_by_stable_id($stable_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2676
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2677 Return type: Array consisting of the species name, object type,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2678 and database type. The array may be empty if no
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2679 match is found.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2680
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2681 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2682 Status : At Risk.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2683
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2684 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2685
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2686 my %stable_id_stmts = (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2687 gene => 'SELECT m.meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2688 . 'FROM %1$s.gene '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2689 . 'JOIN %1$s.seq_region USING (seq_region_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2690 . 'JOIN %1$s.coord_system USING (coord_system_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2691 . 'JOIN %1$s.meta m USING (species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2692 . 'WHERE stable_id = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2693 . 'AND m.meta_key = "species.production_name"',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2694 transcript => 'SELECT m.meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2695 . 'FROM %1$s.transcript '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2696 . 'JOIN %1$s.seq_region USING (seq_region_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2697 . 'JOIN %1$s.coord_system USING (coord_system_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2698 . 'JOIN %1$s.meta m USING (species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2699 . 'WHERE stable_id = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2700 . 'AND m.meta_key = "species.production_name"',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2701 exon => 'SELECT m.meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2702 . 'FROM %1$s.exon '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2703 . 'JOIN %1$s.seq_region USING (seq_region_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2704 . 'JOIN %1$s.coord_system USING (coord_system_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2705 . 'JOIN %1$s.meta m USING (species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2706 . 'WHERE stable_id = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2707 . 'AND m.meta_key = "species.production_name"',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2708 translation => 'SELECT m.meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2709 . 'FROM %1$s.translation tl '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2710 . 'JOIN %1$s.transcript USING (transcript_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2711 . 'JOIN %1$s.seq_region USING (seq_region_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2712 . 'JOIN %1$s.coord_system USING (coord_system_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2713 . 'JOIN %1$s.meta m USING (species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2714 . 'WHERE tl.stable_id = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2715 . 'AND m.meta_key = "species.production_name"',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2716 operon => 'SELECT m.meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2717 . 'FROM %1$s.operon '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2718 . 'JOIN %1$s.seq_region USING (seq_region_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2719 . 'JOIN %1$s.coord_system USING (coord_system_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2720 . 'JOIN %1$s.meta m USING (species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2721 . 'WHERE stable_id = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2722 . 'AND m.meta_key = "species.production_name"',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2723 operontranscript => 'SELECT m.meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2724 . 'FROM %1$s.operon_transcript '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2725 . 'JOIN %1$s.seq_region USING (seq_region_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2726 . 'JOIN %1$s.coord_system USING (coord_system_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2727 . 'JOIN %1$s.meta m USING (species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2728 . 'WHERE stable_id = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2729 . 'AND m.meta_key = "species.production_name"',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2730
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2731 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2732
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2733
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2734 sub get_species_and_object_type {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2735 my ($self, $stable_id, $known_type, $known_species, $known_db_type) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2736
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2737 #get the stable_id lookup database adaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2738 my $stable_ids_dba = $self->get_DBAdaptor("multi", "stable_ids", 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2739
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2740 if ($stable_ids_dba) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2741
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2742 my $statement = 'SELECT name, object_type, db_type FROM stable_id_lookup join species using(species_id) WHERE stable_id = ?';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2743
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2744 if ($known_species) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2745 $statement .= ' AND name = ?';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2746 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2747 if ($known_db_type) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2748 $statement .= ' AND db_type = ?';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2749 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2750 if ($known_type) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2751 $statement .= ' AND object_type = ?';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2752 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2753
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2754 my $sth = $stable_ids_dba->dbc()->prepare($statement);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2755 $sth->bind_param(1, $stable_id, SQL_VARCHAR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2756 my $param_count = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2757 if ($known_species) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2758 $param_count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2759 $sth->bind_param($param_count, $known_species, SQL_VARCHAR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2760 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2761 if ($known_db_type) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2762 $param_count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2763 $sth->bind_param($param_count, $known_db_type, SQL_VARCHAR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2764 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2765 if ($known_type) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2766 $param_count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2767 $sth->bind_param($param_count, $known_type, SQL_VARCHAR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2768 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2769 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2770 my ($species, $type, $db_type) = $sth->fetchrow_array();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2771 return ($species ,$type, $db_type);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2772
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2773 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2774
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2775 if (defined $known_type && !exists $stable_id_stmts{lc $known_type}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2776 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2777 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2778
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2779 my @types = defined $known_type ? ($known_type) : ('Gene', 'Transcript', 'Translation', 'Exon', 'Operon', 'OperonTranscript');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2780
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2781 if ($known_db_type && $known_db_type ne 'core' && $known_db_type ne 'Core' ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2782 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2783 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2784
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2785 my %get_adaptors_args;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2786 $get_adaptors_args{'-group'} = 'Core';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2787 if ($known_species) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2788 $get_adaptors_args{'-species'} = $known_species;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2789 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2790
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2791 my @dbas = sort { $a->dbc->host cmp $b->dbc->host || $a->dbc->port <=> $b->dbc->port }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2792 @{$self->get_all_DBAdaptors(%get_adaptors_args)};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2793 foreach my $dba (@dbas) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2794
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2795 foreach my $type (@types) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2796 my $statement = sprintf $stable_id_stmts{lc $type}, $dba->dbc->dbname;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2797
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2798 my $sth = $dba->dbc()->prepare($statement);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2799 $sth->bind_param(1, $stable_id, SQL_VARCHAR);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2800 $sth->execute;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2801
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2802 my $species = $sth->fetchall_arrayref->[0][0];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2803
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2804 $sth->finish;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2805
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2806 return ($species, $type, 'Core') if defined $species;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2807 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2808
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2809 } ## end foreach my $dba ( sort { $a...})
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2810
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2811 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2812
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2813 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2814 } ## end sub get_species_and_object_type
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2815
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2816 1;