Skip to content
Snippets Groups Projects
Commit 02efe805 authored by Steven Murray's avatar Steven Murray
Browse files

ConnFactoryFactory::create() returns a unique_ptr and not a raw pointer

parent fc769b06
No related branches found
No related tags found
No related merge requests found
......@@ -60,6 +60,13 @@ protected:
*/
RdbmsCatalogue(std::unique_ptr<rdbms::ConnPool> connPool);
/**
* Protected constructor only to be called by sub-classes.
*
* @param connFactory The factory for creating new database connections.
*/
//RdbmsCatalogue(std::unique_ptr<rdbms::Factory> connFactory);
public:
/**
......
......@@ -27,15 +27,15 @@ namespace rdbms {
//------------------------------------------------------------------------------
// create
//------------------------------------------------------------------------------
ConnFactory *ConnFactoryFactory::create(const Login &login) {
std::unique_ptr<ConnFactory> ConnFactoryFactory::create(const Login &login) {
try {
switch(login.dbType) {
case rdbms::Login::DBTYPE_IN_MEMORY:
return new SqliteConnFactory(":memory:");
return std::unique_ptr<SqliteConnFactory>(new SqliteConnFactory(":memory:"));
case rdbms::Login::DBTYPE_ORACLE:
return new OcciConnFactory(login.username, login.password, login.database);
return std::unique_ptr<OcciConnFactory>(new OcciConnFactory(login.username, login.password, login.database));
case rdbms::Login::DBTYPE_SQLITE:
return new SqliteConnFactory(login.database);
return std::unique_ptr<SqliteConnFactory>(new SqliteConnFactory(login.database));
case rdbms::Login::DBTYPE_NONE:
throw exception::Exception("Cannot create a catalogue without a database type");
default:
......
......@@ -18,8 +18,10 @@
#pragma once
#include "ConnFactory.hpp"
#include "Login.hpp"
#include "rdbms/ConnFactory.hpp"
#include "rdbms/Login.hpp"
#include <memory>
namespace cta {
namespace rdbms {
......@@ -37,7 +39,7 @@ public:
* connections.
* @return A newly created ConnFactory object.
*/
static ConnFactory *create(const Login &login);
static std::unique_ptr<ConnFactory> create(const Login &login);
}; // class ConnFactoryFactory
......
......@@ -56,10 +56,10 @@ void ConnPool::createConns(const uint64_t nbConns) {
//------------------------------------------------------------------------------
// constructor
//------------------------------------------------------------------------------
ConnPool::ConnPool(ConnFactory *const connFactory, const uint64_t nbConns):
ConnPool::ConnPool(std::unique_ptr<ConnFactory> connFactory, const uint64_t nbConns):
m_connFactory(std::move(connFactory)),
m_nbConns(nbConns) {
try {
m_connFactory.reset(connFactory);
createConns(m_nbConns);
} catch(exception::Exception &ex) {
throw exception::Exception(std::string(__FUNCTION__) + " failed: " + ex.getMessage().str());
......
......@@ -53,7 +53,7 @@ public:
* therefore the destructor of ConnPool will delete the factory.
* @param nbConns The number of database connections within the pool.
*/
ConnPool(ConnFactory *const connFactory, const uint64_t nbConns);
ConnPool(std::unique_ptr<ConnFactory> connFactory, const uint64_t nbConns);
/**
* Destructor.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment