Loading proto/Request.proto +2 −12 Original line number Diff line number Diff line Loading @@ -32,19 +32,9 @@ message Request message Column { enum Type { DT_DOUBLE = 0; DT_INTEGER = 1; DT_UNSIGNED_LONG = 2; DT_LONG_LONG = 3; DT_STRING = 4; DT_DATE = 5; } required string name = 1; required Type type = 2; required bool nullable = 3; required string type = 2; required string nullable = 3; } repeated Column columns = 3; Loading src/Client.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ void Client::start() { DEBUG_STREAM << "Client::start()" << endl; m_dBManager_sp->connect(); m_ioService.reset(); m_work_sp.reset(new boost::asio::io_service::work(m_ioService)); Loading @@ -80,6 +82,8 @@ void Client::stop() } m_thread_sp.reset(); m_dBManager_sp->disconnect(); } //============================================================================== Loading src/DBManager.cpp +24 −12 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ namespace MetadataImporter_ns //============================================================================== DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) : Tango::LogAdapter(deviceImpl_p), m_deviceImpl_p(deviceImpl_p), m_configuration_sp(configuration_sp) m_configuration_sp(configuration_sp) { DEBUG_STREAM << "DBManager::DBManager()" << endl; Loading Loading @@ -46,12 +46,13 @@ void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); connection << " dbname=" << m_configuration_sp->getDatabaseSchema(); #ifdef VERBOSE_DEBUG INFO_STREAM << "CONNECTION: " << connection.str() << endl; Loading @@ -68,23 +69,34 @@ void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); m_session_sp->close(); } //============================================================================== // DBManager::() // DBManager::retrieveInformation() //============================================================================== DBManager::InformationList DBManager::retrieveInformation(std::string schema, std::string table) throw(soci::soci_error) { DEBUG_STREAM << "DBManager::retrieveInformation()" << endl; //============================================================================== // DBManager::() //============================================================================== boost::mutex::scoped_lock lock(m_connectionPoolMutex); //============================================================================== // DBManager::() //============================================================================== if(m_session_sp->get_backend() == NULL) m_session_sp->reconnect(); //============================================================================== // DBManager::() //============================================================================== soci::rowset<InformationTuple> rows = (m_session_sp->prepare << "select " "column_name, column_type, is_nullable from information_schema.columns " "where table_schema like :schema and table_name like :table", soci::use(schema, "schema"), soci::use(table, "table") ); InformationList informationList; std::copy(rows.begin(), rows.end(), std::back_inserter(informationList)); return informationList; } } //namespace src/DBManager.h +20 −3 Original line number Diff line number Diff line Loading @@ -12,9 +12,19 @@ #include <tango.h> #include <ctime> #include <boost/tuple/tuple.hpp> #include <boost/optional/optional.hpp> #include <boost/scoped_ptr.hpp> #include <boost/thread/mutex.hpp> #include <soci/soci.h> #include <soci/error.h> #include <soci/row.h> #include <soci/rowset.h> #include <soci/boost-tuple.h> #include <soci/boost-optional.h> #include <soci/session.h> namespace MetadataImporter_ns Loading Loading @@ -60,17 +70,24 @@ public: //------------------------------------------------------------------------------ // [Public] Queries methods //------------------------------------------------------------------------------ typedef boost::tuple< boost::optional<std::string>, boost::optional<std::string>, boost::optional<std::string> > InformationTuple; typedef std::vector< InformationTuple > InformationList; virtual InformationList retrieveInformation(std::string, std::string) throw(soci::soci_error); protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Tango server class pointer Tango::DeviceImpl* m_deviceImpl_p; //Configuration shared pointer Configuration::SP m_configuration_sp; //Connection mutex boost::mutex m_connectionPoolMutex; //Database connection scoped pointer boost::scoped_ptr<soci::session> m_session_sp; }; Loading src/PlainClient.h +4 −1 Original line number Diff line number Diff line Loading @@ -26,10 +26,13 @@ protected: public: //------------------------------------------------------------------------------ // [Public] Users methods // [Public] Class creation method //------------------------------------------------------------------------------ static Client::SP create(Tango::DeviceImpl*, Configuration::SP); //------------------------------------------------------------------------------ // [Public] Thread management methods //------------------------------------------------------------------------------ virtual void start(); virtual void stop(); Loading Loading
proto/Request.proto +2 −12 Original line number Diff line number Diff line Loading @@ -32,19 +32,9 @@ message Request message Column { enum Type { DT_DOUBLE = 0; DT_INTEGER = 1; DT_UNSIGNED_LONG = 2; DT_LONG_LONG = 3; DT_STRING = 4; DT_DATE = 5; } required string name = 1; required Type type = 2; required bool nullable = 3; required string type = 2; required string nullable = 3; } repeated Column columns = 3; Loading
src/Client.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ void Client::start() { DEBUG_STREAM << "Client::start()" << endl; m_dBManager_sp->connect(); m_ioService.reset(); m_work_sp.reset(new boost::asio::io_service::work(m_ioService)); Loading @@ -80,6 +82,8 @@ void Client::stop() } m_thread_sp.reset(); m_dBManager_sp->disconnect(); } //============================================================================== Loading
src/DBManager.cpp +24 −12 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ namespace MetadataImporter_ns //============================================================================== DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p, Configuration::SP configuration_sp) : Tango::LogAdapter(deviceImpl_p), m_deviceImpl_p(deviceImpl_p), m_configuration_sp(configuration_sp) m_configuration_sp(configuration_sp) { DEBUG_STREAM << "DBManager::DBManager()" << endl; Loading Loading @@ -46,12 +46,13 @@ void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); std::stringstream connection; connection << " host=" << m_configuration_sp->getDatabaseHost(); connection << " port=" << m_configuration_sp->getDatabasePort(); connection << " user=" << m_configuration_sp->getDatabaseUsername(); connection << " password=" << m_configuration_sp->getDatabasePassword(); connection << " dbname=" << m_configuration_sp->getDatabaseSchema(); #ifdef VERBOSE_DEBUG INFO_STREAM << "CONNECTION: " << connection.str() << endl; Loading @@ -68,23 +69,34 @@ void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; boost::mutex::scoped_lock lock(m_connectionPoolMutex); m_session_sp->close(); } //============================================================================== // DBManager::() // DBManager::retrieveInformation() //============================================================================== DBManager::InformationList DBManager::retrieveInformation(std::string schema, std::string table) throw(soci::soci_error) { DEBUG_STREAM << "DBManager::retrieveInformation()" << endl; //============================================================================== // DBManager::() //============================================================================== boost::mutex::scoped_lock lock(m_connectionPoolMutex); //============================================================================== // DBManager::() //============================================================================== if(m_session_sp->get_backend() == NULL) m_session_sp->reconnect(); //============================================================================== // DBManager::() //============================================================================== soci::rowset<InformationTuple> rows = (m_session_sp->prepare << "select " "column_name, column_type, is_nullable from information_schema.columns " "where table_schema like :schema and table_name like :table", soci::use(schema, "schema"), soci::use(table, "table") ); InformationList informationList; std::copy(rows.begin(), rows.end(), std::back_inserter(informationList)); return informationList; } } //namespace
src/DBManager.h +20 −3 Original line number Diff line number Diff line Loading @@ -12,9 +12,19 @@ #include <tango.h> #include <ctime> #include <boost/tuple/tuple.hpp> #include <boost/optional/optional.hpp> #include <boost/scoped_ptr.hpp> #include <boost/thread/mutex.hpp> #include <soci/soci.h> #include <soci/error.h> #include <soci/row.h> #include <soci/rowset.h> #include <soci/boost-tuple.h> #include <soci/boost-optional.h> #include <soci/session.h> namespace MetadataImporter_ns Loading Loading @@ -60,17 +70,24 @@ public: //------------------------------------------------------------------------------ // [Public] Queries methods //------------------------------------------------------------------------------ typedef boost::tuple< boost::optional<std::string>, boost::optional<std::string>, boost::optional<std::string> > InformationTuple; typedef std::vector< InformationTuple > InformationList; virtual InformationList retrieveInformation(std::string, std::string) throw(soci::soci_error); protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Tango server class pointer Tango::DeviceImpl* m_deviceImpl_p; //Configuration shared pointer Configuration::SP m_configuration_sp; //Connection mutex boost::mutex m_connectionPoolMutex; //Database connection scoped pointer boost::scoped_ptr<soci::session> m_session_sp; }; Loading
src/PlainClient.h +4 −1 Original line number Diff line number Diff line Loading @@ -26,10 +26,13 @@ protected: public: //------------------------------------------------------------------------------ // [Public] Users methods // [Public] Class creation method //------------------------------------------------------------------------------ static Client::SP create(Tango::DeviceImpl*, Configuration::SP); //------------------------------------------------------------------------------ // [Public] Thread management methods //------------------------------------------------------------------------------ virtual void start(); virtual void stop(); Loading