From b402dca5c7c5b0af610c5bc482a1c423bffb4dd8 Mon Sep 17 00:00:00 2001
From: Marco De Marco <demarco@oats.inaf.it>
Date: Fri, 22 Nov 2013 11:06:12 +0100
Subject: [PATCH] Reconnect added to DBManager class

---
 src/DBManager.cpp | 8 +++++++-
 src/DBManager.h   | 4 ++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/DBManager.cpp b/src/DBManager.cpp
index c01f4c1..4e9a7cf 100644
--- a/src/DBManager.cpp
+++ b/src/DBManager.cpp
@@ -58,7 +58,7 @@ void DBManager::connect() throw(soci::soci_error)
     connection << " password=" << m_configuration_sp->getDatabasePassword();
 
     #ifdef VERBOSE_DEBUG
-        INFO_STREAM << "CONNECTION: " << connection.str() << endl;
+        INFO_STREAM << "DBManager::connect(): " << connection.str() << endl;
     #endif
 
     unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();
@@ -96,6 +96,9 @@ DBManager::InformationList DBManager::retrieveInformation(std::string schema,
 
     soci::session session(*m_connectionPool_sp);
 
+    if(session.get_backend() == NULL)
+        session.reconnect();
+
     soci::rowset<InformationTuple> rows = (session.prepare << "select "
         "column_name, column_type, is_nullable from information_schema.columns "
         "where table_schema like :schema and table_name like :table",
@@ -125,6 +128,9 @@ DBManager::RowsetSP DBManager::retrieveNewTuples(std::string schema,
 
     soci::session session(*m_connectionPool_sp);
 
+    if(session.get_backend() == NULL)
+        session.reconnect();
+
     //@workaround: this does not work: timestamp parameter not passed
 //    RowsetSP rows(new soci::rowset<soci::row>((session.prepare << "select * from "
 //        << schema << "." << table << " where update_time > :timestamp "
diff --git a/src/DBManager.h b/src/DBManager.h
index d0f1195..0af36a7 100644
--- a/src/DBManager.h
+++ b/src/DBManager.h
@@ -62,7 +62,7 @@ public:
     virtual void disconnect();
 
 //------------------------------------------------------------------------------
-//  [Public] Retrieve information schema method
+//  [Public] Retrieve from information schema method
 //------------------------------------------------------------------------------
     typedef boost::tuple< boost::optional<std::string>, boost::optional<std::string>,
         boost::optional<std::string> > InformationTuple;
@@ -73,7 +73,7 @@ public:
         std::string) throw(soci::soci_error);
 
 //------------------------------------------------------------------------------
-//  [Public] Search new tuple method
+//  [Public] Retrieve new tuple method
 //------------------------------------------------------------------------------
     typedef boost::shared_ptr< soci::rowset<soci::row> > RowsetSP;
 
-- 
GitLab