26#ifndef _ROUTER_MYSQL_SESSION_H_
27#define _ROUTER_MYSQL_SESSION_H_
53 operator bool() {
return code_ != 0; }
75template <mysql_option Opt,
class ValueType>
87 constexpr const void *
data()
const {
return std::addressof(
v_); }
90 constexpr void *
data() {
return std::addressof(
v_); }
111template <mysql_option Opt>
121 constexpr const void *
data()
const {
return v_; }
123 constexpr void *
data() {
return std::addressof(v_); }
133template <mysql_option Opt>
144 constexpr const void *
data()
const {
return nullptr; }
146 constexpr void *
data() {
return nullptr; }
158 typedef std::vector<const char *>
Row;
163 static const char kSslModeDisabled[];
164 static const char kSslModePreferred[];
165 static const char kSslModeRequired[];
166 static const char kSslModeVerifyCa[];
167 static const char kSslModeVerifyIdentity[];
174 template <mysql_option Opt>
178 template <mysql_option Opt>
182 template <mysql_option Opt>
186 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(); }
303 std::string ssl_mode);
308 const std::string &tls_version,
309 const std::string &ssl_cipher,
310 const std::string &ca,
const std::string &capath,
311 const std::string &crl,
312 const std::string &crlpath);
315 std::string tls_version()
const;
316 std::string ssl_cipher()
const;
317 std::string ssl_ca()
const;
318 std::string ssl_capath()
const;
319 std::string ssl_crl()
const;
320 std::string ssl_crlpath()
const;
322 std::string ssl_cert()
const;
323 std::string ssl_key()
const;
326 int read_timeout()
const;
329 virtual void set_ssl_cert(
const std::string &cert,
const std::string &
key);
344 template <
class SettableMysqlOption>
346 if (0 !=
mysql_options(connection_, opt.option(), opt.data())) {
370 template <
class GettableMysqlOption>
380 const std::string &username,
const std::string &
password,
381 const std::string &unix_socket,
382 const std::string &default_schema,
395 const std::string &
query);
397 const std::string &
query,
const RowProcessor &processor,
398 const FieldValidator &validator);
399 virtual std::unique_ptr<MySQLSession::ResultRow> query_one(
400 const std::string &
query,
401 const FieldValidator &validator);
407 std::unique_ptr<MySQLSession::ResultRow>
query_one(
const std::string &stmt) {
408 return query_one(stmt, [](
unsigned,
MYSQL_FIELD *) {});
411 virtual uint64_t last_insert_id() noexcept;
413 virtual
unsigned warning_count() noexcept;
415 virtual
std::
string quote(const
std::
string &s,
char qchar = '\'') const;
417 virtual
bool is_connected() noexcept {
return connection_ && connected_; }
418 const std::string &
get_address() noexcept {
return connection_address_; }
421 virtual unsigned int last_errno();
423 virtual const char *ssl_cipher();
425 virtual bool is_ssl_session_reused();
465 const std::string &
q);
471 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:444
void operator()(MYSQL_RES *res)
Definition: mysql_session.h:446
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:154
std::function< void(unsigned, MYSQL_FIELD *)> FieldValidator
Definition: mysql_session.h:160
std::string connection_address_
Definition: mysql_session.h:441
bool get_option(GettableMysqlOption &opt) const
get a mysql option.
Definition: mysql_session.h:371
MYSQL * connection_
Definition: mysql_session.h:439
std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &stmt)
Definition: mysql_session.h:407
std::unique_ptr< MYSQL_RES, MYSQL_RES_Deleter > mysql_result_type
Definition: mysql_session.h:449
std::function< bool(const Row &)> RowProcessor
Definition: mysql_session.h:159
stdx::expected< void, MysqlError > set_option(const SettableMysqlOption &opt)
set a mysql option.
Definition: mysql_session.h:345
void query(const std::string &stmt, const RowProcessor &processor)
Definition: mysql_session.h:403
std::string default_schema
Definition: mysql_session.h:436
SQLLogFilter log_filter_
Definition: mysql_session.h:442
const std::string & get_address() noexcept
Definition: mysql_session.h:418
bool connected_
Definition: mysql_session.h:440
std::string host
Definition: mysql_session.h:433
std::string unix_socket
Definition: mysql_session.h:435
std::vector< const char * > Row
Definition: mysql_session.h:158
Definition: mysql_session.h:45
MysqlError(unsigned int code, std::string message, std::string sql_state)
Definition: mysql_session.h:48
unsigned int value() const
Definition: mysql_session.h:57
std::string message() const
Definition: mysql_session.h:55
std::string sql_state() const
Definition: mysql_session.h:56
std::string sql_state_
Definition: mysql_session.h:62
unsigned int code_
Definition: mysql_session.h:60
std::string message_
Definition: mysql_session.h:61
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:112
constexpr const void * data() const
Definition: mysql_session.h:121
const char * value_type
Definition: mysql_session.h:114
constexpr void * data()
Definition: mysql_session.h:123
constexpr Option(value_type v)
Definition: mysql_session.h:117
constexpr value_type value() const
Definition: mysql_session.h:127
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:119
constexpr void value(value_type v)
Definition: mysql_session.h:125
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:142
constexpr value_type value() const
Definition: mysql_session.h:148
constexpr void * data()
Definition: mysql_session.h:146
std::nullptr_t value_type
Definition: mysql_session.h:136
constexpr Option(value_type)
Definition: mysql_session.h:140
constexpr const void * data() const
Definition: mysql_session.h:144
gettable, settable option for mysql_option's.
Definition: mysql_session.h:76
constexpr Option()=default
constexpr Option(value_type v)
Definition: mysql_session.h:81
constexpr const void * data() const
Definition: mysql_session.h:87
ValueType value_type
Definition: mysql_session.h:78
constexpr void * data()
Definition: mysql_session.h:90
value_type v_
Definition: mysql_session.h:99
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:84
constexpr value_type value() const
Definition: mysql_session.h:96
constexpr void value(value_type v)
Definition: mysql_session.h:93
Definition: expected.h:286
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:1805
static char * query
Definition: myisam_ftdump.cc:47
static char * server_version
Definition: mysql.cc:118
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:9536
unsigned int STDCALL mysql_errno(MYSQL *mysql)
Definition: client.cc:9194
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:8893
const char *STDCALL mysql_error(MYSQL *mysql)
Definition: client.cc:9198
void STDCALL mysql_free_result(MYSQL_RES *result)
Definition: client.cc:1955
int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)
Definition: client.cc:8554
mysql_ssl_mode
Definition: mysql.h:272
static char * password
Definition: mysql_secure_installation.cc:58
const char * host
Definition: mysqladmin.cc:65
void error(const char *format,...)
ulong connect_timeout
Definition: mysqld.cc:1347
void disconnect(Connection &c)
Definition: server.cc:48
Definition: http_server_component.cc:34
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
unexpected(E) -> unexpected< E >
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_MYSQL_EXPORT
Definition: router_mysql_export.h:15
constexpr const char * ssl_mode_to_string(SslMode mode)
Definition: ssl_mode.h:44
synode_no q[FIFO_SIZE]
Definition: xcom_base.cc:4086