From 211d5eb21aeb28cb4c465c0218398b26f325571e Mon Sep 17 00:00:00 2001
From: Alexandre Morignot <erdnaxeli@cervoi.se>
Date: Wed, 11 Feb 2015 11:01:48 +0100
Subject: [PATCH] handle db deconnection

---
 lib/utils/db/query.pm | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/lib/utils/db/query.pm b/lib/utils/db/query.pm
index 4175512..bfe00fc 100644
--- a/lib/utils/db/query.pm
+++ b/lib/utils/db/query.pm
@@ -72,7 +72,7 @@ sub _get_next {
 
     # there is no more data to fetch
     $self->_sth->{$chan} = undef;
-    $self->_dbh->{$chan}->commit();
+    $self->_get_dbh($chan)->commit();
     return undef;
 }
 
@@ -83,12 +83,9 @@ sub _init {
     if (defined $self->_sth->{$chan}) {
         $self->_sth->{$chan}->finish();
     }
-    elsif (not defined $self->_dbh->{$chan}) {
-        $self->_dbh->{$chan} = utils::db::get_new_session();
-    }
 
     my ($request, @args) = $self->_prepare_request($query);
-    my $sth = $self->_dbh->{$chan}->prepare($request);
+    my $sth = $self->_get_dbh($chan)->prepare($request);
     $sth->execute(@args);
 
     $self->_sth->{$query->chan} = $sth;
@@ -167,4 +164,16 @@ sub _prepare_request {
     return ($req, @args);
 }
 
+sub _get_dbh {
+    my ($self, $chan) = @_;
+
+    if (not defined $self->_dbh->{$chan} or
+        not $self->_dbh->{$chan}->ping
+    ) {
+        $self->_dbh->{$chan} = utils::db::get_new_session();
+    }
+
+    return $self->_dbh->{$chan};
+}
+
 1;
-- 
GitLab