annotate variant_effect_predictor/Bio/EnsEMBL/DBSQL/DBConnection.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
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::DBSQL::DBConnection
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 $dbc = Bio::EnsEMBL::DBSQL::DBConnection->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 -user => 'anonymous',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 -dbname => 'homo_sapiens_core_20_34c',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 -host => 'ensembldb.ensembl.org',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 -driver => 'mysql',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 # SQL statements should be created/executed through this modules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 # prepare() and do() methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 $sth = $dbc->prepare("SELECT something FROM yourtable");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $sth->execute();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 # do something with rows returned ...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 $sth->finish();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 This class is a wrapper around DBIs datbase handle. It provides some
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 additional functionality such as the ability to automatically disconnect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 when inactive and reconnect when needed.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 Generally this class will be used through one of the object adaptors or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 the Bio::EnsEMBL::Registry and will not be instantiated directly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 package Bio::EnsEMBL::DBSQL::DBConnection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 use Bio::EnsEMBL::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 use DBI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::EnsEMBL::DBSQL::StatementHandle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::EnsEMBL::Utils::Exception qw/deprecate throw info warning/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 use Bio::EnsEMBL::Utils::Argument qw/rearrange/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 use Bio::EnsEMBL::Utils::Scalar qw/assert_ref wrap_array/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::EnsEMBL::Utils::SqlHelper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 @ISA = qw(Bio::EnsEMBL::Root); # for backwards compatibility
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Arg [DBNAME] : (optional) string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 The name of the database to connect to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Arg [HOST] : (optional) string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 The domain name of the database host to connect to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 'localhost' by default.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Arg [USER] : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 The name of the database user to connect with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Arg [PASS] : (optional) string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 The password to be used to connect to the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Arg [PORT] : (optional) int
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 The port to use when connecting to the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 3306 by default if the driver is mysql.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Arg [DRIVER] : (optional) string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 The type of database driver to use to connect to the DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 mysql by default.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 Arg [DBCONN] : (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 Open another handle to the same database as another connection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 If this argument is specified, no other arguments should be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 specified.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 Arg [DISCONNECT_WHEN_INACTIVE]: (optional) boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 If set to true, the database connection will be disconnected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 everytime there are no active statement handles. This is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 useful when running a lot of jobs on a compute farm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 which would otherwise keep open a lot of connections to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 database. Database connections are automatically reopened
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 when required.Do not use this option together with RECONNECT_WHEN_CONNECTION_LOST.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Arg [WAIT_TIMEOUT]: (optional) integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Time in seconds for the wait timeout to happen. Time after which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 the connection is deleted if not used. By default this is 28800 (8 hours)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 on most systems.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 So set this to greater than this if your connection are getting deleted.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Only set this if you are having problems and know what you are doing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Arg [RECONNECT_WHEN_CONNECTION_LOST]: (optional) boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 In case you're reusing the same database connection, i.e. DISCONNECT_WHEN_INACTIVE is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 set to false and running a job which takes a long time to process (over 8hrs),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 which means that the db connection may be lost, set this option to true.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 On each prepare or do statement the db handle will be pinged and the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 connection will be reconnected if it's lost.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Example : $dbc = Bio::EnsEMBL::DBSQL::DBConnection->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 (-user => 'anonymous',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 -dbname => 'homo_sapiens_core_20_34c',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 -host => 'ensembldb.ensembl.org',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 -driver => 'mysql');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 Description: Constructor for a Database Connection. Any adaptors that require
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 database connectivity should inherit from this class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 Returntype : Bio::EnsEMBL::DBSQL::DBConnection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 Exceptions : thrown if USER or DBNAME are not specified, or if the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 cannot be connected to.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Caller : Bio::EnsEMBL::Utils::ConfigRegistry ( for newer code using the registry)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 Bio::EnsEMBL::DBSQL::DBAdaptor ( for old style code)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 my (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $db, $host, $driver,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 $user, $password, $port,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 $inactive_disconnect, $dbconn, $wait_timeout, $reconnect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 = rearrange( [
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 'DBNAME', 'HOST', 'DRIVER', 'USER', 'PASS', 'PORT',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 'DISCONNECT_WHEN_INACTIVE', 'DBCONN', 'WAIT_TIMEOUT', 'RECONNECT_WHEN_CONNECTION_LOST'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 ],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 @_
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my $self = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 bless $self, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 if($dbconn) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 if($db || $host || $driver || $password || $port || $inactive_disconnect || $reconnect) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 throw("Cannot specify other arguments when -DBCONN argument used.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $self->driver($dbconn->driver());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $self->host($dbconn->host());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 $self->port($dbconn->port());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 $self->username($dbconn->username());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 $self->password($dbconn->password());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $self->dbname($dbconn->dbname());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 if($dbconn->disconnect_when_inactive()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $self->disconnect_when_inactive(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $driver ||= 'mysql';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 if($driver eq 'mysql') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $user || throw("-USER argument is required.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $host ||= 'mysql';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 if(!defined($port)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $port = 3306;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 if($host eq "ensembldb.ensembl.org"){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 if( $db =~ /\w+_\w+_\w+_(\d+)/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 if($1 >= 48){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $port = 5306;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $wait_timeout ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $self->driver($driver);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $self->host( $host );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 $self->port($port);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 $self->username( $user );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 $self->password( $password );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $self->dbname( $db );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 $self->timeout($wait_timeout);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 if($inactive_disconnect) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $self->disconnect_when_inactive($inactive_disconnect);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 if($reconnect) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $self->reconnect_when_lost($reconnect);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 # if(defined $dnadb) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 # $self->dnadb($dnadb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 =head2 connect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 Example : $dbcon->connect()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 Description: Connects to the database using the connection attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 Caller : new, db_handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 sub connect {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 if ( $self->connected() ) { return }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 $self->connected(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 if ( defined( $self->db_handle() ) and $self->db_handle()->ping() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 warning( "unconnected db_handle is still pingable, "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 . "reseting connected boolean\n" );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 my ( $dsn, $dbh );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 my $dbname = $self->dbname();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 if ( $self->driver() eq "Oracle" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 $dsn = "DBI:Oracle:";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $dbh = DBI->connect( $dsn,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 sprintf( "%s@%s",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 $self->username(), $dbname ),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 $self->password(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 { 'RaiseError' => 1, 'PrintError' => 0 } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 } elsif ( $self->driver() eq "ODBC" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $dsn = sprintf( "DBI:ODBC:%s", $self->dbname() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 $dbh = DBI->connect( $dsn,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $self->username(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $self->password(), {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 'LongTruncOk' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 'LongReadLen' => 2**16 - 8,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 'RaiseError' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 'PrintError' => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 'odbc_cursortype' => 2 } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 } elsif ( $self->driver() eq "Sybase" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my $dbparam = ($dbname) ? ";database=${dbname}" : q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 $dsn = sprintf( "DBI:Sybase:server=%s%s;tdsLevel=CS_TDS_495",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $self->host(), $dbparam );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $dbh = DBI->connect( $dsn,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 $self->username(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->password(), {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 'LongTruncOk' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 'RaiseError' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 'PrintError' => 0 } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 } elsif ( lc( $self->driver() ) eq 'sqlite' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 throw "We require a dbname to connect to a SQLite database"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 if !$dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 $dsn = sprintf( "DBI:SQLite:%s", $dbname );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 $dbh = DBI->connect( $dsn, '', '', { 'RaiseError' => 1, } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my $dbparam = ($dbname) ? "database=${dbname};" : q{};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $dsn = sprintf( "DBI:%s:%shost=%s;port=%s",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $self->driver(), $dbparam,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $self->host(), $self->port() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if ( $self->{'disconnect_when_inactive'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $self->{'count'}++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 if ( $self->{'count'} > 1000 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 sleep 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $self->{'count'} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $dbh = DBI->connect( $dsn, $self->username(), $self->password(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 { 'RaiseError' => 1 } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 if ( !$dbh || $@ || !$dbh->ping() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 warn( "Could not connect to database "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 . $self->dbname()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 . " as user "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 . $self->username()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 . " using [$dsn] as a locator:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 . $DBI::errstr );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 $self->connected(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 throw( "Could not connect to database "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 . $self->dbname()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 . " as user "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 . $self->username()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 . " using [$dsn] as a locator:\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 . $DBI::errstr );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->db_handle($dbh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 if ( $self->timeout() ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 $dbh->do( "SET SESSION wait_timeout=" . $self->timeout() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 #print("CONNECT\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 } ## end sub connect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 =head2 connected
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Example : $dbcon->connected()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Description: Boolean which tells if DBConnection is connected or not.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 State is set internally, and external processes should not alter state.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Returntype : undef or 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 Caller : db_handle, connect, disconnect_if_idle, user processes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 sub connected {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 # Use the process id ($$) as part of the key for the connected flag.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 # This forces the opening of another connection in a forked subprocess.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $self->{'connected'.$$} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 return $self->{'connected'.$$};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 sub disconnect_count {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 return $self->{'disconnect_count'} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $self->{'disconnect_count'}=0 unless(defined($self->{'disconnect_count'}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 return $self->{'disconnect_count'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 sub timeout{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 (defined $arg) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 ($self->{_timeout} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 return $self->{_timeout};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 sub query_count {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 return $self->{'_query_count'} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $self->{'_query_count'}=0 unless(defined($self->{'_query_count'}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 return $self->{'_query_count'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 =head2 equals
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Example : warn 'Same!' if($dbc->equals($other_dbc));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Description: Equality checker for DBConnection objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 sub equals {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my ( $self, $dbc ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 return 0 if ! defined $dbc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 my $return = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my $undef_str = q{!-undef-!};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 my $undef_num = -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $return = 1 if (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 (($self->host() || $undef_str) eq ($dbc->host() || $undef_str)) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 (($self->dbname() || $undef_str) eq ($dbc->dbname() || $undef_str)) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 (($self->port() || $undef_num) == ($dbc->port() || $undef_num)) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 (($self->username() || $undef_str) eq ($dbc->username() || $undef_str)) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 ($self->driver() eq $dbc->driver())
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 return $return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 =head2 driver
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Arg [1] : (optional) string $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 the name of the driver to use to connect to the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Example : $driver = $db_connection->driver()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Description: Getter / Setter for the driver this connection uses.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 Right now there is no point to setting this value after a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 connection has already been established in the constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 sub driver {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 my($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 (defined $arg) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 ($self->{_driver} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 return $self->{_driver};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 =head2 port
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Arg [1] : (optional) int $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 the TCP or UDP port to use to connect to the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Example : $port = $db_connection->port();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Description: Getter / Setter for the port this connection uses to communicate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 to the database daemon. There currently is no point in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 setting this value after the connection has already been
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 established by the constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 sub port {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 $self->{'_port'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 return $self->{'_port'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 =head2 dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 Arg [1] : (optional) string $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 The new value of the database name used by this connection.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 Example : $dbname = $db_connection->dbname()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 Description: Getter/Setter for the name of the database used by this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 connection. There is currently no point in setting this value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 after the connection has already been established by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 sub dbname {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 my ($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 ( defined $arg ) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 ( $self->{_dbname} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 $self->{_dbname};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 =head2 username
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Arg [1] : (optional) string $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 The new value of the username used by this connection.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 Example : $username = $db_connection->username()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 Description: Getter/Setter for the username used by this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 connection. There is currently no point in setting this value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 after the connection has already been established by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 sub username {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 my ($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 ( defined $arg ) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 ( $self->{_username} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 $self->{_username};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 =head2 host
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 Arg [1] : (optional) string $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 The new value of the host used by this connection.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 Example : $host = $db_connection->host()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 Description: Getter/Setter for the domain name of the database host use by
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 this connection. There is currently no point in setting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 this value after the connection has already been established
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 by the constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 sub host {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 my ($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 ( defined $arg ) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 ( $self->{_host} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 $self->{_host};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 =head2 password
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 Arg [1] : (optional) string $arg
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 The new value of the password used by this connection.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 Example : $host = $db_connection->password()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 Description: Getter/Setter for the password of to use for this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 connection. There is currently no point in setting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 this value after the connection has already been
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 established by the constructor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Caller : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 sub password {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 my ( $self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 if ( defined($arg) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 # Use an anonymous subroutine that will return the password when
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 # invoked. This will prevent the password from being accidentally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 # displayed when using e.g. Data::Dumper on a structure containing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 # one of these objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 $self->{_password} = sub { $arg };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 return ( ref( $self->{_password} ) && &{ $self->{_password} } ) || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 }
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 =head2 disconnect_when_inactive
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 Arg [1] : (optional) boolean $newval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 Example : $db->disconnect_when_inactive(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 Description: Getter/Setter for the disconnect_when_inactive flag. If set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 to true this DBConnection will continually disconnect itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 when there are no active statement handles and reconnect as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 necessary. Useful for farm environments when there can be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 many (often inactive) open connections to a database at once.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Caller : Pipeline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 sub disconnect_when_inactive {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 $self->{'disconnect_when_inactive'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 if ($value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 $self->disconnect_if_idle();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 return $self->{'disconnect_when_inactive'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 =head2 reconnect_when_lost
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 Arg [1] : (optional) boolean $newval
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Example : $db->reconnect_when_lost(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 Description: Getter/Setter for the reconnect_when_lost flag. If set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 to true the db handle will be pinged on each prepare or do statement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 and the connection will be reestablished in case it's lost.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 Useful for long running jobs (over 8hrs), which means that the db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 connection may be lost.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 Returntype : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 Caller : Pipeline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 sub reconnect_when_lost {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 my ( $self, $value ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 if ( defined($value) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 $self->{'reconnect_when_lost'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 return $self->{'reconnect_when_lost'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 =head2 locator
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 Example : $locator = $dbc->locator;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 Description: Constructs a locator string for this database connection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 that can, for example, be used by the DBLoader module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 sub locator {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 return sprintf(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 "%s/host=%s;port=%s;dbname=%s;user=%s;pass=%s",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 ref($self), $self->host(), $self->port(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 $self->dbname(), $self->username(), $self->password() );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 =head2 db_handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 Arg [1] : DBI Database Handle $value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 Example : $dbh = $db_connection->db_handle()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 Description: Getter / Setter for the Database handle used by this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 database connection.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 Returntype : DBI Database Handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 Caller : new, DESTROY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 sub db_handle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 # Use the process id ($$) as part of the key for the database handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 # this makes this object fork safe. fork() does not makes copies
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 # of the open socket which creates problems when one of the forked
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 # processes disconnects,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 return $self->{'db_handle'.$$} = shift if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 return $self->{'db_handle'.$$} if($self->connected);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 $self->connect();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 return $self->{'db_handle'.$$};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 =head2 prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 Arg [1] : string $string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 the SQL statement to prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 Example : $sth = $db_connection->prepare("SELECT column FROM table");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 Description: Prepares a SQL statement using the internal DBI database handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 and returns the DBI statement handle.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 Returntype : DBI statement handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 Exceptions : thrown if the SQL statement is empty, or if the internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 database handle is not present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 Caller : Adaptor modules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 sub prepare {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 my ($self,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 if( ! $args[0] ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 throw("Attempting to prepare an empty SQL query.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 #warn "SQL(".$self->dbname."):" . join(' ', @args) . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 if ( ($self->reconnect_when_lost()) and (!$self->db_handle()->ping()) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704 $self->reconnect();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 my $sth = $self->db_handle->prepare(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 # return an overridden statement handle that provides us with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 # the means to disconnect inactive statement handles automatically
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 bless $sth, "Bio::EnsEMBL::DBSQL::StatementHandle";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 $sth->dbc($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 $sth->sql($args[0]);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 $self->query_count($self->query_count()+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 return $sth;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 =head2 reconnect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 Example : $dbcon->reconnect()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 Description: Reconnects to the database using the connection attribute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 information if db_handle no longer pingable.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725 Caller : new, db_handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 sub reconnect {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 $self->connected(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 $self->db_handle(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 $self->connect();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 =head2 do
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 Arg [1] : string $string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 the SQL statement to prepare
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 Example : $sth = $db_connection->do("SELECT column FROM table");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 Description: Executes a SQL statement using the internal DBI database handle.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 Returntype : Result of DBI dbh do() method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 Exceptions : thrown if the SQL statement is empty, or if the internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 database handle is not present.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 Caller : Adaptor modules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 sub do {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 my ($self,$string) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 if( ! $string ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 throw("Attempting to do an empty SQL query.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 # warn "SQL(".$self->dbname."): $string";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 my $error;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 my $do_result = $self->work_with_db_handle(sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 my ($dbh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my $result = eval { $dbh->do($string) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 $error = $@ if $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 throw "Detected an error whilst executing statement '$string': $error" if $error;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 return $do_result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 =head2 work_with_db_handle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 Arg [1] : CodeRef $callback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 Example : my $q_t = $dbc->work_with_db_handle(sub { my ($dbh) = @_; return $dbh->quote_identifier('table'); });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 Description: Gives access to the DBI handle to execute methods not normally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 provided by the DBConnection interface
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 Returntype : Any from callback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 Exceptions : If the callback paramater is not a CodeRef; all other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 errors are re-thrown after cleanup.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 Caller : Adaptor modules
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 sub work_with_db_handle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 my ($self, $callback) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 my $wantarray = wantarray;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 assert_ref($callback, 'CODE', 'callback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 if( $self->reconnect_when_lost() && !$self->db_handle()->ping()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 $self->reconnect();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 my @results;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 if($wantarray) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 @results = $callback->($self->db_handle())
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 elsif(defined $wantarray) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 $results[0] = $callback->($self->db_handle());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 $callback->($self->db_handle());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 my $original_error = $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 $self->query_count($self->query_count()+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 if($self->disconnect_when_inactive()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 $self->disconnect_if_idle();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 if($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 warning "Detected an error whilst attempting to disconnect the DBI handle: $@";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 if($original_error) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 throw "Detected an error when running DBI wrapper callback:\n$original_error";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823 if(defined $wantarray) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 return ($wantarray) ? @results : $results[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 =head2 prevent_disconnect
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 Arg[1] : CodeRef $callback
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 Example : $dbc->prevent_disconnect(sub { $dbc->do('do something'); $dbc->do('something else')});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 Description : A wrapper method which prevents database disconnection for the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 duration of the callback. This is very useful if you need
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 to make multiple database calls avoiding excessive database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 connection creation/destruction but still want the API
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 to disconnect after the body of work.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 The value of C<disconnect_when_inactive()> is set to 0 no
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 matter what the original value was & after $callback has
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 been executed. If C<disconnect_when_inactive()> was
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 already set to 0 then this method will be an effective no-op.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 Exceptions : Raised if there are issues with reverting the connection to its
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 default state.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 Caller : DBConnection methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 Status : Beta
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 sub prevent_disconnect {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 my ($self, $callback) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 assert_ref($callback, 'CODE', 'callback');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 my $original_dwi = $self->disconnect_when_inactive();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 $self->disconnect_when_inactive(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 eval { $callback->(); };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 my $original_error = $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 eval {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 $self->disconnect_when_inactive($original_dwi);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 if($@) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 warning "Detected an error whilst attempting to reset disconnect_when_idle: $@";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864 if($original_error) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 throw "Detected an error when running DBI wrapper callback:\n$original_error";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870 =head2 quote_identifier
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872 Arg [n] : scalar/ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 Example : $q = $dbc->quote_identifier('table', 'other');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 $q = $dbc->quote_identifier([undef, 'my_db', 'table'], [undef, 'my_db', 'other']);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 Description: Executes the DBI C<quote_identifier> method which will quote
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 any given string using the database driver's quote character.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 Returntype : ArrayRef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 sub quote_identifier {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 my ($self, @identifiers) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 return $self->work_with_db_handle(sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 my ($dbh) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 my @output;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 foreach my $identifier_array (@identifiers) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 $identifier_array = wrap_array($identifier_array);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 push(@output, $dbh->quote_identifier(@{$identifier_array}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 return \@output;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 =head2 disconnect_if_idle
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 Example : $dbc->disconnect_if_idle();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 Description: Disconnects from the database if there are no currently active
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 statement handles.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 It is called automatically by the DESTROY method of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 Bio::EnsEMBL::DBSQL::SQL::StatementHandle if the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 disconect_when_inactive flag is set.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 Users may call it whenever they want to disconnect. Connection will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 reestablish on next access to db_handle()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 Returntype : 1 or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909 1=problem trying to disconnect while a statement handle was still active
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 Caller : Bio::EnsEMBL::DBSQL::SQL::StatementHandle::DESTROY
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 Bio::EnsEMBL::DBSQL::DBConnection::do
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 sub disconnect_if_idle {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 return 0 if(!$self->connected());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 my $db_handle = $self->db_handle();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 return 0 unless(defined($db_handle));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 #printf("disconnect_if_idle : kids=%d activekids=%d\n",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 # $db_handle->{Kids}, $db_handle->{ActiveKids});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 #If InactiveDestroy is set, don't disconnect.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 #To comply with DBI specification
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 return 0 if($db_handle->{InactiveDestroy});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 #If any statement handles are still active, don't allow disconnection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 #In this case it is being called before a query has been fully processed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 #either by not reading all rows of data returned, or not calling ->finish
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 #on the statement handle. Don't disconnect, send warning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 if($db_handle->{ActiveKids} != 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 warn("Problem disconnect : kids=",$db_handle->{Kids},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 " activekids=",$db_handle->{ActiveKids},"\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 $db_handle->disconnect();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 $self->connected(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 $self->disconnect_count($self->disconnect_count()+1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 #print("DISCONNECT\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 $self->db_handle(undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 =head2 add_limit_clause
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 Arg [1] : string $sql
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 Arg [2] : int $max_number
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 Example : my $new_sql = $dbc->add_limit_clause($sql,$max_number);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 Description: Giving an SQL statement, it adds a limit clause, dependent on the database
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956 (in MySQL, should add a LIMIT at the end, MSSQL uses a TOP clause)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 Returntype : String containing the new valid SQL statement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 sub add_limit_clause{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 my $sql = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 my $max_number = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 my $new_sql = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 if ($self->driver eq 'mysql'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 $new_sql = $sql . ' LIMIT ' . $max_number;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 elsif ($self->driver eq 'odbc'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 #need to get anything after the SELECT statement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 $sql =~ /select(.*)/i;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 $new_sql = 'SELECT TOP ' . $max_number . $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 warning("Not possible to convert $sql to an unknow database driver: ", $self->driver, " no limit applied");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 $new_sql = $sql;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 return $new_sql;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 =head2 from_date_to_seconds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 Arg [1] : date $date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 Example : my $string = $dbc->from_date_to_seconds($date);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 Description: Giving a string representing a column of type date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 applies the database function to convert to the number of seconds from 01-01-1970
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 sub from_date_to_seconds{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 my $self= shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 my $column = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 my $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 if ($self->driver eq 'mysql'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 $string = "UNIX_TIMESTAMP($column)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008 elsif ($self->driver eq 'odbc'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 $string = "DATEDIFF(second,'JAN 1 1970',$column)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 warning("Not possible to convert $column due to an unknown database driver: ", $self->driver);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013 return '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 return $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 =head2 from_seconds_to_date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 Arg [1] : int $seconds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 Example : my $string = $dbc->from_seconds_to_date($seconds);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 Description: Giving an int representing number of seconds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 applies the database function to convert to a date
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 Returntype : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 sub from_seconds_to_date{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033 my $self= shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 my $seconds = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 my $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 if ($self->driver eq 'mysql'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 if ($seconds){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 $string = "from_unixtime( ".$seconds.")";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 $string = "\"0000-00-00 00:00:00\"";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 elsif ($self->driver eq 'odbc'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 if ($seconds){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047 $string = "DATEDIFF(date,'JAN 1 1970',$seconds)";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 $string = "\"0000-00-00 00:00:00\"";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 warning("Not possible to convert $seconds due to an unknown database driver: ", $self->driver);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 return '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058 return $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 =head2 sql_helper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 Example : my $h = $dbc->sql_helper();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 Description: Lazy generated instance of L<Bio::EnsEMBL::Utils::SqlHelper>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 which provides useful wrapper methods for interacting with a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 DBConnection instance.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 Returntype : Bio::EnsEMBL::Utils::SqlHelper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 sub sql_helper {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 if(! exists $self->{_sql_helper}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 my $helper = Bio::EnsEMBL::Utils::SqlHelper->new(-DB_CONNECTION => $self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 $self->{_sql_helper} = $helper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 return $self->{_sql_helper};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 ####
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 #deprecated functions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 ####
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 =head2 group
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 group is no longer available in DBConnection and should be accessed if needed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 from an adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094 sub group {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 my ($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 ( defined $arg ) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 ( $self->{_group} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 deprecate "group should not be called from DBConnection but from an adaptor\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099 return $self->{_group};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 =head2 species
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104 species is no longer available in DBConnection and should be accessed if needed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 from an adaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 sub species {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110 my ($self, $arg ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 ( defined $arg ) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112 ( $self->{_species} = $arg );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 deprecate "species should not be called from DBConnection but from an adaptor\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114 return $self->{_species};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117 1;