summaryrefslogtreecommitdiffstats
path: root/Bugzilla/DB.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/DB.pm')
-rw-r--r--Bugzilla/DB.pm43
1 files changed, 28 insertions, 15 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 80404131a..cd5954219 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -14,15 +14,9 @@ use DBI;
use DBIx::Connector;
our %Connector;
-has 'dbh' => (
+has 'connector' => (
is => 'lazy',
- handles => [
- qw[
- begin_work column_info commit disconnect do errstr get_info last_insert_id ping prepare
- primary_key quote_identifier rollback selectall_arrayref selectall_hashref
- selectcol_arrayref selectrow_array selectrow_arrayref selectrow_hashref table_info
- ]
- ],
+ handles => [ qw( dbh ) ],
);
use Bugzilla::Constants;
@@ -44,6 +38,29 @@ has [qw(dsn user pass attrs)] => (
required => 1,
);
+
+# Install proxy methods to the DBI object.
+# We can't use handles() as DBIx::Connector->dbh has to be called each
+# time we need a DBI handle to ensure the connection is alive.
+{
+ my @DBI_METHODS = qw(
+ begin_work column_info commit disconnect do errstr get_info last_insert_id ping prepare
+ primary_key quote_identifier rollback selectall_arrayref selectall_hashref
+ selectcol_arrayref selectrow_array selectrow_arrayref selectrow_hashref table_info
+ );
+ my $stash = Package::Stash->new(__PACKAGE__);
+
+ foreach my $method (@DBI_METHODS) {
+ my $symbol = '&' . $method;
+ $stash->add_symbol(
+ $symbol => sub {
+ my $self = shift;
+ return $self->dbh->$method(@_);
+ }
+ );
+ }
+}
+
#####################################################################
# Constants
#####################################################################
@@ -152,9 +169,7 @@ sub _connect {
# instantiate the correct DB specific module
- my $dbh = $pkg_module->new($params);
-
- return $dbh;
+ return $pkg_module->new($params);
}
sub _handle_error {
@@ -1263,7 +1278,7 @@ sub bz_rollback_transaction {
# Subclass Helpers
#####################################################################
-sub _build_dbh {
+sub _build_connector {
my ($self) = @_;
my ($dsn, $user, $pass, $override_attrs) =
map { $self->$_ } qw(dsn user pass attrs);
@@ -1295,9 +1310,7 @@ sub _build_dbh {
}
}
- my $connector = $Connector{"$user.$dsn"} //= DBIx::Connector->new($dsn, $user, $pass, $attributes);
-
- return $connector->dbh;
+ return $Connector{"$user.$dsn"} //= DBIx::Connector->new($dsn, $user, $pass, $attributes);
}
#####################################################################