File indexing completed on 2025-04-19 08:33:50
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_MYSQL_IMPL_INTERNAL_CONNECTION_POOL_INTERNAL_POOL_PARAMS_HPP
0009 #define BOOST_MYSQL_IMPL_INTERNAL_CONNECTION_POOL_INTERNAL_POOL_PARAMS_HPP
0010
0011 #include <boost/mysql/any_connection.hpp>
0012 #include <boost/mysql/connect_params.hpp>
0013 #include <boost/mysql/handshake_params.hpp>
0014 #include <boost/mysql/pool_params.hpp>
0015 #include <boost/mysql/ssl_mode.hpp>
0016
0017 #include <boost/asio/ssl/context.hpp>
0018 #include <boost/optional/optional.hpp>
0019 #include <boost/throw_exception.hpp>
0020
0021 #include <chrono>
0022 #include <cstddef>
0023 #include <stdexcept>
0024 #include <string>
0025
0026 namespace boost {
0027 namespace mysql {
0028 namespace detail {
0029
0030
0031 struct internal_pool_params
0032 {
0033 connect_params connect_config;
0034 optional<asio::ssl::context> ssl_ctx;
0035 std::size_t initial_buffer_size;
0036 std::size_t initial_size;
0037 std::size_t max_size;
0038 std::chrono::steady_clock::duration connect_timeout;
0039 std::chrono::steady_clock::duration ping_timeout;
0040 std::chrono::steady_clock::duration retry_interval;
0041 std::chrono::steady_clock::duration ping_interval;
0042
0043 any_connection_params make_ctor_params() noexcept
0044 {
0045 any_connection_params res;
0046 res.ssl_context = ssl_ctx.get_ptr();
0047 res.initial_buffer_size = initial_buffer_size;
0048 return res;
0049 }
0050 };
0051
0052 inline void check_validity(const pool_params& params)
0053 {
0054 const char* msg = nullptr;
0055 if (params.max_size == 0)
0056 msg = "pool_params::max_size must be greater than zero";
0057 else if (params.max_size < params.initial_size)
0058 msg = "pool_params::max_size must be greater than pool_params::initial_size";
0059 else if (params.connect_timeout.count() < 0)
0060 msg = "pool_params::connect_timeout must not be negative";
0061 else if (params.retry_interval.count() <= 0)
0062 msg = "pool_params::retry_interval must be greater than zero";
0063 else if (params.ping_interval.count() < 0)
0064 msg = "pool_params::ping_interval must not be negative";
0065 else if (params.ping_timeout.count() < 0)
0066 msg = "pool_params::ping_timeout must not be negative";
0067
0068 if (msg != nullptr)
0069 {
0070 BOOST_THROW_EXCEPTION(std::invalid_argument(msg));
0071 }
0072 }
0073
0074 inline internal_pool_params make_internal_pool_params(pool_params&& params)
0075 {
0076 check_validity(params);
0077
0078 connect_params connect_prms;
0079 connect_prms.server_address = std::move(params.server_address);
0080 connect_prms.username = std::move(params.username);
0081 connect_prms.password = std::move(params.password);
0082 connect_prms.database = std::move(params.database);
0083 connect_prms.ssl = params.ssl;
0084 connect_prms.multi_queries = params.multi_queries;
0085
0086 return {
0087 std::move(connect_prms),
0088 std::move(params.ssl_ctx),
0089 params.initial_buffer_size,
0090 params.initial_size,
0091 params.max_size,
0092 params.connect_timeout,
0093 params.ping_timeout,
0094 params.retry_interval,
0095 params.ping_interval,
0096 };
0097 }
0098
0099 }
0100 }
0101 }
0102
0103 #endif