annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/DataFileAdaptor.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 package Bio::EnsEMBL::DBSQL::DataFileAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 =pod
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 Bio::EnsEMBL::DBSQL::DataFileAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $dfa = $dba->get_DataFileAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $file = $dfa->fetch_by_dbID(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $files = $dfa->fetch_all();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my $logic_name_files = $dfa->fetch_all_by_logic_name('bam_alignments');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 Provides a database wrapper to store the locations of files and to pull these
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 records back out. DataFile objects can only provide basic information but they
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 can return an intended external database adaptor which can be used to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 parse the information. This system assumes nothing about the file just that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 your parser can access it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 Files are supported over any protocol your parser supports and locations can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 made absolute, built on the fly or versioned.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use base qw/Bio::EnsEMBL::DBSQL::BaseAdaptor/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::DataFile;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use Bio::EnsEMBL::DBSQL::BaseAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use Bio::EnsEMBL::Utils::Exception qw/throw warning deprecate/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 use Bio::EnsEMBL::Utils::Scalar qw/:assert/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 my $GLOBAL_BASE_PATH;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 =head2 global_base_path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Arg[1] : String; base path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Example : Bio::EnsEMBL::DBSQL::DataFileAdaptor->global_base_path('/base/path');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Description : Stores a global value to be used when building data file paths
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 sub global_base_path {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 my ($class, $base_path) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 return $GLOBAL_BASE_PATH unless $base_path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 $GLOBAL_BASE_PATH = $base_path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 return $GLOBAL_BASE_PATH;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =head2 get_base_path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Arg[1] : String; (optional) base path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Example : $dfa->get_base_path();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Description : If given the path it will return that path; if not it consults
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 $self->global_base_path() for a value. As a last resort
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 it will look at the meta table for an entry keyed by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 B<data_file.base_path>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Exceptions : Thrown if nothing is found after consulting all three locations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 sub get_base_path {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 my ($self, $path) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 return $path if defined $path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 my $global_base_path = $self->global_base_path();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 return $global_base_path if defined $global_base_path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 my $meta_base_path = $self->db()->get_MetaContainer()->single_value_by_key('data_file.base_path', 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 return $meta_base_path if defined $meta_base_path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 throw "No base path discovered. Either provide a path, set a global using global_base_path() or specify 'data_file.base_path' in meta";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 =head2 DataFile_to_extension
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Deprecated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Arg[1] : Bio::EnsEMBL::DataFile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Example : my $ext = $dfa->DataFile_to_extension($bam_df);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Description : Returns an expected extension for the given DataFile type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Returntype : Scalar of the expected file extension
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Exceptions : Raised if the given file type is not understood
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 sub DataFile_to_extension {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my ($self, $df) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 deprecate("Use DataFile_to_extensions() instead");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $extensions = $self->DataFile_to_extensions($df);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 return $extensions->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 =head2 DataFile_to_extensions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Arg[1] : Bio::EnsEMBL::DataFile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Example : my $exts = $dfa->DataFile_to_extensions($bam_df);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 Description : Returns all expected extensions for the given DataFile type. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 first returned is the default extension
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Exceptions : Raised if the given file type is not understood
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 sub DataFile_to_extensions {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 my ($self, $df) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my $type = $df->file_type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my $extensions = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 BAM => ['bam', 'bam.bai'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 # BIGBED => 'bb',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 BIGWIG => ['bw'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 VCF => ['vcf.gz', 'vcf.gz.tbi'],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 }->{$type};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 throw sprintf(q{No extensions found for the type '%s'}, $type ) if ! $extensions;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 return $extensions;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 =head2 DataFile_to_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Arg[1] : Bio::EnsEMBL::DataFile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Arg[2] : (optional) base path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 Example : my $bam = $dfa->DataFile_to_adaptor($bam_df);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Description : Returns an adaptor instance which will access the given DataFile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Returntype : Scalar actual return depends upon the given file type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 Exceptions : Raised if the given file type is not understood
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 sub DataFile_to_adaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 my ($self, $df, $base) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 my $type = $df->file_type();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 my $dispatch = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 BAM => sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 require Bio::EnsEMBL::ExternalData::BAM::BAMAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 return Bio::EnsEMBL::ExternalData::BAM::BAMAdaptor->new($df->path($base));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 BIGBED => sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 require Bio::EnsEMBL::ExternalData::BigFile::BigBedAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 return Bio::EnsEMBL::ExternalData::BigFile::BigBedAdaptor->new($df->path($base));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 BIGWIG => sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 require Bio::EnsEMBL::ExternalData::BigFile::BigWigAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 return Bio::EnsEMBL::ExternalData::BigFile::BigWigAdaptor->new($df->path($base));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 VCF => sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 require Bio::EnsEMBL::ExternalData::VCF::VCFAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 return Bio::EnsEMBL::ExternalData::VCF::VCFAdaptor->new($df->path($base));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 }->{$type};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 throw sprintf(q{No handler found for the type '%s'}, $type ) if ! $dispatch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 return $dispatch->();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 =head2 fetch_all_by_logic_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 Args [1] : String $logic_name for the linked analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 Example : my $dfs = $dfa->fetch_all_by_logic_name('bam_alignments');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 Description : Returns all DataFile entries linked to the given analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 logic name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Returntype : ArrayRef contains Bio::EnsEMBL::DataFile instances
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Exceptions : Thrown if logic name does not exist
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 sub fetch_all_by_logic_name {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my ($self, $logic_name) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my $analysis = $self->db()->get_AnalysisAdaptor()->fetch_by_logic_name($logic_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 throw "No analysis found for logic_name '${logic_name}'" if ! $analysis;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 return $self->fetch_all_by_Analysis($analysis);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 =head2 fetch_all_by_Analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 Args [1] : Bio::EnsEMBL::Analysis $analysis to look up by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Example : my $dfs = $dfa->fetch_all_by_Analysis($analysis);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 Description : Returns all DataFile entries linked to the given analysis
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 Returntype : ArrayRef contains Bio::EnsEMBL::DataFile instances
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 sub fetch_all_by_Analysis {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 my ($self, $analysis) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 assert_ref($analysis, 'Bio::EnsEMBL::Analysis', 'analysis');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 $self->bind_param_generic_fetch($analysis->dbID(), SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 return $self->generic_fetch('df.analysis_id =?');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 =head2 fetch_all_by_CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Args [1] : Bio::EnsEMBL::CoordSystem $coord_system to look up by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 Example : my $dfs = $dfa->fetch_all_by_CoordSystem($cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 Description : Returns all DataFile entries linked to the given coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 system. Does B<not> support I<toplevel>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 Returntype : ArrayRef contains Bio::EnsEMBL::DataFile instances
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 sub fetch_all_by_CoordSystem {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 my ($self, $cs) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 assert_ref($cs, 'Bio::EnsEMBL::CoordSystem', 'coord_system');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 $self->bind_param_generic_fetch($cs->dbID(), SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 return $self->generic_fetch('df.coord_system_id =?');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 sub fetch_by_name_and_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 my ($self, $name, $type) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $self->bind_param_generic_fetch($name, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $self->bind_param_generic_fetch($type, SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 my $results = $self->generic_fetch('df.name =? and df.file_type =?');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 return $results->[0] if @{$results};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 sub generic_fetch {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 my ($self, $constraint) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $constraint ||= q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 my $sql = <<'SQL';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 select df.data_file_id, df.coord_system_id, df.analysis_id, df.name, df.version_lock, df.absolute, df.url, df.file_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 from data_file df
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 join coord_system cs using (coord_system_id)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 where cs.species_id =?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 SQL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $sql .= 'AND '.$constraint if $constraint;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my $params = $self->bind_param_generic_fetch();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 if(defined $params) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $self->{'_bind_param_generic_fetch'} = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 $params = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 unshift(@{$params}, $self->db()->species_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my $csa = $self->db()->get_CoordSystemAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my $aa = $self->db()->get_AnalysisAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 return $self->dbc()->sql_helper()->execute(-SQL => $sql, -PARAMS => $params, -CALLBACK => sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 my ($row) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 my ($data_file_id, $coord_system_id, $analysis_id, $name, $version_lock, $absolute, $url, $file_type) = @{$row};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my $hash = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 dbID => $data_file_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 adaptor => $self,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 coord_system => $csa->fetch_by_dbID($coord_system_id),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 analysis => $aa->fetch_by_dbID($analysis_id),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 name => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 version_lock => $version_lock,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 absolute => $absolute,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 file_type => $file_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $hash->{url} = $url if $url;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 return Bio::EnsEMBL::DataFile->new_fast($hash);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 sub store {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 my ($self, $df) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 assert_ref($df, 'Bio::EnsEMBL::DataFile', 'datafile');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 if ($df->is_stored($self->db())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 return $df->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 throw 'Analysis is not defined for this data file' if ! defined $df->analysis();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 throw 'Coord system is not defined for this data file' if ! defined $df->coord_system();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $sql = <<'SQL';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 INSERT INTO data_file (coord_system_id, analysis_id, name, version_lock, absolute, url, file_type)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 VALUES (?,?,?,?,?,?,?)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 SQL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 my $params = [
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 [$df->coord_system()->dbID(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 [$df->analysis()->dbID(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 [$df->name(), SQL_VARCHAR],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 [$df->version_lock(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 [$df->absolute(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 [$df->url(), SQL_VARCHAR],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 [$df->file_type(), SQL_VARCHAR],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $self->dbc()->sql_helper()->execute_update(-SQL => $sql, -PARAMS => $params, -CALLBACK => sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 my ( $sth, $dbh ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 $df->dbID($self->last_insert_id());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $df->adaptor($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 return $df->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 sub update {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my ($self, $df) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 assert_ref($df, 'Bio::EnsEMBL::DataFile', 'datafile');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 if (! $df->is_stored($self->db())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $self->store($df);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 my $sql = <<'SQL';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 UPDATE data_file SET coord_system_id =?, analysis_id=?, name=?, version_lock=?, absolute=?, url=?, file_type=?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 WHERE data_file_id =?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 SQL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $params = [
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 [$df->coord_system()->dbID(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 [$df->analysis()->dbID(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 [$df->name(), SQL_VARCHAR],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 [$df->version_lock(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 [$df->absolute(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 [$df->url(), SQL_VARCHAR],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 [$df->file_type(), SQL_VARCHAR],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 [$df->dbID(), SQL_INTEGER],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 $self->dbc()->sql_helper()->execute_update(-SQL => $sql, -PARAMS => $params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 sub delete {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 my ($self, $df) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 assert_ref($df, 'Bio::EnsEMBL::DataFile', 'datafile');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 if (! $df->is_stored($self->db())) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 throw "Cannot delete the data file if it has not already been stored in this database";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 $self->dbc()->sql_helper()->execute_update(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 -SQL => 'DELETE from data_file where data_file_id =?',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 -PARAMS => [[$df->dbID(), SQL_INTEGER]],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 sub _tables {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 return (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 [qw/data_file df/]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 1;