Commit 1863d7a2 authored by Marco De Marco's avatar Marco De Marco
Browse files

Validation draft added

parent 794e2f3b
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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));
@@ -80,6 +82,8 @@ void Client::stop()
    }

    m_thread_sp.reset();

    m_dBManager_sp->disconnect();
}

//==============================================================================
+24 −12
Original line number Diff line number Diff line
@@ -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;

@@ -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;
@@ -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
+20 −3
Original line number Diff line number Diff line
@@ -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
@@ -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;
};
+4 −1
Original line number Diff line number Diff line
@@ -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