annotate variant_effect_predictor/Bio/EnsEMBL/Utils/URI.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Utils::URI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Utils::URI qw/parse_uri is_uri/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # or use Bio::EnsEMBL::Utils::URI qw/:all/; # to bring everything in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $db_uri = parse_uri('mysql://user@host:3157/db');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $http_uri = parse_uri('http://www.google.co.uk:80/search?q=t');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 is_uri('mysql://user@host'); # returns 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 is_uri('file:///my/path'); # returns 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 is_uri('/my/path'); # returns 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 This object is a generic URI parser which is primarily used in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 parsing of database URIs into a more managable data structure. We also provide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 the resulting URI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 =head1 DEPENDENCIES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 L<URI::Escape> is an optional dependency but if available the code will attempt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 to perform URI encoding/decoding on parameters. If you do not want this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 functionality then modify the global C<$Bio::EnsEMBL::Utils::URI::URI_ESCAPE>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 to false;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 package Bio::EnsEMBL::Utils::URI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 use Scalar::Util qw/looks_like_number/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 use Bio::EnsEMBL::Utils::Exception qw(throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 use File::Spec;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 our $URI_ESCAPE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 $URI_ESCAPE = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 require URI::Escape;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 URI::Escape->import();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 $URI_ESCAPE = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 use base qw/Exporter/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 our @EXPORT_OK;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 our %EXPORT_TAGS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 @EXPORT_OK = qw/parse_uri is_uri/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 %EXPORT_TAGS = ( all => [@EXPORT_OK] );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 ####URI Parsing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 =head2 is_uri
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Arg[1] : Scalar; URI to parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Example : is_uri('mysql://user:pass@host:415/db');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Description : Looks for the existence of a URI scheme to decide if this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 is a classical URI. Whilst non-scheme based URIs can still be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 interprited it is useful to use when you need to know if
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 you are going to work with a URI or not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Returntype : Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Status : Beta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 sub is_uri {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 my ($uri) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 return 0 if ! $uri;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 my $SCHEME = qr{ ([^:]*) :// }xms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 return ($uri =~ $SCHEME) ? 1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 =head2 parse_uri
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Arg[1] : Scalar; URI to parse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Example : my $uri = parse_uri('mysql://user:pass@host:415/db');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Description : A URL parser which attempts to convert many different types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 of URL into a common data structure.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Returntype : Bio::EnsEMBL::Utils::URI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Status : Beta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 sub parse_uri {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 my ($url) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 my $SCHEME = qr{ ([^:]*) :// }xms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $USER = qr{ ([^/:\@]+)? :? ([^/\@]+)? \@ }xms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 my $HOST = qr{ ([^/:]+)? :? ([^/]+)? }xms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 my $DB = qr{ / ([^/?]+)? /? ([^/?]+)? }xms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my $PARAMS = qr{ \? (.+)}xms;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 my $p;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 if($url =~ qr{ $SCHEME ([^?]+) (?:$PARAMS)? }xms) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 my $scheme = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 $scheme = ($URI_ESCAPE) ? uri_unescape($scheme) : $scheme;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $p = Bio::EnsEMBL::Utils::URI->new($scheme);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 my ($locator, $params) = ($2, $3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 if($scheme eq 'file') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 $p->path($locator);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 elsif($scheme eq 'sqlite') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 $p->path($locator);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if($locator =~ s/^$USER//) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $p->user($1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $p->pass($2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 if($locator =~ s/^$HOST//) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $p->host(($URI_ESCAPE) ? uri_unescape($1) : $1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $p->port(($URI_ESCAPE) ? uri_unescape($2) : $2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 if($p->is_db_scheme() || $scheme eq q{}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 if($locator =~ $DB) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 $p->db_params()->{dbname} = ($URI_ESCAPE) ? uri_unescape($1) : $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 $p->db_params()->{table} = ($URI_ESCAPE) ? uri_unescape($2) : $2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 $p->path($locator);
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 if(defined $params) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 my @kv_pairs = split(/;|&/, $params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 foreach my $kv_string (@kv_pairs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 my ($key, $value) = map { ($URI_ESCAPE) ? uri_unescape($_) : $_ } split(/=/, $kv_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 $p->add_param($key, $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 return $p;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 ####URI Object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 =pod
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 =head2 new()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 Arg[1] : String; scheme the URI will confrom to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 Description : New object call
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 Returntype : Bio::EnsEMBL::Utils::URIParser::URI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 Exceptions : Thrown if scheme is undefined.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 my ($class, $scheme) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 $class = ref($class) || $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 throw "Scheme cannot be undefined. Empty string is allowed" if ! defined $scheme;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $self = bless ({
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 params => {},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 param_keys => [],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 db_params => {},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 scheme => $scheme,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 }, $class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 =head2 db_schemes()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Description: Returns a hash of scheme names known to be databases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 Returntype : HashRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 sub db_schemes {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 return {map { $_ => 1 } qw/mysql ODBC sqlite Oracle Sybase/};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 =head2 is_db_scheme()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 Description: Returns true if the code believes the scheme to be a Database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Returntype : Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 sub is_db_scheme {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 return ( exists $self->db_schemes()->{$self->scheme()} ) ? 1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 =head2 scheme()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 Description : Getter for the scheme attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 sub scheme {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 return $self->{scheme};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 =head2 path()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Arg[1] : Setter argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Description : Getter/setter for the path attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 sub path {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 my ($self, $path) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 $self->{path} = $path if defined $path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 return $self->{path};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 =head2 user()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 Arg[1] : Setter argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 Description : Getter/setter for the user attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 sub user {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 my ($self, $user) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $self->{user} = $user if defined $user;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 return $self->{user};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =head2 pass()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Arg[1] : Setter argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Description : Getter/setter for the password attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Exceptions : None
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 pass {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 my ($self, $pass) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $self->{pass} = $pass if defined $pass;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 return $self->{pass};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 =head2 host()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Arg[1] : Setter argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Description : Getter/setter for the host attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 sub host {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 my ($self, $host) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $self->{host} = $host if defined $host;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 return $self->{host};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 =head2 port()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 Arg[1] : Setter argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 Description : Getter/setter for the port attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 Returntype : Integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 Exceptions : If port is not a number, less than 1 or not a whole integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 sub port {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 my ($self, $port) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 if(defined $port) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 if(! looks_like_number($port) || $port < 1 || int($port) != $port) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 throw "Port $port is not a number, less than 1 or not a whole integer";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $self->{port} = $port if defined $port;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 return $self->{port};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 =head2 param_keys()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Description : Getter for the paramater map keys in the order they were first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 seen. Keys should only appear once in this array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 sub param_keys {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 return [@{$self->{param_keys}}];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 =head2 param_exists_ci()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Arg[1] : String; Key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Description : Performs a case-insensitive search for the given key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Returntype : Boolean; returns true if your given key was seen
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 sub param_exists_ci {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 my ($self, $key) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 my %keys = map { uc($_) => 1 } @{$self->param_keys()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 return ($keys{uc($key)}) ? 1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 =head2 add_param()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 Arg[1] : String; key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 Arg[1] : Scalar; value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 Description : Add a key/value to the params map. Multiple inserts of the same
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 key is allowed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 sub add_param {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my ($self, $key, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 if(!exists $self->{params}->{$key}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $self->{params}->{$key} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 push(@{$self->{param_keys}}, $key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 push(@{$self->{params}->{$key}}, $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 =head2 get_params()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 Arg[1] : String; key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Description : Returns the values which were found to be linked to the given
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 key. Arrays are returned because one key can have many
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 values in a URI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Returntype : ArrayRef[Scalar]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 sub get_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 my ($self, $key) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 return [] if ! exists $self->{params}->{$key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 return [@{$self->{params}->{$key}}];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 =head2 db_params()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 Description : Storage of parameters used only for database URIs since
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 they require
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 Returntype : HashRef; Database name is keyed under C<dbname> and the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 table is keyed under C<table>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 sub db_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 return $self->{db_params};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 =head2 generate_dbsql_params()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 Arg[1] : boolean $no_table alows you to avoid pushing -TABLE as an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 output value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Description : Generates a Hash of Ensembl compatible parameters to be used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 to construct a DB object. We combine those parameters
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 which are deemed to be part of the C<db_params()> method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 under C<-DBNAME> and C<-TABLE>. We also search for a number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 of optional parameters which are lowercased equivalents
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 of the construction parameters available from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 L<Bio::EnsEMBL::DBSQL::DBAdaptor>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 L<Bio::EnsEMBL::DBSQL::DBConnection> as well as C<verbose>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 being supported.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 We also convert the scheme type into the driver attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 Returntype : Hash (not a reference). Output can be put into a C<DBConnection>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 sub generate_dbsql_params {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 my ($self, $no_table) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my %db_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 $db_params{-DRIVER} = $self->scheme();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 $db_params{-HOST} = $self->host() if $self->host();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 $db_params{-PORT} = $self->port() if $self->port();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 $db_params{-USER} = $self->user() if $self->user();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 $db_params{-PASS} = $self->pass() if $self->pass();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my $dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 if($self->scheme() eq 'sqlite') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 ($dbname, $table) = $self->_decode_sqlite();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $dbname = $self->db_params()->{dbname};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $table = $self->db_params()->{table};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $db_params{-DBNAME} = $dbname if $dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 $db_params{-TABLE} = $table if ! $no_table && $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 foreach my $boolean_param (qw/disconnect_when_inactive reconnect_when_connection_lost is_multispecies no_cache verbose/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 if($self->param_exists_ci($boolean_param)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 $db_params{q{-}.uc($boolean_param)} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 foreach my $value_param (qw/species group species_id wait_timeout/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 if($self->param_exists_ci($value_param)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 $db_params{q{-}.uc($value_param)} = $self->get_params($value_param)->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 return %db_params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 =head2 _decode_sqlite
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 Description : Performs path gymnastics to decode into a number of possible
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 options. The issue with SQLite is that the normal URI scheme
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 looks like sqlite:///my/path.sqlite/table but how do we know
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 that the DB name is C</my/path.sqlite> and the table is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 C<table>?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 The code takes a path, looks for the full path & if it cannot
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 be found looks for the file a directory back. In the above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 example it would have looked for C</my/path.sqlite/table>,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 found it to be non-existant, looked for C</my/path.sqlite>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 and found it.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 If the path splitting procdure resulted in just 1 file after
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 the first existence check e.g. C<sqlite://db.sqlite> it assumes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 that should be the name. If no file can be found we default to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 the full length path.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Caller : internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 sub _decode_sqlite {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 my $dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 my $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 my $path = $self->path();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 if(-f $path) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $dbname = $path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 my ($volume, $directories, $file) = File::Spec->splitpath($path);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 my @splitdirs = File::Spec->splitdir($directories);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 if(@splitdirs == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 $dbname = $path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 my $new_file = pop(@splitdirs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 $new_file ||= q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 my $new_path = File::Spec->catpath($volume, File::Spec->catdir(@splitdirs), $new_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 if($new_path ne File::Spec->rootdir() && -f $new_path) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 $dbname = $new_path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $table = $file;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 $dbname = $path;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 $self->db_params()->{dbname} = $dbname if $dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 $self->db_params()->{table} = $table if $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 return ($dbname, $table);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 =head2 generate_uri()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Description : Generates a URI string from the paramaters in this object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Returntype : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 sub generate_uri {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 my $scheme = sprintf('%s://', ($URI_ESCAPE) ? uri_escape($self->scheme()) : $self->scheme());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 my $user_credentials = q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 my $host_credentials = q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 my $location = q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 if($self->user() || $self->pass()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 my $user = $self->user();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 my $pass = $self->pass();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 if($URI_ESCAPE) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 $user = uri_escape($user) if $user;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 $pass = uri_escape($pass) if $pass;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 $user_credentials = sprintf('%s%s@',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 ( $user ? $user : q{} ),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 ( $pass ? q{:}.$pass : q{} )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 if($self->host() || $self->port()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 my $host = $self->host();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 my $port = $self->port();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 if($URI_ESCAPE) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 $host = uri_escape($host) if $host;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 $port = uri_escape($port) if $port;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 $host_credentials = sprintf('%s%s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 ( $host ? $host : q{} ),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 ( $port ? q{:}.$port : q{} )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 if($self->is_db_scheme() || $self->scheme() eq '') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 if($self->scheme() eq 'sqlite') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 if(! $self->path()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 my $tmp_loc = $self->db_params()->{dbname};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 throw "There is no dbname available" unless $tmp_loc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 $tmp_loc .= q{/}.$self->db_params()->{table} if $self->db_params()->{table};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 $self->path($tmp_loc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 $location = $self->path();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 my $dbname = $self->db_params()->{dbname};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 my $table = $self->db_params()->{table};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 if($dbname || $table) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 if($URI_ESCAPE) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 $dbname = uri_escape($dbname) if $dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 $table = uri_escape($table) if $table;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 $location = sprintf('/%s%s',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 ($dbname ? $dbname : q{}),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 ($table ? q{/}.$table : q{})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 $location = $self->path() if $self->path();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 my $param_string = q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 if(@{$self->param_keys()}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 $param_string = q{?};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 my @params;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 foreach my $key (@{$self->param_keys}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 my $values_array = $self->get_params($key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 foreach my $value (@{$values_array}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 my $encoded_key = ($URI_ESCAPE) ? uri_escape($key) : $key;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 my $encoded_value = ($URI_ESCAPE) ? uri_escape($value) : $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 push(@params, ($encoded_value) ? "$encoded_key=$encoded_value" : $encoded_key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 $param_string .= join(q{;}, @params);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 return join(q{}, $scheme, $user_credentials, $host_credentials, $location, $param_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 1;