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) {
 
  253        session_->execute(consisten_snapshot
 
  254                              ? 
"START TRANSACTION WITH CONSISTENT SNAPSHOT" 
  255                              : 
"START TRANSACTION");
 
  268        session_->execute(
"COMMIT");
 
  275        session_->execute(
"ROLLBACK");
 
  289  class Error : 
public std::runtime_error {
 
  295    Error(
const char *error, 
unsigned int code,
 
  296          const std::string message = 
"<not set>")
 
  297        : 
std::runtime_error(
error), code_(code), message_(message) {}
 
  299    Error(
const std::string &error, 
unsigned int code,
 
  300          const std::string &message = 
"<not set>")
 
  301        : 
std::runtime_error(
error), code_(code), message_(message) {}
 
  303    unsigned int code()
 const { 
return code_; }
 
  304    std::string 
message()
 const { 
return message_; }
 
  316          : idx_{idx}, parent_{parent} {}
 
  317      const char *
operator*()
 const { 
return (*parent_)[idx_]; }
 
  321        if (parent_ != other.
parent_) 
return false;
 
  322        return idx_ != other.
idx_;
 
  331    size_t size()
 const { 
return row_.size(); }
 
  354                               const std::string &ca, 
const std::string &capath,
 
  355                               const std::string &crl,
 
  356                               const std::string &crlpath);
 
  363  std::string 
ssl_ca() 
const;
 
  375  virtual void set_ssl_cert(
const std::string &cert, 
const std::string &
key);
 
  390  template <
class SettableMysqlOption>
 
  416  template <
class GettableMysqlOption>
 
  428               const std::string &username, 
const std::string &
password,
 
  433               unsigned long extra_client_flags = 0);
 
  437                   const std::string &db);
 
  440                       const std::string &username,
 
  446                       unsigned long extra_client_flags = 0);  
 
  455                           const std::string &db);
 
  459  virtual void reset();
 
  463      uint64_t ps_id, std::vector<MYSQL_BIND> bind_parameters,
 
  469      const std::string &
query);  
 
  473  virtual std::unique_ptr<MySQLSession::ResultRow> 
query_one(
 
  474      const std::string &
query,
 
  484  virtual std::unique_ptr<MySQLSession::ResultRow> 
query_one(
 
  485      const std::string &stmt) {
 
  491      const std::string &
query);  
 
  498  virtual 
std::
string quote(const 
std::
string &s, 
char qchar = '\'') const;
 
  531  uint64_t last_stmt_id{0};
 
  536  unsigned long extra_client_flags_{0};
 
  537  uint64_t connection_id_{0};
 
  554  bool async_query_logged_ = 
false;
 
  570      const std::string &
q);
 
  573      const std::string &
q);
 
  581      const std::string &
q);
 
  584      const std::string &
q);
 
  586  void throw_mysqlerror(
MYSQL_STMT *stmt, uint64_t ps_id);
 
  592  bool log_queries_{
true};
 
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:289
 
Error(const char *error, unsigned int code, const std::string message="<not set>")
Definition: mysql_session.h:295
 
std::string message() const
Definition: mysql_session.h:304
 
unsigned int code() const
Definition: mysql_session.h:303
 
const std::string message_
Definition: mysql_session.h:308
 
Error(const std::string &error, unsigned int code, const std::string &message="<not set>")
Definition: mysql_session.h:299
 
const unsigned int code_
Definition: mysql_session.h:307
 
Definition: mysql_session.h:539
 
void operator()(MYSQL_RES *res)
Definition: mysql_session.h:541
 
Definition: mysql_session.h:313
 
bool operator!=(const RowIt &other) const
Definition: mysql_session.h:320
 
uint32_t idx_
Definition: mysql_session.h:326
 
RowIt(const ResultRow *parent, uint32_t idx=0)
Definition: mysql_session.h:315
 
void operator++()
Definition: mysql_session.h:318
 
const ResultRow * parent_
Definition: mysql_session.h:327
 
const char * operator*() const
Definition: mysql_session.h:317
 
Definition: mysql_session.h:311
 
ResultRow(Row row)
Definition: mysql_session.h:329
 
size_t size() const
Definition: mysql_session.h:331
 
RowIt begin() const
Definition: mysql_session.h:332
 
RowIt end() const
Definition: mysql_session.h:333
 
virtual size_t get_data_size(size_t i) const
Definition: mysql_session.h:336
 
Row row_
Definition: mysql_session.h:340
 
virtual ~ResultRow()=default
 
const char * operator[](size_t i) const
Definition: mysql_session.h:335
 
const char *& operator[](size_t i)
Definition: mysql_session.h:334
 
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:280
 
Transaction(Transaction &&other)
Definition: mysql_session.h:246
 
Transaction()
Definition: mysql_session.h:245
 
void commit()
Definition: mysql_session.h:266
 
