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,
75 SESSION_OPTION_LIST(SESS_OPT_ENUM)
88 return m_opt == other.m_opt;
91 bool operator==(Enum opt)
const
96 bool operator!=(Enum opt)
const
119#define CLIENT_OPT_ENUM_any(X,N) X = -N,
120#define CLIENT_OPT_ENUM_bool(X,N) X = -N,
121#define CLIENT_OPT_ENUM_num(X,N) X = -N,
122#define CLIENT_OPT_ENUM_str(X,N) X = -N,
127 using SessionEnum = SessionOption::Enum;
132 CLIENT_OPTION_LIST(CLIENT_OPT_ENUM)
147 ClientOption(SessionEnum opt)
151 bool operator==(
Enum opt)
const
156 bool operator==(SessionEnum opt)
const
158 return SessionOption::operator==(opt);
161 bool operator!=(
Enum opt)
const
166 bool operator!=(SessionEnum opt)
const
168 return SessionOption::operator!=(opt);
171 inline operator int()
173 return SessionOption::operator int();
183std::string OptionName(ClientOption opt)
185#define CLT_OPT_NAME_any(X,N) case ClientOption::X: return #X;
186#define CLT_OPT_NAME_bool(X,N) CLT_OPT_NAME_any(X,N)
187#define CLT_OPT_NAME_num(X,N) CLT_OPT_NAME_any(X,N)
188#define CLT_OPT_NAME_str(X,N) CLT_OPT_NAME_any(X,N)
190#define SESS_OPT_NAME_any(X,N) case SessionOption::X: return #X;
191#define SESS_OPT_NAME_bool(X,N) SESS_OPT_NAME_any(X,N)
192#define SESS_OPT_NAME_num(X,N) SESS_OPT_NAME_any(X,N)
193#define SESS_OPT_NAME_str(X,N) SESS_OPT_NAME_any(X,N)
194#define SESS_OPT_NAME_bool(X,N) SESS_OPT_NAME_any(X,N)
199 CLIENT_OPTION_LIST(CLT_OPT_NAME)
200 SESSION_OPTION_LIST(SESS_OPT_NAME)
203 throw_error(
"Unexpected Option");
return "";
210inline std::string ClientOptionName(ClientOption opt)
212 return OptionName(opt);
215inline std::string SessionOptionName(SessionOption opt)
217 return OptionName(opt);
228#define SSL_ENUM(X,N) X = N,
230 SSL_MODE_LIST(SSL_ENUM)
237std::string SSLModeName(SSLMode m)
239#define MODE_NAME(X,N) case SSLMode::X: return #X;
243 SSL_MODE_LIST(MODE_NAME)
246 std::ostringstream buf;
247 buf <<
"<UKNOWN (" << unsigned(m) <<
")>" << std::ends;
263#define AUTH_ENUM(X,N) X=N,
265 AUTH_METHOD_LIST(AUTH_ENUM)
272std::string AuthMethodName(AuthMethod m)
274#define AUTH_NAME(X,N) case AuthMethod::X: return #X;
278 AUTH_METHOD_LIST(AUTH_NAME)
281 std::ostringstream buf;
282 buf <<
"<UKNOWN (" << unsigned(m) <<
")>" << std::ends;
295enum_class CompressionMode
297#define COMPRESSION_ENUM(X,N) X = N,
299 COMPRESSION_MODE_LIST(COMPRESSION_ENUM)
305std::string CompressionModeName(CompressionMode m)
307#define COMPRESSION_NAME(X,N) case CompressionMode::X: return #X;
311 COMPRESSION_MODE_LIST(COMPRESSION_NAME)
314 std::ostringstream buf;
315 buf <<
"<UKNOWN (" << unsigned(m) <<
")>" << std::ends;
332struct Settings_traits
336 using SSLMode = mysqlx::SSLMode;
337 using AuthMethod = mysqlx::AuthMethod;
338 using CompressionMode = mysqlx::CompressionMode;
340 static std::string get_mode_name(SSLMode mode)
342 return SSLModeName(mode);
345 static std::string get_option_name(COptions opt)
347 return ClientOptionName(opt);
350 static std::string get_auth_name(AuthMethod m)
352 return AuthMethodName(m);
360internal::Settings_detail<internal::Settings_traits>::
361do_set(session_opt_list_t &&opts);
364template<
typename Option,
typename base_iterator>
368 std::pair<Option, mysqlx::Value> m_pair;
371 using iterator_category = std::input_iterator_tag;
372 using value_type = std::pair<Option, mysqlx::Value>;
374 iterator(
const base_iterator &init) : m_it(init) {}
376 iterator(
const iterator &init) : m_it(init.m_it) {}
378 std::pair<Option, mysqlx::Value> &operator*() {
380 m_pair.first =
static_cast<typename Option::Enum
>(el.first);
381 m_pair.second = el.second;
385 std::pair<ClientOption, mysqlx::Value>* operator->()
390 iterator& operator++()
396 iterator& operator--()
402 bool operator !=(
const iterator &other)
404 return m_it != other.m_it;
452 :
private internal::Settings_detail<internal::Settings_traits>
527 Settings_detail::set_from_uri(uri);
541 const std::string &host,
unsigned port,
543 const char *pwd = NULL,
544 const string &db =
string()
548 SessionOption::HOST, host,
549 SessionOption::PORT, port,
550 SessionOption::USER, user
554 set(SessionOption::PWD, std::string(pwd));
557 set(SessionOption::DB, db);
561 const std::string &host,
unsigned port,
563 const std::string &pwd,
564 const string &db =
string()
577 const std::string &host,
579 const char *pwd = NULL,
580 const string &db =
string()
586 const std::string &host,
588 const std::string &pwd,
589 const string &db =
string()
604 const char *pwd = NULL,
605 const string &db =
string()
613 const std::string &pwd,
614 const string &db =
string()
632 typename std::enable_if<
633 std::is_constructible<
SessionSettings, HOST, PORT, USER,
const char*, T...>::value
636 SessionSettings(HOST h, PORT p, USER u,
long, T... args)
637 : SessionSettings(h, p, u, nullptr, args...)
645 typename std::enable_if<
646 std::is_constructible<SessionSettings, PORT, USER,
const char*, T...>::value
649 SessionSettings(PORT p, USER u,
long, T... args)
650 : SessionSettings(p, u, nullptr, args...)
673 template <
typename... R>
674 SessionSettings(SessionOption::Enum opt, R&&...rest)
678 Settings_detail::set<true>(opt, std::forward<R>(rest)...);
686 using iterator = internal::iterator<SessionOption, Settings_detail::iterator>;
691 return Settings_detail::begin();
703 return Settings_detail::end();
718 Value
find(SessionOption opt)
721 return Settings_detail::get(opt);
741 template<
typename... R>
742 void set(SessionOption opt, R&&... rest)
746 Settings_detail::set<true>(opt, std::forward<R>(rest)...);
758 Settings_detail::clear();
770 void erase(SessionOption opt)
773 Settings_detail::erase(
static_cast<int>(opt));
786 return Settings_detail::has_option(opt);
809 :
private internal::Settings_detail<internal::Settings_traits>
814 using Base = internal::Settings_detail<internal::Settings_traits>;
821 using iterator = internal::iterator<ClientOption, Settings_detail::iterator>;
826 return Settings_detail::begin();
838 return Settings_detail::end();
852 Settings_detail::set_from_uri(uri);
866 Settings_detail::set_from_uri(uri);
867 Settings_detail::set_client_opts(opts);
908 Settings_detail::set_from_uri(uri);
909 std::stringstream str_opts;
911 Settings_detail::set_client_opts(str_opts.str());
952 Settings_detail::set_from_uri(uri);
953 Settings_detail::set_client_opts(options);
982 template<
typename...R>
988 Settings_detail::set<false>(opt, std::forward<R>(rest)...);
993 template <
typename... R>
998 Settings_detail::set<false>(opt, std::forward<R>(rest)...);
1013 return Settings_detail::get(opt);
1034 template<
typename OPT,
typename... R>
1035 void set(OPT opt, R&&... rest)
1039 Settings_detail::set<false>(opt, std::forward<R>(rest)...);
1052 Settings_detail::clear();
1064 Settings_detail::erase(
static_cast<int>(opt));
1077 return Settings_detail::has_option(opt);
1089 return Settings_detail::has_option(opt);
Client creation options.
Definition: settings.h:117
void set(OPT opt, R &&... rest)
Set client and session options.
Definition: settings.h:1032
bool has_option(ClientOption::Enum opt)
Check if option opt was defined.
Definition: settings.h:1071
void erase(mysqlx::ClientOption opt)
Remove the given option opt.
Definition: settings.h:1058
Value find(mysqlx::ClientOption opt)
Find the specified option opt and returns its Value.
Definition: settings.h:1007
ClientSettings(const string &uri)
Create client settings from a connection string.
Definition: settings.h:846
void clear()
Clear all settings specified so far.
Definition: settings.h:1046
Session creation options.
Definition: settings.h:63
Enum
Possible session creation options.
Definition: settings.h:74
bool has_option(SessionOption opt)
Check if option opt was defined.
Definition: settings.h:780
Value find(SessionOption opt)
Find the specified option opt and returns its Value.
Definition: settings.h:715
SessionSettings(const string &uri)
Create session settings from a connection string.
Definition: settings.h:521
void erase(SessionOption opt)
Remove all settings for the given option opt.
Definition: settings.h:767
void set(SessionOption opt, R &&... rest)
Set session options.
Definition: settings.h:739
void clear()
Clear all settings specified so far.
Definition: settings.h:752
Value object can store value of scalar type, string, array or document.
Definition: document.h:230
SSLMode
Modes to be used with SSL_MODE option .
Definition: settings.h:227