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

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::DBSQL::BaseMetaContainer - Encapsulates all generic access
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 to database meta information
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 my $meta_container = $db_adaptor->get_MetaContainer();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 my @mapping_info =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 @{ $meta_container->list_value_by_key('assembly.mapping') };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 An object that encapsulates access to db meta data
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 package Bio::EnsEMBL::DBSQL::BaseMetaContainer;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 use Bio::EnsEMBL::DBSQL::BaseAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 use Bio::EnsEMBL::Utils::Exception qw(throw deprecate warning);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseAdaptor);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 # new() is inherited from Bio::EnsEMBL::DBSQL::BaseAdaptor
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 =head2 get_schema_version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 Arg [1] : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 Example : $schema_ver = $meta_container->get_schema_version();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 Description: Retrieves the schema version from the database meta table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 Returntype : int
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 Caller : ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 Status : Medium risk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 sub get_schema_version {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 my $arrRef = $self->list_value_by_key('schema_version');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 if (@$arrRef) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 my ($ver) = ( $arrRef->[0] =~ /^\s*(\d+)\s*$/ );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 if ( !defined($ver) ) { # old style format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 return $ver;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 warning(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 sprintf(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 "Please insert meta_key 'schema_version' "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 . "in meta table on core database '%s'\n",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 $self->dbc()->dbname() ) );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 =head2 list_value_by_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 the key to obtain values from the meta table with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 Example : my @values = @{ $meta_container->list_value_by_key($key) };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 Description: gets a value for a key. Can be anything
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 Returntype : listref of strings
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 Caller : ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 sub list_value_by_key {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 my ( $self, $key ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 $self->{'cache'} ||= {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 if ( exists $self->{'cache'}->{$key} ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 return $self->{'cache'}->{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 my $sth;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 if ( !$self->_species_specific_key($key) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 $self->prepare( "SELECT meta_value "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 . "FROM meta "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 . "WHERE meta_key = ? "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 . "AND species_id IS NULL "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 . "ORDER BY meta_id" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 $self->prepare( "SELECT meta_value "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 . "FROM meta "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 . "WHERE meta_key = ? "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 . "AND species_id = ? "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 . "ORDER BY meta_id" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 $sth->bind_param( 2, $self->species_id(), SQL_INTEGER );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 $sth->bind_param( 1, $key, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 my @result;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 while ( my $arrRef = $sth->fetchrow_arrayref() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 push( @result, $arrRef->[0] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 $sth->finish();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 $self->{'cache'}->{$key} = \@result;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 return \@result;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 } ## end sub list_value_by_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 =head2 single_value_by_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 the key to obtain values from the meta table with
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Arg [2] : boolean $warn
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 If true will cause the code to warn the non-existence of a value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 Example : my $value = $mc->single_value_by_key($key);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 Description: Gets a value for a key. Can be anything
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 Returntype : Scalar
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 Exceptions : Raised if more than 1 meta item is returned
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 sub single_value_by_key {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 my ($self, $key, $warn) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 my $results = $self->list_value_by_key($key);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 if(defined $results) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 my $count = scalar(@{$results});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 if($count == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 my ($value) = @{$results};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 return $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 elsif($count == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 if($warn) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 my $group = $self->db()->group();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 my $msg = sprintf(qq{Please insert meta_key '%s' in meta table at %s db\n}, $key, $group);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 warning($msg);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 my $values = join(q{,}, @{$results});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 throw sprintf(q{Found the values [%s] for the key '%s'}, $values, $key);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 } ## end sub single_value_by_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 =head2 store_key_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 a key under which $value should be stored
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Arg [2] : string $value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 the value to store in the meta table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 Example : $meta_container->store_key_value($key, $value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 Description: stores a value in the meta container, accessable by a key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 Exceptions : Thrown if the key/value already exists.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 Caller : ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 sub store_key_value {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 my ( $self, $key, $value ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 if ( $self->key_value_exists( $key, $value ) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 warn( "Key-value pair '$key'-'$value' "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 . "already exists in the meta table; "
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 . "not storing duplicate" );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 my $sth;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 if ( !$self->_species_specific_key($key) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 $sth = $self->prepare(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 'INSERT INTO meta (meta_key, meta_value, species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 . 'VALUES(?, ?, \N)' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 $sth = $self->prepare(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 'INSERT INTO meta (meta_key, meta_value, species_id) '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 . 'VALUES (?, ?, ?)' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 $sth->bind_param( 3, $self->species_id(), SQL_INTEGER );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 $sth->bind_param( 1, $key, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 $sth->bind_param( 2, $value, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 $self->{'cache'} ||= {};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 delete $self->{'cache'}->{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 } ## end sub store_key_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 =head2 update_key_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 a key under which $value should be updated
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 Arg [2] : string $value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 the value to update in the meta table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 Example : $meta_container->update_key_value($key, $value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 Description: update a value in the meta container, accessable by a key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 Caller : ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 sub update_key_value {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 my ( $self, $key, $value ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 my $sth;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 if ( !$self->_species_specific_key($key) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 $self->prepare( 'UPDATE meta SET meta_value = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 . 'WHERE meta_key = ?'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 . 'AND species_id IS NULL' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 $self->prepare( 'UPDATE meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 . 'SET meta_value = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 . 'WHERE meta_key = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 . 'AND species_id = ?' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 $sth->bind_param( 3, $self->species_id(), SQL_INTEGER );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 $sth->bind_param( 1, $value, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 $sth->bind_param( 2, $key, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 } ## end sub update_key_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 =head2 delete_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 The key which should be removed from the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 Example : $meta_container->delete_key('sequence.compression');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 Description: Removes all rows from the meta table which have a meta_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 equal to $key.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 Caller : dna_compress script, general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 sub delete_key {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 my ( $self, $key ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 my $sth;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 if ( !$self->_species_specific_key($key) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 $self->prepare( 'DELETE FROM meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 . 'WHERE meta_key = ?'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 . 'AND species_id IS NULL' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 $self->prepare( 'DELETE FROM meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 . 'WHERE meta_key = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 . 'AND species_id = ?' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 $sth->bind_param( 2, $self->species_id(), SQL_INTEGER );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 $sth->bind_param( 1, $key, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 delete $self->{'cache'}->{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 =head2 delete_key_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 The key which should be removed from the database.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 Arg [2] : string $value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 The value to be removed.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 Example : $meta_container->delete_key('patch', 'patch_39_40_b.sql|xref_unique_constraint');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 Description: Removes all rows from the meta table which have a meta_key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 equal to $key, AND a meta_value equal to $value.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 Returntype : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 Caller : general
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 sub delete_key_value {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 my ( $self, $key, $value ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 my $sth;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 if ( !$self->_species_specific_key($key) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 $self->prepare( 'DELETE FROM meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 . 'WHERE meta_key = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 . 'AND meta_value = ?'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 . 'AND species_id IS NULL' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 $self->prepare( 'DELETE FROM meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 . 'WHERE meta_key = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 . 'AND meta_value = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 . 'AND species_id = ?' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 $sth->bind_param( 3, $self->species_id(), SQL_INTEGER );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342 $sth->bind_param( 1, $key, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 $sth->bind_param( 2, $value, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 delete $self->{'cache'}->{$key};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347 } ## end sub delete_key_value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349 =head2 key_value_exists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 Arg [1] : string $key
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 the key to check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 Arg [2] : string $value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 the value to check
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355 Example : if ($meta_container->key_value_exists($key, $value)) ...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356 Description: Return true (1) if a particular key/value pair exists,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 false (0) otherwise.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358 Returntype : boolean
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 Exceptions : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 Caller : ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361 Status : Stable
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 sub key_value_exists {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 my ( $self, $key, $value ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 my $sth;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 if ( !$self->_species_specific_key($key) ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 $self->prepare( 'SELECT meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 . 'FROM meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374 . 'WHERE meta_key = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 . 'AND meta_value = ?'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 . 'AND species_id IS NULL' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378 $sth =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 $self->prepare( 'SELECT meta_value '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380 . 'FROM meta '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 . 'WHERE meta_key = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382 . 'AND meta_value = ? '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 . 'AND species_id = ?' );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 $sth->bind_param( 3, $self->species_id(), SQL_INTEGER );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 $sth->bind_param( 1, $key, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388 $sth->bind_param( 2, $value, SQL_VARCHAR );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 $sth->execute();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 while ( my $arrRef = $sth->fetchrow_arrayref() ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 if ( $arrRef->[0] eq $value ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 $sth->finish();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 } ## end sub key_value_exists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 # This utility method determines whether the key is a species-specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 # meta key or not. If the key is either 'patch' or 'schema_version',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 # then it is not species-specific.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 # FIXME variation team messed up in release 65 and added the ploidy
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 # entry without species_id - this will be corrected for release 66,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 # for now, I've added it to the list of allowed non-species specific
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 sub _species_specific_key {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 my ( $self, $key ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 return ( $key ne 'patch'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 && $key ne 'schema_version'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 && $key ne 'schema_type'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 && $key ne 'ploidy');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 1;