void rollback()
Definition: mysql_session.h:273
 
~Transaction()
Definition: mysql_session.h:258
 
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:484
 
std::string connection_address_
Definition: mysql_session.h:535
 
std::string ssl_crlpath() const
Definition: mysql_session.cc:301
 
virtual bool has_data_on_socket()
Definition: mysql_session.cc:1015
 
virtual void set_ssl_cert(const std::string &cert, const std::string &key)
Definition: mysql_session.cc:310
 
bool get_option(GettableMysqlOption &opt) const
get a mysql option.
Definition: mysql_session.h:417
 
MYSQL * connection_
Definition: mysql_session.h:533
 
std::function< bool(const ResultRow &)> ResultRowProcessor
Definition: mysql_session.h:164
 
std::string ssl_key() const
Definition: mysql_session.cc:328
 
virtual unsigned warning_count() noexcept
Definition: mysql_session.cc:1035
 
virtual uint64_t affected_rows() noexcept
Definition: mysql_session.cc:1011
 
std::unique_ptr< MYSQL_RES, MYSQL_RES_Deleter > mysql_result_type
Definition: mysql_session.h:544
 
virtual ~MySQLSession()
Definition: mysql_session.cc:138
 
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:391
 
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:757
 
std::string ssl_ca() const
Definition: mysql_session.cc:274
 
virtual uint64_t prepare(const std::string &query)
Definition: mysql_session.cc:720
 
virtual int ping()
Definition: mysql_session.cc:1039
 
void query(const std::string &stmt, const RowProcessor &processor)
Definition: mysql_session.h:480
 
virtual bool is_ssl_session_reused()
Definition: mysql_session.cc:1067
 
virtual std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &query, const FieldValidator &validator)
Definition: mysql_session.cc:927
 
std::string ssl_crl() const
Definition: mysql_session.cc:292
 
std::function< void()> OnResultSetEnd
Definition: mysql_session.h:167
 
std::string ssl_cert() const
Definition: mysql_session.cc:319
 
bool log_queries_
Definition: mysql_session.h:592
 
std::string default_schema
Definition: mysql_session.h:528
 
const std::string & get_address() noexcept
Definition: mysql_session.h:501
 
bool connected_
Definition: mysql_session.h:534
 
mysql_ssl_mode ssl_mode() const
Definition: mysql_session.cc:247
 
virtual uint64_t last_insert_id() noexcept
Definition: mysql_session.cc:1007
 
virtual bool execute_nb(const std::string &query)
Definition: mysql_session.cc:967
 
virtual unsigned long server_version()
Definition: mysql_session.cc:1071
 
std::string tls_version() const
Definition: mysql_session.cc:256
 
std::string host
Definition: mysql_session.h:525
 
virtual const char * last_sqlstate()
Definition: mysql_session.cc:1052
 
virtual std::vector< std::string > get_session_tracker_data(enum enum_session_state_type type)
Definition: mysql_session.cc:1019
 
MYSQL * get_handle()
Definition: mysql_session.h:516
 
std::string ssl_cipher() const
Definition: mysql_session.cc:265
 
static mysql_ssl_mode parse_ssl_mode(std::string ssl_mode)
Definition: mysql_session.cc:145
 
std::string unix_socket
Definition: mysql_session.h:527
 
virtual void prepare_remove(uint64_t ps_id)
Definition: mysql_session.cc:834
 
uint64_t connection_id()
Definition: mysql_session.cc:235
 
int read_timeout() const
Definition: mysql_session.cc:346
 
AsyncQueryState
Definition: mysql_session.h:546
 
std::string ssl_capath() const
Definition: mysql_session.cc:283
 
void log_queries(bool log)
Definition: mysql_session.h:518
 
std::vector< const char * > Row
Definition: mysql_session.h:161
 
std::map< uint64_t, MYSQL_STMT * > stmts_
Definition: mysql_session.h:532
 
virtual std::string quote(const std::string &s, char qchar='\'') const
Definition: mysql_session.cc:1041
 
virtual unsigned int last_errno()
Definition: mysql_session.cc:1059
 
void change_user(const std::string &user, const std::string &password, const std::string &db)
Definition: mysql_session.cc:476
 
bool log_queries() const
Definition: mysql_session.h:519
 
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:79
 
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:9669
 
unsigned int STDCALL mysql_errno(MYSQL *mysql)
Definition: client.cc:9327
 
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:9026
 
const char *STDCALL mysql_error(MYSQL *mysql)
Definition: client.cc:9331
 
void STDCALL mysql_free_result(MYSQL_RES *result)
Definition: client.cc:1956
 
int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)
Definition: client.cc:8687
 
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:1365
 
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:95
 
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:650
 
constexpr const char * ssl_mode_to_string(SslMode mode)
Definition: ssl_mode.h:44
 
synode_no q[FIFO_SIZE]
Definition: xcom_base.cc:4112