annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/AttributeAdaptor.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::AttributeAdaptor - Provides database interaction for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 Bio::EnsEMBL::Attribute objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
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 # $db is a Bio::EnsEMBL::DBSQL::DBAdaptor object:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $attribute_adaptor = $db->get_AttributeAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 $attributes = $attribute_adaptor->fetch_all_by_MiscFeature($feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 $attributes = $attribute_adaptor->fetch_all_by_Slice($slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 $attribute_adaptor->store_on_Slice( $slice, \@attributes );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $attribute_adaptor->store_on_MiscFeature( $misc_feature,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 \@attributes )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 package Bio::EnsEMBL::DBSQL::AttributeAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use Bio::EnsEMBL::DBSQL::BaseAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use Bio::EnsEMBL::Attribute;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 @ISA = qw(Bio::EnsEMBL::DBSQL::BaseAdaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Arg [...] : Superclass args. See Bio::EnsEMBL::DBSQL::BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Description: Instantiates a Bio::EnsEMBL::DBSQL::AttributeAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Returntype : Bio::EnsEMBL::AttributeAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Caller : DBAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 # cache creation could go here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 use vars '$AUTOLOAD';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 sub AUTOLOAD {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 my @array_return=();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 my $ref_return = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 $AUTOLOAD =~ /^.*::(\w+_)+(\w+)$/ ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 my $sub = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 my $type = $2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 # print STDERR "AUTO".$AUTOLOAD."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 # print STDERR "AUTOLOAD reached with call to $sub of type $type\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 if($self->can($sub)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 return $self->$sub($type,@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 warn("In AttribAdaptor cannot call sub $sub$type\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 sub store_on_ {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my $object = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my $attributes = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my $object_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 if($type =~ /[GT][er][na][en]/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 if (!ref($object)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $object_id = $object;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 $object_id = $object->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 $table = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 # $type = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 if(!ref($object) || !$object->isa('Bio::EnsEMBL::'.$type)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 throw("$type argument is required. but you passed $object");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 if($type eq "Slice"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 $object_id = $object->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 $table = "seq_region";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $type = "seq_region";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 if($type eq "MiscFeature"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $type = "misc_feature";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $table = "misc";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 $table = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $object_id = $object->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 if(!$object->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 throw("$type is not stored in this database.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 my $sth = $self->prepare( "INSERT into ".$table."_attrib ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 "SET ".$type."_id = ?, attrib_type_id = ?, ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 "value = ? " );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 my $undef_circular_cache = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 for my $attrib ( @$attributes ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 if(!ref($attrib) && $attrib->isa('Bio::EnsEMBL::Attribute')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 throw("Reference to list of Bio::EnsEMBL::Attribute objects " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 "argument expected.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my $atid = $self->_store_type( $attrib );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 if ((defined $attrib->code) and ($attrib->code eq 'circular_seq')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $undef_circular_cache = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $sth->bind_param(1,$object_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $sth->bind_param(2,$atid,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $sth->bind_param(3,$attrib->value,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 if($table eq "seq_region") {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 if ($undef_circular_cache) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 #the slice is circular
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $object->{'circular'} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my $slice_adaptor = $object->adaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 #undefine slice adaptor->is_circular and the circular slice cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 if (defined $slice_adaptor) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $slice_adaptor->{'is_circular'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $slice_adaptor->{'circular_sr_id_cache'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 sub remove_from_{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 my $object = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my $code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 my $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 if(!ref($object) || !$object->isa('Bio::EnsEMBL::'.$type)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 throw("$type argument is required or a attrib code. but you passed $object");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my $object_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 if($type eq "Slice"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $object_id = $object->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 $table = "seq_region";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $type = "seq_region";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 if ((defined $code) and ($code eq 'circular_seq')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 #undefine slice->is_circular, slice adaptor->is_circular and the circular slice cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 $object->{'circular'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 my $slice_adaptor = $object->adaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 if (defined $slice_adaptor) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $slice_adaptor->{'is_circular'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $slice_adaptor->{'circular_sr_id_cache'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 if($type eq "MiscFeature"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 $type = "misc_feature";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $table = "misc";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $table = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 $object_id = $object->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 my $db = $self->db();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 if(!$object->is_stored($db)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 throw("$type is not stored in this database.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 if(!defined($object_id)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 throw("$type must have dbID.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my $sth;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 if(defined($code)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $sth = $self->prepare("DELETE a FROM ".$table."_attrib a ,attrib_type at " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 "WHERE a.attrib_type_id = at.attrib_type_id AND ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 "a.".$type."_id = ? AND ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 "at.code like ?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $sth->bind_param(1,$object_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 $sth->bind_param(2,$code,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 $sth = $self->prepare("DELETE FROM ".$table."_attrib " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 "WHERE ".$type."_id = ?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 $sth->bind_param(1,$object_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 sub fetch_all_by_{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 my $object = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 my $code = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my $table =undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 if(!ref($object) || !$object->isa('Bio::EnsEMBL::'.$type)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 throw("$type argument is required. but you passed $object");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $object_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 if($type eq "Slice"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $object_id = $object->get_seq_region_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $table = "seq_region";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 $type = "seq_region";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 if($type eq "MiscFeature"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $type = "misc_feature";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $table = "misc";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $table = lc($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 $object_id = $object->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 if(!defined($object_id)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 throw("$type must have dbID.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my $sql = "SELECT at.code, at.name, at.description, t.value " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 "FROM ".($table||$type)."_attrib t, attrib_type at ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 "WHERE t.".$type."_id = ? " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 "AND at.attrib_type_id = t.attrib_type_id ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 if(defined($code)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $sql .= 'AND at.code like "'.$code.'" ';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my $sth = $self->prepare($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $sth->bind_param(1,$object_id,SQL_INTEGER);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 my $results = $self->_obj_from_sth($sth);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 return $results;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 sub DESTROY{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 # _id_check
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 # backwards compatibility check:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 # check if $ensID is an object; if so, return $obj->dbID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 sub _id_check {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 my $ensID = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 if ($ensID =~ /^\d+$/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 return $ensID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 } elsif (ref($ensID) eq 'Bio::EnsEMBL::Gene' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 ref($ensID) eq 'Bio::EnsEMBL::Transcript' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 ref($ensID) eq 'Bio::EnsEMBL::Translation') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 warning("You should pass a dbID rather than an ensembl object to store the attribute on");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 if ($ensID->dbID) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 return $ensID->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 throw("Ensembl object ".$ensID->display_id." doesn't have a dbID, can't store attribute");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 throw("Invalid dbID");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 # _store_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 sub _store_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 my $attrib = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 my $sth1 = $self->prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 ("INSERT IGNORE INTO attrib_type set code = ?, name = ?, ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 "description = ?" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $sth1->bind_param(1,$attrib->code,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $sth1->bind_param(2,$attrib->name,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 $sth1->bind_param(3,$attrib->description,SQL_LONGVARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 my $rows_inserted = $sth1->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 my $atid = $sth1->{'mysql_insertid'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 if($rows_inserted == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 # the insert failed because the code is already stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my $sth2 = $self->prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 ("SELECT attrib_type_id FROM attrib_type " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 "WHERE code = ?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 $sth2->bind_param(1,$attrib->code,SQL_VARCHAR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 $sth2->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 ($atid) = $sth2->fetchrow_array();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $sth2->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 if(!$atid) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 throw("Could not store or fetch attrib_type code [".$attrib->code."]\n" .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 "Wrong database user/permissions?");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 $sth1->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 return $atid;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 sub _obj_from_sth {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my $sth = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 my ($code, $name, $desc, $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 $sth->bind_columns(\$code, \$name, \$desc, \$value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my @results;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 while($sth->fetch()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 push @results, Bio::EnsEMBL::Attribute->new_fast
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 ( {'code' => $code,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 'name' => $name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 'description' => $desc,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 'value' => $value} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 return \@results;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424