26#ifndef _ROUTER_MYSQL_SESSION_H_
27#define _ROUTER_MYSQL_SESSION_H_
56 operator bool() {
return code_ != 0; }
78template <mysql_option Opt,
class ValueType>
90 constexpr const void *
data()
const {
return std::addressof(
v_); }
93 constexpr void *
data() {
return std::addressof(
v_); }
114template <mysql_option Opt>
124 constexpr const void *
data()
const {
return v_; }
126 constexpr void *
data() {
return std::addressof(v_); }
136template <mysql_option Opt>
147 constexpr const void *
data()
const {
return nullptr; }
149 constexpr void *
data() {
return nullptr; }
162 typedef std::vector<const char *>
Row;
170 static const char kSslModeDisabled[];
171 static const char kSslModePreferred[];
172 static const char kSslModeRequired[];
173 static const char kSslModeVerifyCa[];
174 static const char kSslModeVerifyIdentity[];
181 template <mysql_option Opt>
185 template <mysql_option Opt>
189 template <mysql_option Opt>
193 template <mysql_option Opt>
247 other.session_ =
nullptr;
251 : session_(session) {
252 session_->execute(consisten_snapshot
253 ?
"START TRANSACTION WITH CONSISTENT SNAPSHOT"
254 :
"START TRANSACTION");
267 session_->execute(
"COMMIT");
274 session_->execute(
"ROLLBACK");
288 class Error :
public std::runtime_error {
294 Error(
const char *error,
unsigned int code,
295 const std::string message =
"<not set>")
296 :
std::runtime_error(
error), code_(code), message_(message) {}
298 Error(
const std::string &error,
unsigned int code,
299 const std::string &message =
"<not set>")
300 :
std::runtime_error(
error), code_(code), message_(message) {}
302 unsigned int code()
const {
return code_; }
303 std::string
message()
const {
return message_; }
315 : idx_{idx}, parent_{parent} {}
316 const char *
operator*()
const {
return (*parent_)[idx_]; }
320 if (parent_ != other.
parent_)
return false;
321 return idx_ != other.
idx_;
330 size_t size()
const {
return row_.size(); }
353 const std::string &ca,
const std::string &capath,
354 const std::string &crl,
355 const std::string &crlpath);
362 std::string
ssl_ca()
const;
374 virtual void set_ssl_cert(
const std::string &cert,
const std::string &
key);
389 template <
class SettableMysqlOption>
415 template <
class GettableMysqlOption>
427 const std::string &username,
const std::string &
password,
432 unsigned long extra_client_flags = 0);
436 const std::string &db);
439 const std::string &username,
445 unsigned long extra_client_flags = 0);
454 const std::string &db);
458 virtual void reset();
462 uint64_t ps_id, std::vector<MYSQL_BIND> bind_parameters,
468 const std::string &
query);
472 virtual std::unique_ptr<MySQLSession::ResultRow>
query_one(
473 const std::string &
query,
483 virtual std::unique_ptr<MySQLSession::ResultRow>
query_one(
484 const std::string &stmt) {
490 const std::string &
query);
497 virtual
std::
string quote(const
std::
string &s,
char qchar = '\'') const;
527 uint64_t last_stmt_id{0};
533 unsigned long extra_client_flags_{0};
534 uint64_t connection_id_{0};
549 bool async_query_logged_ =
false;
565 const std::string &
q);
568 const std::string &
q);
574 const std::string &
q);
577 const std::string &
q);
579 void throw_mysqlerror(
MYSQL_STMT *stmt, uint64_t ps_id);
mysqlrouter::MySQLSession MySQLSession
Definition: bootstrap_mysql_account.cc:41
Null-terminated string which is securely wiped on destruction.
Definition: secure_string.h:59
Definition: mysql_session.h:288
Error(const char *error, unsigned int code, const std::string message="<not set>")
Definition: mysql_session.h:294
std::string message() const
Definition: mysql_session.h:303
unsigned int code() const
Definition: mysql_session.h:302
const std::string message_
Definition: mysql_session.h:307
Error(const std::string &error, unsigned int code, const std::string &message="<not set>")
Definition: mysql_session.h:298
const unsigned int code_
Definition: mysql_session.h:306
Definition: mysql_session.h:536
void operator()(MYSQL_RES *res)
Definition: mysql_session.h:538
Definition: mysql_session.h:312
bool operator!=(const RowIt &other) const
Definition: mysql_session.h:319
uint32_t idx_
Definition: mysql_session.h:325
RowIt(const ResultRow *parent, uint32_t idx=0)
Definition: mysql_session.h:314
void operator++()
Definition: mysql_session.h:317
const ResultRow * parent_
Definition: mysql_session.h:326
const char * operator*() const
Definition: mysql_session.h:316
Definition: mysql_session.h:310
ResultRow(Row row)
Definition: mysql_session.h:328
size_t size() const
Definition: mysql_session.h:330
RowIt begin() const
Definition: mysql_session.h:331
RowIt end() const
Definition: mysql_session.h:332
virtual size_t get_data_size(size_t i) const
Definition: mysql_session.h:335
Row row_
Definition: mysql_session.h:339
virtual ~ResultRow()=default
const char * operator[](size_t i) const
Definition: mysql_session.h:334
const char *& operator[](size_t i)
Definition: mysql_session.h:333
Definition: mysql_session.h:243
Transaction(MySQLSession *session, const bool consisten_snapshot=false)
Definition: mysql_session.h:250
Transaction & operator=(Transaction &&other)
Definition: mysql_session.h:279
Transaction(Transaction &&other)
Definition: mysql_session.h:246
Transaction()
Definition: mysql_session.h:245
void commit()
Definition: mysql_session.h:265
void rollback()
Definition: mysql_session.h:272
~Transaction()
Definition: mysql_session.h:257
Definition: mysql_session.h:157
std::function< void(unsigned, MYSQL_FIELD *)> FieldValidator
Definition: mysql_session.h:166
virtual std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &stmt)
Definition: mysql_session.h:483
std::string connection_address_
Definition: mysql_session.h:531
std::string ssl_crlpath() const
Definition: mysql_session.cc:302
virtual bool has_data_on_socket()
Definition: mysql_session.cc:940
virtual void set_ssl_cert(const std::string &cert, const std::string &key)
Definition: mysql_session.cc:311
bool get_option(GettableMysqlOption &opt) const
get a mysql option.
Definition: mysql_session.h:416
MYSQL * connection_
Definition: mysql_session.h:529
std::function< bool(const ResultRow &)> ResultRowProcessor
Definition: mysql_session.h:164
std::string ssl_key() const
Definition: mysql_session.cc:329
virtual unsigned warning_count() noexcept
Definition: mysql_session.cc:960
virtual uint64_t affected_rows() noexcept
Definition: mysql_session.cc:936
std::unique_ptr< MYSQL_RES, MYSQL_RES_Deleter > mysql_result_type
Definition: mysql_session.h:541
virtual ~MySQLSession()
Definition: mysql_session.cc:139
std::function< bool(const Row &)> RowProcessor
Definition: mysql_session.h:163
stdx::expected< void, MysqlError > set_option(const SettableMysqlOption &opt)
set a mysql option.
Definition: mysql_session.h:390
virtual void prepare_execute_with_bind_parameters(uint64_t ps_id, std::vector< MYSQL_BIND > bind_parameters, const ResultRowProcessor &processor, const FieldValidator &validator, const OnResultSetEnd &on_resultset_end)
Definition: mysql_session.cc:705
std::string ssl_ca() const
Definition: mysql_session.cc:275
virtual uint64_t prepare(const std::string &query)
Definition: mysql_session.cc:668
virtual int ping()
Definition: mysql_session.cc:964
void query(const std::string &stmt, const RowProcessor &processor)
Definition: mysql_session.h:479
virtual bool is_ssl_session_reused()
Definition: mysql_session.cc:992
virtual std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &query, const FieldValidator &validator)
Definition: mysql_session.cc:875
std::string ssl_crl() const
Definition: mysql_session.cc:293
std::function< void()> OnResultSetEnd
Definition: mysql_session.h:167
std::string ssl_cert() const
Definition: mysql_session.cc:320
std::string default_schema
Definition: mysql_session.h:524
SQLLogFilter log_filter_
Definition: mysql_session.h:532
const std::string & get_address() noexcept
Definition: mysql_session.h:500
bool connected_
Definition: mysql_session.h:530
mysql_ssl_mode ssl_mode() const
Definition: mysql_session.cc:248
virtual uint64_t last_insert_id() noexcept
Definition: mysql_session.cc:932
virtual bool execute_nb(const std::string &query)
Definition: mysql_session.cc:915
virtual unsigned long server_version()
Definition: mysql_session.cc:996
std::string tls_version() const
Definition: mysql_session.cc:257
std::string host
Definition: mysql_session.h:521
virtual const char * last_sqlstate()
Definition: mysql_session.cc:977
virtual std::vector< std::string > get_session_tracker_data(enum enum_session_state_type type)
Definition: mysql_session.cc:944
MYSQL * get_handle()
Definition: mysql_session.h:515
std::string ssl_cipher() const
Definition: mysql_session.cc:266
static mysql_ssl_mode parse_ssl_mode(std::string ssl_mode)
Definition: mysql_session.cc:146
std::string unix_socket
Definition: mysql_session.h:523
virtual void prepare_remove(uint64_t ps_id)
Definition: mysql_session.cc:782
uint64_t connection_id()
Definition: mysql_session.cc:236
int read_timeout() const
Definition: mysql_session.cc:347
AsyncQueryState
Definition: mysql_session.h:543
std::string ssl_capath() const
Definition: mysql_session.cc:284
std::vector< const char * > Row
Definition: mysql_session.h:161
std::map< uint64_t, MYSQL_STMT * > stmts_
Definition: mysql_session.h:528
virtual std::string quote(const std::string &s, char qchar='\'') const
Definition: mysql_session.cc:966
virtual unsigned int last_errno()
Definition: mysql_session.cc:984
void change_user(const std::string &user, const std::string &password, const std::string &db)
Definition: mysql_session.cc:467
Definition: mysql_session.h:48
MysqlError(unsigned int code, std::string message, std::string sql_state)
Definition: mysql_session.h:51
unsigned int value() const
Definition: mysql_session.h:60
std::string message() const
Definition: mysql_session.h:58
std::string sql_state() const
Definition: mysql_session.h:59
std::string sql_state_
Definition: mysql_session.h:65
unsigned int code_
Definition: mysql_session.h:63
std::string message_
Definition: mysql_session.h:64
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:115
constexpr const void * data() const
Definition: mysql_session.h:124
const char * value_type
Definition: mysql_session.h:117
constexpr void * data()
Definition: mysql_session.h:126
constexpr Option(value_type v)
Definition: mysql_session.h:120
constexpr value_type value() const
Definition: mysql_session.h:130
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:122
constexpr void value(value_type v)
Definition: mysql_session.h:128
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:145
constexpr value_type value() const
Definition: mysql_session.h:151
constexpr void * data()
Definition: mysql_session.h:149
std::nullptr_t value_type
Definition: mysql_session.h:139
constexpr Option(value_type)
Definition: mysql_session.h:143
constexpr const void * data() const
Definition: mysql_session.h:147
gettable, settable option for mysql_option's.
Definition: mysql_session.h:79
constexpr Option()=default
constexpr Option(value_type v)
Definition: mysql_session.h:84
constexpr const void * data() const
Definition: mysql_session.h:90
ValueType value_type
Definition: mysql_session.h:81
constexpr void * data()
Definition: mysql_session.h:93
value_type v_
Definition: mysql_session.h:102
constexpr mysql_option option() const noexcept
Definition: mysql_session.h:87
constexpr value_type value() const
Definition: mysql_session.h:99
constexpr void value(value_type v)
Definition: mysql_session.h:96
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:1831
static char * query
Definition: myisam_ftdump.cc:47
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
enum_session_state_type
Type of state change information that the server can include in the Ok packet.
Definition: mysql_com.h:1071
static char * password
Definition: mysql_secure_installation.cc:58
char * user
Definition: mysqladmin.cc:67
const char * host
Definition: mysqladmin.cc:66
void error(const char *format,...)
ulong connect_timeout
Definition: mysqld.cc:1354
std::string HARNESS_EXPORT reset()
get 'reset attributes' ESC sequence.
Definition: vt100.cc:37
void set_ssl_options(MySQLSession *sess, const std::map< std::string, std::string > &options)
Definition: router_conf.cc:182
void disconnect(Connection &c)
Definition: server.cc:48
Definition: http_server_component.cc:34
constexpr char kNone[]
Definition: logging.h:70
size_t size(const char *const c)
Definition: base64.h:46
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
required string type
Definition: replication_group_member_actions.proto:34
#define ROUTER_MYSQL_EXPORT
Definition: router_mysql_export.h:15
static bool rollback(THD *thd)
Abort the current statement and transaction.
Definition: sql_cmd_srs.cc:140
static void swap(String &a, String &b) noexcept
Definition: sql_string.h:663
constexpr const char * ssl_mode_to_string(SslMode mode)
Definition: ssl_mode.h:44
synode_no q[FIFO_SIZE]
Definition: xcom_base.cc:4101