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