mirror of
https://github.com/rbock/sqlpp11.git
synced 2024-11-15 20:31:16 +08:00
add is_connection_compatible along with some minor changes
This commit is contained in:
parent
de2204c07f
commit
b05c968bb2
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013 - 2016, Roland Bock
|
* Copyright (c) 2013 - 2017, Roland Bock, Frank Park
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -30,6 +30,8 @@
|
|||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sqlpp11/exception.h>
|
||||||
|
|
||||||
namespace sqlpp
|
namespace sqlpp
|
||||||
{
|
{
|
||||||
@ -39,12 +41,14 @@ namespace sqlpp
|
|||||||
private:
|
private:
|
||||||
std::mutex connection_pool_mutex;
|
std::mutex connection_pool_mutex;
|
||||||
const std::shared_ptr<Connection_config> config;
|
const std::shared_ptr<Connection_config> config;
|
||||||
unsigned int default_pool_size = 0;
|
unsigned int maximum_pool_size = 0;
|
||||||
std::stack<std::unique_ptr<Connection>> free_connections;
|
std::stack<std::unique_ptr<Connection>> free_connections;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
connection_pool(const std::shared_ptr<Connection_config>& config, unsigned int pool_size)
|
connection_pool(const std::shared_ptr<Connection_config>& config, unsigned int pool_size)
|
||||||
: config(config), default_pool_size(pool_size)
|
: config(config), maximum_pool_size(pool_size)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(connection_pool_mutex);
|
std::lock_guard<std::mutex> lock(connection_pool_mutex);
|
||||||
try
|
try
|
||||||
@ -56,8 +60,8 @@ namespace sqlpp
|
|||||||
}
|
}
|
||||||
catch (const sqlpp::exception& e)
|
catch (const sqlpp::exception& e)
|
||||||
{
|
{
|
||||||
std::cerr << "Failed to spawn new connection." << std::endl;
|
std::cerr << "Failed to spawn a new connection." << std::endl;
|
||||||
std::cerr << e.what() << std::endl;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
~connection_pool() = default;
|
~connection_pool() = default;
|
||||||
@ -83,9 +87,8 @@ namespace sqlpp
|
|||||||
}
|
}
|
||||||
catch (const sqlpp::exception& e)
|
catch (const sqlpp::exception& e)
|
||||||
{
|
{
|
||||||
std::cerr << "Failed to spawn new connection." << std::endl;
|
std::cerr << "Failed to spawn a new connection." << std::endl;
|
||||||
std::cerr << e.what() << std::endl;
|
throw;
|
||||||
return std::unique_ptr<Connection>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +97,7 @@ namespace sqlpp
|
|||||||
void free_connection(std::unique_ptr<Connection> connection)
|
void free_connection(std::unique_ptr<Connection> connection)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(connection_pool_mutex);
|
std::lock_guard<std::mutex> lock(connection_pool_mutex);
|
||||||
if (free_connections.size() >= default_pool_size)
|
if (free_connections.size() >= maximum_pool_size)
|
||||||
{
|
{
|
||||||
// Exceeds default size, do nothing and let unique_ptr self destroy.
|
// Exceeds default size, do nothing and let unique_ptr self destroy.
|
||||||
}
|
}
|
||||||
@ -102,7 +105,13 @@ namespace sqlpp
|
|||||||
{
|
{
|
||||||
if (connection.get())
|
if (connection.get())
|
||||||
{
|
{
|
||||||
free_connections.push(std::move(connection));
|
{
|
||||||
|
free_connections.push(std::move(connection));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw sqlpp::exception("Trying to free a connection with incompatible config.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user