annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/BaseAdaptor.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::DBSQL::BaseAdaptor - Base Adaptor for DBSQL adaptors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # base adaptor provides
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 # SQL prepare function
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $adaptor->prepare("sql statement");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 # get of root DBAdaptor object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 $adaptor->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 # constructor, ok for inheritence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 $adaptor = Bio::EnsEMBL::DBSQL::SubClassOfBaseAdaptor->new($dbobj)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 This is a true base class for Adaptors in the Ensembl DBSQL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 system. Original idea from Arne
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 Adaptors are expected to have the following functions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 $obj = $adaptor->fetch_by_dbID($internal_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 which builds the object from the primary key of the object. This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 function is crucial because it allows adaptors to collaborate relatively
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 independently of each other - in other words, we can change the schema
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 under one adaptor without too many knock on changes through the other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 adaptors.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 Most adaptors will also have
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 $dbid = $adaptor->store($obj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 which stores the object. Currently the storing of an object also causes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 the objects to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 $obj->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 correctly and attach the adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Other fetch functions go by the convention of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 @object_array = @{ $adaptor->fetch_all_by_XXXX($arguments_for_XXXX) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 sometimes it returns an array ref denoted by the 'all' in the name of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 the method, sometimes an individual object. For example
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 $gene = $gene_adaptor->fetch_by_stable_id($stable_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 @fp = @{ $simple_feature_adaptor->fetch_all_by_Slice($slice) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Occassionally adaptors need to provide access to lists of ids. In this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 case the convention is to go list_XXXX, such as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 @gene_ids = @{ $gene_adaptor->list_geneIds() };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 (note: this method is poorly named)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 package Bio::EnsEMBL::DBSQL::BaseAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 require Exporter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 use vars qw(@ISA @EXPORT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 use Bio::EnsEMBL::Utils::Exception qw(throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 use Bio::EnsEMBL::Utils::Scalar qw(assert_ref);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 use DBI qw(:sql_types);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 use Data::Dumper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 @ISA = qw(Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 @EXPORT = (@{$DBI::EXPORT_TAGS{'sql_types'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Arg [1] : Bio::EnsEMBL::DBSQL::DBConnection $dbobj
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Example : $adaptor = new AdaptorInheritedFromBaseAdaptor($dbobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Description: Creates a new BaseAdaptor object. The intent is that this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 constructor would be called by an inherited superclass either
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 automatically or through $self->SUPER::new in an overridden
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 new method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Returntype : Bio::EnsEMBL::DBSQL::BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 Caller : Bio::EnsEMBL::DBSQL::DBConnection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my ( $class, $dbobj ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my $self = bless {}, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 if ( !defined $dbobj || !ref $dbobj ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 throw("Don't have a db [$dbobj] for new adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 if ( $dbobj->isa('Bio::EnsEMBL::DBSQL::DBAdaptor') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $self->db($dbobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 $self->dbc( $dbobj->dbc );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 $self->species_id( $dbobj->species_id() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 $self->is_multispecies( $dbobj->is_multispecies() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 } elsif ( ref($dbobj) =~ /DBAdaptor$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 $self->db($dbobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $self->dbc( $dbobj->dbc );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 } elsif ( ref($dbobj) =~ /DBConnection$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 $self->dbc($dbobj);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 throw("Don't have a DBAdaptor [$dbobj] for new adaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 =head2 prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 Arg [1] : string $string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 a SQL query to be prepared by this adaptors database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Example : $sth = $adaptor->prepare("select yadda from blabla")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Description: provides a DBI statement handle from the adaptor. A convenience
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 function so you dont have to write $adaptor->db->prepare all the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Returntype : DBI::StatementHandle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Caller : Adaptors inherited from BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 sub prepare {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 my ( $self, $string ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 # Uncomment next line to cancel caching on the SQL side.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 # Needed for timing comparisons etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 #$string =~ s/SELECT/SELECT SQL_NO_CACHE/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 return $self->dbc->prepare($string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 =head2 db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 Arg [1] : (optional) Bio::EnsEMBL::DBSQL::DBAdaptor $obj
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 the database this adaptor is using.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 Example : $db = $adaptor->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Description: Getter/Setter for the DatabaseConnection that this adaptor is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 using.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Returntype : Bio::EnsEMBL::DBSQL::DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Caller : Adaptors inherited from BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 sub db {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $self->{'db'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 return $self->{'db'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 =head2 dbc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Arg [1] : (optional) Bio::EnsEMBL::DBSQL::DBConnection $obj
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 the database this adaptor is using.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Example : $db = $adaptor->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Description: Getter/Setter for the DatabaseConnection that this adaptor is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 using.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Returntype : Bio::EnsEMBL::DBSQL::DBConnection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Caller : Adaptors inherited from BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 sub dbc {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $self->{'dbc'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 return $self->{'dbc'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 =head2 is_multispecies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Arg [1] : (optional) boolean $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Example : if ($adaptor->is_multispecies()) { }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 Description: Getter/Setter for the is_multispecies boolean of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 to use for this adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 sub is_multispecies {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 my ( $self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 if ( defined($arg) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $self->{_is_multispecies} = $arg;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 return $self->{_is_multispecies};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 =head2 species_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Arg [1] : (optional) int $species_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 The internal ID of the species in a multi-species database.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Example : $db = $adaptor->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Description: Getter/Setter for the internal ID of the species in a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 multi-species database. The default species ID is 1.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 Returntype : Integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 Caller : Adaptors inherited from BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 sub species_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $self->{'species_id'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 return $self->{'species_id'} || 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 # list primary keys for a particular table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 # args are table name and primary key field
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 # if primary key field is not supplied, tablename_id is assumed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 # returns listref of IDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 sub _list_dbIDs {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my ( $self, $table, $pk, $ordered ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 if ( !defined($pk) ) { $pk = $table . "_id" }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 my $sql = sprintf( "SELECT %s FROM %s", $pk, $table );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $join_with_cs = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 if ( $self->is_multispecies()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 && $self->isa('Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 && !$self->isa('Bio::EnsEMBL::DBSQL::UnmappedObjectAdaptor') )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $sql .= q(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 JOIN seq_region USING (seq_region_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 JOIN coord_system cs USING (coord_system_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 WHERE cs.species_id = ?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $join_with_cs = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 if ( defined($ordered) && $ordered ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $sql .= " ORDER BY seq_region_id, seq_region_start";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 if ($join_with_cs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $sth->bind_param( 1, $self->species_id(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 eval { $sth->execute() };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 if ($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 throw("Detected an error whilst executing SQL '${sql}': $@");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $sth->bind_col( 1, \$id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 my @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 while ( $sth->fetch() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 push( @out, $id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 return \@out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 } ## end sub _list_dbIDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 # _straight_join
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 # Arg [1] : (optional) boolean $new_val
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 # Example : $self->_straight_join(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 # $self->generic_fetch($constraint);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 # $self->_straight_join(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 # Description: PROTECTED Getter/Setter that turns on/off the use of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 # a straight join in queries.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 # Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 # Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 sub _straight_join {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 if(@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 $self->{'_straight_join'} = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 return $self->{'_straight_join'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =head2 bind_param_generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Arg [1] : (optional) scalar $param
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 This is the parameter to bind
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Arg [2] : (optional) int $sql_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Type of the parameter (from DBI (:sql_types))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Example : $adaptor->bind_param_generic_fetch($stable_id,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $adaptor->generic_fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Description: When using parameters for the query, will call the bind_param to avoid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 some security issues. If there are no arguments, will return the bind_parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 ReturnType : listref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Exceptions: if called with one argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 sub bind_param_generic_fetch{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $param = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 my $sql_type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 if (defined $param && !defined $sql_type){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 throw("Need to specify sql_type for parameter $param\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 elsif (defined $param && defined $sql_type){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 #check when there is a SQL_INTEGER type that the parameter is really a number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 if ($sql_type eq SQL_INTEGER){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 throw "Trying to assign a non numerical parameter to an integer value in the database" if ($param !~ /^\d+$/);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 #both paramters have been entered, push it to the bind_param array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 push @{$self->{'_bind_param_generic_fetch'}},[$param,$sql_type];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 elsif (!defined $param && !defined $sql_type){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 #when there are no arguments, return the array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 return $self->{'_bind_param_generic_fetch'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 =head2 generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Arg [1] : (optional) string $constraint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 An SQL query constraint (i.e. part of the WHERE clause)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Arg [2] : (optional) Bio::EnsEMBL::AssemblyMapper $mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 A mapper object used to remap features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 as they are retrieved from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Arg [3] : (optional) Bio::EnsEMBL::Slice $slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 A slice that features should be remapped to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Example : $fts = $a->generic_fetch('contig_id in (1234, 1235)');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Description: Performs a database fetch and returns feature objects in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 contig coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Returntype : listref of Bio::EnsEMBL::SeqFeature in contig coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Exceptions : Thrown if there is an issue with querying the data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Caller : BaseFeatureAdaptor, ProxyDnaAlignFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 sub generic_fetch {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my ($self, $constraint, $mapper, $slice) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 my $sql = $self->_generate_sql($constraint);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my $params = $self->bind_param_generic_fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $params ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 $self->{_bind_param_generic_fetch} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 my $sth = $self->db()->dbc()->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 my $i = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 foreach my $param (@{$params}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 $sth->bind_param($i,$param->[0],$param->[1]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 eval { $sth->execute() };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 if ($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 throw("Detected an error whilst executing SQL '${sql}': $@");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 my $res = $self->_objs_from_sth($sth, $mapper, $slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 return $res;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 =head2 generic_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 Arg [1] : (optional) string $constraint
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 An SQL query constraint (i.e. part of the WHERE clause)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 Example : $number_feats = $a->generic_count('contig_id in (1234, 1235)');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 Description: Performs a database fetch and returns a count of those features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 found. This is analagous to C<generic_fetch()>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 Returntype : Integer count of the elements.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 Exceptions : Thrown if there is an issue with querying the data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 sub generic_count {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 my ($self, $constraint) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 my $sql = $self->_generate_sql($constraint, 'count(*)');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 my $params = $self->bind_param_generic_fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 $params ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $self->{_bind_param_generic_fetch} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 my $h = $self->db()->dbc()->sql_helper();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 my $count = $h->execute_single_result(-SQL => $sql, -PARAMS => $params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 return $count;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 sub _generate_sql {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my ($self, $constraint, @input_columns) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my @tabs = $self->_tables();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 my $extra_default_where;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 # Hack for feature types that needs to be restricted to species_id (in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 # coord_system).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 if ( $self->is_multispecies()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 && $self->isa('Bio::EnsEMBL::DBSQL::BaseFeatureAdaptor')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 && !$self->isa('Bio::EnsEMBL::DBSQL::UnmappedObjectAdaptor') )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 # We do a check to see if there is already seq_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 # and coord_system defined to ensure we get the right
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 # alias. We then do the extra query irrespectively of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 # what has already been specified by the user.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 my %thash = map { $_->[0] => $_->[1] } @tabs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 my $sr_alias =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 ( exists( $thash{seq_region} ) ? $thash{seq_region} : 'sr' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $cs_alias =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 ( exists( $thash{coord_system} ) ? $thash{coord_system} : 'cs' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 if ( !exists( $thash{seq_region} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 push( @tabs, [ 'seq_region', $sr_alias ] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 if ( !exists( $thash{coord_system} ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 push( @tabs, [ 'coord_system', $cs_alias ] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 $extra_default_where = sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 '%s.seq_region_id = %s.seq_region_id '
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 . 'AND %s.coord_system_id = %s.coord_system_id '
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 . 'AND %s.species_id = ?',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 $tabs[0]->[1], $sr_alias, $sr_alias,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $cs_alias, $cs_alias );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $self->bind_param_generic_fetch( $self->species_id(), SQL_INTEGER );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 } ## end if ( $self->is_multispecies...)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 @input_columns = $self->_columns() if ! @input_columns;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $columns = join(', ', @input_columns);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 # Construct a left join statement if one was defined, and remove the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 # left-joined table from the table list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 my @left_join_list = $self->_left_join();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 my $left_join_prefix = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 my $left_join = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my @tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 if(@left_join_list) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 my %left_join_hash = map { $_->[0] => $_->[1] } @left_join_list;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 while(my $t = shift @tabs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 my $t_alias = $t->[0] . " " . $t->[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 if( exists $left_join_hash{ $t->[0] } || exists $left_join_hash{$t_alias}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 my $condition = $left_join_hash{ $t->[0] };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $condition ||= $left_join_hash{$t_alias};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 my $syn = $t->[1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $left_join .=
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 "\n LEFT JOIN " . $t->[0] . " $syn ON $condition ) ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 $left_join_prefix .= '(';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 push @tables, $t;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 @tables = @tabs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 my $straight_join = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 if($self->_straight_join()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 $straight_join = "STRAIGHT_JOIN";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 #construct a nice table string like 'table1 t1, table2 t2'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my $tablenames = join(', ', map({ join(' ', @$_) } @tables));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 my $sql =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 "SELECT $straight_join $columns\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 . "FROM $left_join_prefix ($tablenames) $left_join";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 my $default_where = $self->_default_where_clause();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 my $final_clause = $self->_final_clause;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 if ($extra_default_where) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 if ($default_where) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $default_where .= "\n AND $extra_default_where";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $default_where = $extra_default_where;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 #append a where clause if it was defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 if ($constraint) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 $sql .= "\n WHERE $constraint ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 if ($default_where) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 $sql .= " AND\n $default_where ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 } elsif ($default_where) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $sql .= "\n WHERE $default_where ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 #append additional clauses which may have been defined
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 $sql .= "\n$final_clause";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 # FOR DEBUG:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 #printf(STDERR "SQL:\n%s\n", $sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 return $sql;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 =head2 fetch_by_dbID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 Arg [1] : int $id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 The unique database identifier for the feature to be obtained
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 Example : $feat = $adaptor->fetch_by_dbID(1234));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 $feat = $feat->transform('contig');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Description: Returns the feature created from the database defined by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 the id $id. The feature will be returned in its native
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 coordinate system. That is, the coordinate system in which it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 is stored in the database. In order to convert it to a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 particular coordinate system use the transfer() or transform()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 method. If the feature is not found in the database then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 undef is returned instead
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 Returntype : Bio::EnsEMBL::Feature or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 Exceptions : thrown if $id arg is not provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 does not exist
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 sub fetch_by_dbID{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 my ($self,$id) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 throw("id argument is required") if(!defined $id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 #construct a constraint like 't1.table1_id = 123'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 my @tabs = $self->_tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 my ($name, $syn) = @{$tabs[0]};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 $self->bind_param_generic_fetch($id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 my $constraint = "${syn}.${name}_id = ?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 #Should only be one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 my ($feat) = @{$self->generic_fetch($constraint)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 return undef if(!$feat);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 return $feat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 =head2 fetch_all_by_dbID_list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 Arg [1] : listref of integers $id_list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 The unique database identifiers for the features to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 be obtained.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 Arg [2] : optional - Bio::EnsEMBL::Slice to map features onto.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 Example : @feats = @{$adaptor->fetch_all_by_dbID_list([1234, 2131, 982]))};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 Description: Returns the features created from the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 defined by the the IDs in contained in the provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 ID list $id_list. The features will be returned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 in their native coordinate system. That is, the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 coordinate system in which they are stored in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 database. In order to convert the features to a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 particular coordinate system use the transfer() or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 transform() method. If none of the features are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 found in the database a reference to an empty list is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 returned.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 Returntype : listref of Bio::EnsEMBL::Features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 Exceptions : thrown if $id arg is not provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 does not exist
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 sub fetch_all_by_dbID_list {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 my ( $self, $id_list_ref, $slice ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 if ( !defined($id_list_ref) || ref($id_list_ref) ne 'ARRAY' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 throw("id_list list reference argument is required");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 if ( !@{$id_list_ref} ) { return [] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 # Construct a constraint like 't1.table1_id = 123'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 my @tabs = $self->_tables();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 my ( $name, $syn ) = @{ $tabs[0] };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 # Ensure that we do not exceed MySQL's max_allowed_packet (defaults to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 # 1 MB) splitting large queries into smaller queries of at most 256 KB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 # (32768 8-bit characters). Assuming a (generous) average dbID string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 # length of 16, this means 2048 dbIDs in each query.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 my $max_size = 2048;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 my %id_list;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 $id_list{$_}++ for @{$id_list_ref};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 my @id_list = keys %id_list;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 my @out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 while (@id_list) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 my @ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 my $id_str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 if ( scalar(@id_list) > $max_size ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 @ids = splice( @id_list, 0, $max_size );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 @ids = @id_list;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 @id_list = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 if ( scalar(@ids) > 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 $id_str = " IN (" . join( ',', @ids ) . ")";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 $id_str = " = " . $ids[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 my $constraint = "${syn}.${name}_id $id_str";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 push @out, @{ $self->generic_fetch($constraint, undef, $slice) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 return \@out;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 } ## end sub fetch_all_by_dbID_list
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 # might not be a good idea, but for convenience
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 # shouldnt be called on the BIG tables though
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 sub fetch_all {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 return $self->generic_fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 =head2 last_insert_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 Arg [1] : (optional) $field the name of the field the inserted ID was pushed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 Arg [2] : (optional) HashRef used to pass extra attributes through to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 DBD driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 Arg [3] : (optional) $table the name of the table to use if the adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 does not implement C<_tables()>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 Description : Delegating method which uses DBI to extract the last inserted
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 identifier. If using MySQL we just call the DBI method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 L<DBI::last_insert_id()> since MySQL ignores any extra
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 arguments. See L<DBI> for more information about this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 delegated method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 Example : my $id = $self->last_insert_id('my_id'); my $other_id = $self->last_insert_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 Returntype : Scalar or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 sub last_insert_id {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 my ($self, $field, $attributes, $table) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 my $dbc = $self->dbc();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 my $dbh = $dbc->db_handle();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 my @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 if($dbc->driver() eq 'mysql') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 @args = (undef,undef,undef,undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 if(!$table) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 ($table) = $self->_tables();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 @args = (undef, $dbc->dbname(), $table->[0], $field);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 $attributes ||= {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 return $dbh->last_insert_id(@args, $attributes);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 #_tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 # Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 # Example : $tablename = $self->_table_name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 # Description: ABSTRACT PROTECTED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 # Subclasses are responsible for implementing this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 # method. It should list of [tablename, alias] pairs.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 # Additionally the primary table (with the dbID,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 # analysis_id, and score) should be the first table in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 # the list. e.g:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 # ( ['repeat_feature', 'rf'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 # ['repeat_consensus', 'rc']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 # used to obtain features.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 # Returntype : list of [tablename, alias] pairs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 # Exceptions : thrown if not implemented by subclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 # Caller : BaseFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 throw( "abstract method _tables not defined "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 . "by implementing subclass of BaseAdaptor" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 #_columns
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 # Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 # Example : $tablename = $self->_columns()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 # Description: ABSTRACT PROTECTED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 # Subclasses are responsible for implementing this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 # method. It should return a list of columns to be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 # used for feature creation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 # Returntype : list of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 # Exceptions : thrown if not implemented by subclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 # Caller : BaseFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 sub _columns {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 throw( "abstract method _columns not defined "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 . "by implementing subclass of BaseAdaptor" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 # _default_where_clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 # Description: May be overridden to provide an additional where
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 # constraint to the SQL query which is generated to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 # fetch feature records. This constraint is always
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 # appended to the end of the generated where clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 # Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 # Caller : generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 sub _default_where_clause { return '' }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 # _left_join
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 # Description: Can be overridden by a subclass to specify any left
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 # joins which should occur. The table name specigfied
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 # in the join must still be present in the return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 # values of.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 # Returntype : a {'tablename' => 'join condition'} pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 # Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 sub _left_join { return () }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 #_final_clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 # Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 # Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 # Description: May be overriden to provide an additional clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 # to the end of the SQL query used to fetch feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 # records. This is useful to add a required ORDER BY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 # clause to the query for example.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 # Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 # Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 # Caller : generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 sub _final_clause { return '' }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 #_objs_from_sth
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 # Arg [1] : DBI::row_hashref $hashref containing key-value pairs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 # for each of the columns specified by the _columns method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 # Example : my @feats = $self->_obj_from_hashref
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 # Description: ABSTRACT PROTECTED
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 # The subclass is responsible for implementing this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 # method. It should take in a DBI row hash reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 # and return a list of created features in contig
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 # coordinates.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 # Returntype : list of Bio::EnsEMBL::*Features in contig coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 # Exceptions : thrown if not implemented by subclass
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 # Caller : BaseFeatureAdaptor::generic_fetch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 sub _objs_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 throw( "abstract method _objs_from_sth not defined "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 . "by implementing subclass of BaseAdaptor" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 sub dump_data {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 my $data = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 my $dumper = Data::Dumper->new([$data]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 $dumper->Indent(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 $dumper->Terse(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 my $dump = $dumper->Dump();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 # $dump =~ s/'/\\'/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 # $dump =~ s/^\$VAR1 = //;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 return $dump;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 sub get_dumped_data {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 my $data = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 $data =~ s/\n|\r|\f|\\//g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848 return eval ($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 1;