31#ifndef MYSQLX_DEVAPI_SETTINGS_H
32#define MYSQLX_DEVAPI_SETTINGS_H
40#include "detail/settings.h"
64#define SESS_OPT_ENUM_any(X,N) X = N,
65#define SESS_OPT_ENUM_bool(X,N) X = N,
66#define SESS_OPT_ENUM_num(X,N) X = N,
67#define SESS_OPT_ENUM_str(X,N) X = N,
68#define SESS_OPT_ENUM_bool(X,N) X = N,
73 SESSION_OPTION_LIST(SESS_OPT_ENUM)
86 return m_opt == other.m_opt;
89 bool operator==(Enum opt)
const
94 bool operator!=(Enum opt)
const
117#define CLIENT_OPT_ENUM_any(X,N) X = -N,
118#define CLIENT_OPT_ENUM_bool(X,N) X = -N,
119#define CLIENT_OPT_ENUM_num(X,N) X = -N,
120#define CLIENT_OPT_ENUM_str(X,N) X = -N,
125 using SessionEnum = SessionOption::Enum;
128 CLIENT_OPTION_LIST(CLIENT_OPT_ENUM)
143 ClientOption(SessionEnum opt)
147 bool operator==(
Enum opt)
const
152 bool operator==(SessionEnum opt)
const
154 return SessionOption::operator==(opt);
157 bool operator!=(
Enum opt)
const
162 bool operator!=(SessionEnum opt)
const
164 return SessionOption::operator!=(opt);
167 inline operator int()
169 return SessionOption::operator int();
179std::string OptionName(ClientOption opt)
181#define CLT_OPT_NAME_any(X,N) case ClientOption::X: return #X;
182#define CLT_OPT_NAME_bool(X,N) CLT_OPT_NAME_any(X,N)
183#define CLT_OPT_NAME_num(X,N) CLT_OPT_NAME_any(X,N)
184#define CLT_OPT_NAME_str(X,N) CLT_OPT_NAME_any(X,N)
186#define SESS_OPT_NAME_any(X,N) case SessionOption::X: return #X;
187#define SESS_OPT_NAME_bool(X,N) SESS_OPT_NAME_any(X,N)
188#define SESS_OPT_NAME_num(X,N) SESS_OPT_NAME_any(X,N)
189#define SESS_OPT_NAME_str(X,N) SESS_OPT_NAME_any(X,N)
190#define SESS_OPT_NAME_bool(X,N) SESS_OPT_NAME_any(X,N)
195 CLIENT_OPTION_LIST(CLT_OPT_NAME)
196 SESSION_OPTION_LIST(SESS_OPT_NAME)
199 throw_error(
"Unexpected Option");
return "";
206inline std::string ClientOptionName(ClientOption opt)
208 return OptionName(opt);
211inline std::string SessionOptionName(SessionOption opt)
213 return OptionName(opt);
224#define SSL_ENUM(X,N) X = N,
226 SSL_MODE_LIST(SSL_ENUM)
233std::string SSLModeName(SSLMode m)
235#define MODE_NAME(X,N) case SSLMode::X: return #X;
239 SSL_MODE_LIST(MODE_NAME)
242 std::ostringstream buf;
243 buf <<
"<UKNOWN (" << unsigned(m) <<
")>" << std::ends;
259#define AUTH_ENUM(X,N) X=N,
261 AUTH_METHOD_LIST(AUTH_ENUM)
268std::string AuthMethodName(AuthMethod m)
270#define AUTH_NAME(X,N) case AuthMethod::X: return #X;
274 AUTH_METHOD_LIST(AUTH_NAME)
277 std::ostringstream buf;
278 buf <<
"<UKNOWN (" << unsigned(m) <<
")>" << std::ends;
291enum_class CompressionMode
293#define COMPRESSION_ENUM(X,N) X = N,
295 COMPRESSION_MODE_LIST(COMPRESSION_ENUM)
301std::string CompressionModeName(CompressionMode m)
303#define COMPRESSION_NAME(X,N) case CompressionMode::X: return #X;
307 COMPRESSION_MODE_LIST(COMPRESSION_NAME)
310 std::ostringstream buf;
311 buf <<
"<UKNOWN (" << unsigned(m) <<
")>" << std::ends;
328struct Settings_traits
332 using SSLMode = mysqlx::SSLMode;
333 using AuthMethod = mysqlx::AuthMethod;
334 using CompressionMode = mysqlx::CompressionMode;
336 static std::string get_mode_name(SSLMode mode)
338 return SSLModeName(mode);
341 static std::string get_option_name(COptions opt)
343 return ClientOptionName(opt);
346 static std::string get_auth_name(AuthMethod m)
348 return AuthMethodName(m);
356internal::Settings_detail<internal::Settings_traits>::
357do_set(session_opt_list_t &&opts);
360template<
typename Option,
typename base_iterator>
364 std::pair<Option, mysqlx::Value> m_pair;
367 using iterator_category = std::input_iterator_tag;
368 using value_type = std::pair<Option, mysqlx::Value>;
370 iterator(
const base_iterator &init) : m_it(init) {}
372 iterator(
const iterator &init) : m_it(init.m_it) {}
374 std::pair<Option, mysqlx::Value> &operator*() {
376 m_pair.first =
static_cast<typename Option::Enum
>(el.first);
377 m_pair.second = el.second;
381 std::pair<ClientOption, mysqlx::Value>* operator->()
386 iterator& operator++()
392 iterator& operator--()
398 bool operator !=(
const iterator &other)
400 return m_it != other.m_it;
448 :
private internal::Settings_detail<internal::Settings_traits>
521 Settings_detail::set_from_uri(uri);
535 const std::string &host,
unsigned port,
537 const char *pwd = NULL,
538 const string &db =
string()
542 SessionOption::HOST, host,
543 SessionOption::PORT, port,
544 SessionOption::USER, user
548 set(SessionOption::PWD, std::string(pwd));
551 set(SessionOption::DB, db);
555 const std::string &host,
unsigned port,
557 const std::string &pwd,
558 const string &db =
string()
571 const std::string &host,
573 const char *pwd = NULL,
574 const string &db =
string()
580 const std::string &host,
582 const std::string &pwd,
583 const string &db =
string()
598 const char *pwd = NULL,
599 const string &db =
string()
607 const std::string &pwd,
608 const string &db =
string()
626 typename std::enable_if<
627 std::is_constructible<
SessionSettings, HOST, PORT, USER,
const char*, T...>::value
630 SessionSettings(HOST h, PORT p, USER u,
long, T... args)
631 : SessionSettings(h, p, u, nullptr, args...)
639 typename std::enable_if<
640 std::is_constructible<SessionSettings, PORT, USER,
const char*, T...>::value
643 SessionSettings(PORT p, USER u,
long, T... args)
644 : SessionSettings(p, u, nullptr, args...)
667 template <
typename... R>
668 SessionSettings(SessionOption::Enum opt, R&&...rest)
672 Settings_detail::set<true>(opt, std::forward<R>(rest)...);
680 using iterator = internal::iterator<SessionOption, Settings_detail::iterator>;
685 return Settings_detail::begin();
697 return Settings_detail::end();
712 Value
find(SessionOption opt)
715 return Settings_detail::get(opt);
735 template<
typename... R>
736 void set(SessionOption opt, R&&... rest)
740 Settings_detail::set<true>(opt, std::forward<R>(rest)...);
752 Settings_detail::clear();
764 void erase(SessionOption opt)
767 Settings_detail::erase(
static_cast<int>(opt));
780 return Settings_detail::has_option(opt);
803 :
private internal::Settings_detail<internal::Settings_traits>
808 using Base = internal::Settings_detail<internal::Settings_traits>;
815 using iterator = internal::iterator<ClientOption, Settings_detail::iterator>;
820 return Settings_detail::begin();
832 return Settings_detail::end();
846 Settings_detail::set_from_uri(uri);
860 Settings_detail::set_from_uri(uri);
861 Settings_detail::set_client_opts(opts);
902 Settings_detail::set_from_uri(uri);
903 std::stringstream str_opts;
905 Settings_detail::set_client_opts(str_opts.str());
946 Settings_detail::set_from_uri(uri);
947 Settings_detail::set_client_opts(options);
976 template<
typename...R>
982 Settings_detail::set<false>(opt, std::forward<R>(rest)...);
987 template <
typename... R>
992 Settings_detail::set<false>(opt, std::forward<R>(rest)...);
1007 return Settings_detail::get(opt);
1028 template<
typename OPT,
typename... R>
1029 void set(OPT opt, R&&... rest)
1033 Settings_detail::set<false>(opt, std::forward<R>(rest)...);
1046 Settings_detail::clear();
1058 Settings_detail::erase(
static_cast<int>(opt));
1071 return Settings_detail::has_option(opt);
1083 return Settings_detail::has_option(opt);
Client creation options.
Definition: settings.h:115
Enum
Definition: settings.h:127
void set(OPT opt, R &&... rest)
Set client and session options.
Definition: settings.h:1026
bool has_option(ClientOption::Enum opt)
Check if option opt was defined.
Definition: settings.h:1065
void erase(mysqlx::ClientOption opt)
Remove the given option opt.
Definition: settings.h:1052
Value find(mysqlx::ClientOption opt)
Find the specified option opt and returns its Value.
Definition: settings.h:1001
ClientSettings(const string &uri)
Create client settings from a connection string.
Definition: settings.h:840
void clear()
Clear all settings specified so far.
Definition: settings.h:1040
Session creation options.
Definition: settings.h:63
Enum
Definition: settings.h:72
bool has_option(SessionOption opt)
Check if option opt was defined.
Definition: settings.h:774
Value find(SessionOption opt)
Find the specified option opt and returns its Value.
Definition: settings.h:709
SessionSettings(const string &uri)
Create session settings from a connection string.
Definition: settings.h:515
void erase(SessionOption opt)
Remove all settings for the given option opt.
Definition: settings.h:761
void set(SessionOption opt, R &&... rest)
Set session options.
Definition: settings.h:733
void clear()
Clear all settings specified so far.
Definition: settings.h:746
Value object can store value of scalar type, string, array or document.
Definition: document.h:228
SSLMode
Modes to be used with SSL_MODE option .
Definition: settings.h:223