26#ifndef _ROUTER_MYSQL_SESSION_H_
27#define _ROUTER_MYSQL_SESSION_H_
52 operator bool() {
return code_ != 0; }
74template <mysql_option Opt,
class ValueType>
86 constexpr const void *
data()
const {
return std::addressof(
v_); }
89 constexpr void *
data() {
return std::addressof(
v_); }
110template <mysql_option Opt>
120 constexpr const void *
data()
const {
return v_; }
122 constexpr void *
data() {
return std::addressof(v_); }
132template <mysql_option Opt>
143 constexpr const void *
data()
const {
return nullptr; }
145 constexpr void *
data() {
return nullptr; }
157 typedef std::vector<const char *>
Row;
162 static const char kSslModeDisabled[];
163 static const char kSslModePreferred[];
164 static const char kSslModeRequired[];
165 static const char kSslModeVerifyCa[];
166 static const char kSslModeVerifyIdentity[];
173 template <mysql_option Opt>
177 template <mysql_option Opt>
181 template <mysql_option Opt>
185 template <mysql_option Opt>
239 session_->execute(
"START TRANSACTION");
245 session_->execute(
"ROLLBACK");
253 session_->execute(
"COMMIT");
258 session_->execute(
"ROLLBACK");
266 class Error :
public std::runtime_error {
272 Error(
const char *error,
unsigned int code,
273 const std::string message =
"<not set>")
274 :
std::runtime_error(
error), code_(code), message_(message) {}
276 Error(
const std::string &error,
unsigned int code,
277 const std::string &message =
"<not set>")
278 :
std::runtime_error(
error), code_(code), message_(message) {}
280 unsigned int code()
const {
return code_; }
281 std::string
message()
const {
return message_; }
292 size_t size()
const {
return row_.size(); }
310 virtual void log(
const std::string &msg) = 0;
314 virtual void log(
const std::string & )
override {}
318 virtual void log(
const std::string &msg)
override;
321 MySQLSession(std::unique_ptr<LoggingStrategy> logging_strategy =
322 std::make_unique<LoggingStrategyNone>());
326 std::string ssl_mode);
331 const std::string &tls_version,
332 const std::string &ssl_cipher,
333 const std::string &ca,
const std::string &capath,
334 const std::string &crl,
335 const std::string &crlpath);
338 std::string tls_version()
const;
339 std::string ssl_cipher()
const;
340 std::string ssl_ca()
const;
341 std::string ssl_capath()
const;
342 std::string ssl_crl()
const;
343 std::string ssl_crlpath()
const;
345 std::string ssl_cert()
const;
346 std::string ssl_key()
const;
349 int read_timeout()
const;
352 virtual void set_ssl_cert(
const std::string &cert,
const std::string &
key);
367 template <
class SettableMysqlOption>
369 if (0 !=
mysql_options(connection_, opt.option(), opt.data())) {
393 template <
class GettableMysqlOption>
403 const std::string &username,
const std::string &
password,
404 const std::string &unix_socket,
405 const std::string &default_schema,
408 virtual void disconnect();
418 const std::string &
query);
420 const std::string &
query,
const RowProcessor &processor,
421 const FieldValidator &validator);
422 virtual std::unique_ptr<MySQLSession::ResultRow> query_one(
423 const std::string &
query,
424 const FieldValidator &validator);
430 std::unique_ptr<MySQLSession::ResultRow>
query_one(
const std::string &stmt) {
431 return query_one(stmt, [](
unsigned,
MYSQL_FIELD *) {});
434 virtual uint64_t last_insert_id() noexcept;
436 virtual
unsigned warning_count() noexcept;
438 virtual
std::
string quote(const
std::
string &s,
char qchar = '\'') const;
440 virtual
bool is_connected() noexcept {
return connection_ && connected_; }
441 const std::string &
get_address() noexcept {
return connection_address_; }
444 virtual unsigned int last_errno();
446 virtual const char *ssl_cipher();
489 const std::string &
q);
495 const std::string &
q);
Definition: mysql_session.h:266
Error(const char *error, unsigned int code, const std::string message="<not set>")
Definition: mysql_session.h:272
std::string message() const
Definition: mysql_session.h:281
unsigned int code() const
Definition: mysql_session.h:280
const std::string message_
Definition: mysql_session.h:285
Error(const std::string &error, unsigned int code, const std::string &message="<not set>")
Definition: mysql_session.h:276
const unsigned int code_
Definition: mysql_session.h:284
Definition: mysql_session.h:468
void operator()(MYSQL_RES *res)
Definition: mysql_session.h:470
Definition: mysql_session.h:288
ResultRow(Row row)
Definition: mysql_session.h:290
size_t size() const
Definition: mysql_session.h:292
Row row_
Definition: mysql_session.h:296
virtual ~ResultRow()=default
const char *& operator[](size_t i)
Definition: mysql_session.h:293
Definition: mysql_session.h:236
void commit()
Definition: mysql_session.h:252
Transaction(MySQLSession *session)
Definition: mysql_session.h:238
void rollback()
Definition: mysql_session.h:257
~Transaction()
Definition: mysql_session.h:242
MySQLSession * session_
Definition: mysql_session.h:263
Definition: mysql_session.h:153
std::function< void(unsigned, MYSQL_FIELD *)> FieldValidator
Definition: mysql_session.h:159
std::string connection_address_
Definition: mysql_session.h:463
virtual MYSQL * raw_mysql() noexcept
Definition: mysql_session.h:466
bool get_option(GettableMysqlOption &opt) const
get a mysql option.
Definition: mysql_session.h:394
MYSQL * connection_
Definition: mysql_session.h:461
std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &stmt)
Definition: mysql_session.h:430
std::unique_ptr< MYSQL_RES, MYSQL_RES_Deleter > mysql_result_type
Definition: mysql_session.h:473
std::function< bool(const Row &)> RowProcessor
Definition: mysql_session.h:158
stdx::expected< void, MysqlError > set_option(const SettableMysqlOption &opt)
set a mysql option.
Definition: mysql_session.h:368
void query(const std::string &stmt, const RowProcessor &processor)
Definition: mysql_session.h:426
std::string default_schema
Definition: mysql_session.h:458
SQLLogFilter log_filter_
Definition: mysql_session.h:464
const std::string & get_address() noexcept
Definition: mysql_session.h:441
bool connected_
Definition: mysql_session.h:462
std::string host
Definition: mysql_session.h:455
std::unique_ptr< LoggingStrategy > logging_strategy_
Definition: mysql_session.h:449
std::string unix_socket
Definition: mysql_session.h:457
std::vector< const char * > Row
Definition: mysql_session.h:157
Definition: mysql_session.h:44
MysqlError(unsigned int code, std::string message, std::string sql_state)
Definition: mysql_session.h:47
unsigned int value() const
Definition: mysql_session.h:56
std::string message() const
Definition: mysql_session.h:54
std::string sql_state() const
Definition: mysql_session.h:55
std::string sql_state_
Definition: mysql_session.h:61
unsigned int code_
Definition: mysql_session.h:59
std::string message_
Definition: mysql_session.h:60
A SQLLogFilter allows to replace substrings defined by a set of hardcoded regular expressions with '*...
Definition: log_filter.h:77
gettable, settable option for 'const char *' based mysql_option's.
Definition: mysql_session.h:111
constexpr const void * data() const
Definition: mysql_session.h:120
const char * value_type
Definition: mysql_session.h:113
constexpr void * data()
Definition: mysql_session.h:122
constexpr Option(value_type v)
Definition: mysql_session.h:116
constexpr value_type value() const
Definition: mysql_session.h:126
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:118
constexpr void value(value_type v)
Definition: mysql_session.h:124
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:141
constexpr value_type value() const
Definition: mysql_session.h:147
constexpr void * data()
Definition: mysql_session.h:145
std::nullptr_t value_type
Definition: mysql_session.h:135
constexpr Option(value_type)
Definition: mysql_session.h:139
constexpr const void * data() const
Definition: mysql_session.h:143
gettable, settable option for mysql_option's.
Definition: mysql_session.h:75
constexpr Option()=default
constexpr Option(value_type v)
Definition: mysql_session.h:80
constexpr const void * data() const
Definition: mysql_session.h:86
ValueType value_type
Definition: mysql_session.h:77
constexpr void * data()
Definition: mysql_session.h:89
value_type v_
Definition: mysql_session.h:98
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:83
constexpr value_type value() const
Definition: mysql_session.h:95
constexpr void value(value_type v)
Definition: mysql_session.h:92
Definition: expected.h:944
static bool execute(MYSQL_STMT *stmt, char *packet, ulong length, bool send_param_count)
Auxiliary function to send COM_STMT_EXECUTE packet to server and read reply.
Definition: libmysql.cc:1718
static char * query
Definition: myisam_ftdump.cc:45
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
const char *STDCALL mysql_sqlstate(MYSQL *mysql)
Definition: client.cc:9409
unsigned int STDCALL mysql_errno(MYSQL *mysql)
Definition: client.cc:9086
mysql_option
Definition: mysql.h:170
int STDCALL mysql_get_option(MYSQL *mysql, enum mysql_option option, const void *arg)
Return the current values for the options settable through mysql_options()
Definition: client.cc:8789
const char *STDCALL mysql_error(MYSQL *mysql)
Definition: client.cc:9090
void STDCALL mysql_free_result(MYSQL_RES *result)
Definition: client.cc:1948
int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)
Definition: client.cc:8455
mysql_ssl_mode
Definition: mysql.h:271
static char * password
Definition: mysql_secure_installation.cc:56
const char * host
Definition: mysqladmin.cc:59
ulong connect_timeout
Definition: mysqld.cc:1329
Definition: authentication.cc:36
int last_error()
get last socket error.
Definition: socket_error.h:82
stdx::expected< void, error_type > connect(native_handle_type native_handle, const struct sockaddr *addr, size_t addr_len)
wrap connect() in a portable way.
Definition: socket.h:353
Definition: gcs_xcom_synode.h:64
constexpr auto make_unexpected(E &&e) -> unexpected< std::decay_t< E > >
Definition: expected.h:125
static int is_connected(connection_descriptor *con)
Definition: node_connection.h:94
required string key
Definition: replication_asynchronous_connection_failover.proto:60
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
#define ROUTER_LIB_EXPORT
Definition: router_export.h:15
constexpr const char * ssl_mode_to_string(SslMode mode)
Definition: ssl_mode.h:44
Definition: mysql_session.h:317
Definition: mysql_session.h:313
virtual void log(const std::string &) override
Definition: mysql_session.h:314
Definition: mysql_session.h:299
LoggingStrategy(const LoggingStrategy &)=default
LoggingStrategy & operator=(const LoggingStrategy &)=default
virtual ~LoggingStrategy()=default
LoggingStrategy(LoggingStrategy &&)=default
LoggingStrategy()=default
virtual void log(const std::string &msg)=0
LoggingStrategy & operator=(LoggingStrategy &&)=default
synode_no q[FIFO_SIZE]
Definition: xcom_base.cc:4059