MySQL 9.4.0
Source Code Documentation
mysql_session.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2016, 2025, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef _ROUTER_MYSQL_SESSION_H_
27#define _ROUTER_MYSQL_SESSION_H_
28
31
32#include <functional>
33#include <map>
34#include <memory>
35#include <stdexcept>
36#include <string>
37#include <vector>
38
39#include <mysql.h> // enum mysql_ssl_mode
40#include <string.h>
41
44#include "secure_string.h" // NOLINT(build/include_subdir)
45
46namespace mysqlrouter {
47
49 public:
50 MysqlError() = default;
51 MysqlError(unsigned int code, std::string message, std::string sql_state)
52 : code_{code},
53 message_{std::move(message)},
54 sql_state_{std::move(sql_state)} {}
55
56 operator bool() { return code_ != 0; }
57
58 std::string message() const { return message_; }
59 std::string sql_state() const { return sql_state_; }
60 unsigned int value() const { return code_; }
61
62 private:
63 unsigned int code_{0};
64 std::string message_;
65 std::string sql_state_;
66};
67
68namespace impl {
69/**
70 * gettable, settable option for mysql_option's.
71 *
72 * adapts scalar types like int/bool/... mysql_option's to
73 * mysql_options()/mysql_get_option().
74 *
75 * - mysql_options() expects a '&int'
76 * - mysql_get_option() expects a '&int'
77 */
78template <mysql_option Opt, class ValueType>
79class Option {
80 public:
81 using value_type = ValueType;
82
83 constexpr Option() = default;
84 constexpr explicit Option(value_type v) : v_{std::move(v)} {}
85
86 // get the option id
87 constexpr mysql_option option() const noexcept { return Opt; }
88
89 // get address of the storage.
90 constexpr const void *data() const { return std::addressof(v_); }
91
92 // get address of the storage.
93 constexpr void *data() { return std::addressof(v_); }
94
95 // set the value of the option
96 constexpr void value(value_type v) { v_ = v; }
97
98 // get the value of the option
99 constexpr value_type value() const { return v_; }
100
101 private:
103};
104
105/**
106 * gettable, settable option for 'const char *' based mysql_option's.
107 *
108 * adapts 'const char *' based mysql_option to
109 * mysql_options()/mysql_get_option().
110 *
111 * - mysql_options() expects a 'const char *'
112 * - mysql_get_option() expects a '&(const char *)'
113 */
114template <mysql_option Opt>
115class Option<Opt, const char *> {
116 public:
117 using value_type = const char *;
118
119 Option() = default;
120 constexpr explicit Option(value_type v) : v_{std::move(v)} {}
121
122 constexpr mysql_option option() const noexcept { return Opt; }
123
124 constexpr const void *data() const { return v_; }
125
126 constexpr void *data() { return std::addressof(v_); }
127
128 constexpr void value(value_type v) { v_ = v; }
129
130 constexpr value_type value() const { return v_; }
131
132 private:
134};
135
136template <mysql_option Opt>
137class Option<Opt, std::nullptr_t> {
138 public:
139 using value_type = std::nullptr_t;
140
141 Option() = default;
142 // accept a void *, but ignore it.
143 constexpr explicit Option(value_type) {}
144
145 constexpr mysql_option option() const noexcept { return Opt; }
146
147 constexpr const void *data() const { return nullptr; }
148
149 constexpr void *data() { return nullptr; }
150
151 constexpr value_type value() const { return nullptr; }
152};
153} // namespace impl
154
155// mysql_options() may be used with MYSQL * == nullptr to get global values.
156
158 public:
159 static constexpr int kDefaultConnectTimeout = 5;
160 static constexpr int kDefaultReadTimeout = 30;
161 class ResultRow;
162 typedef std::vector<const char *> Row;
163 typedef std::function<bool(const Row &)> RowProcessor;
164 typedef std::function<bool(const ResultRow &)> ResultRowProcessor;
165
166 typedef std::function<void(unsigned, MYSQL_FIELD *)> FieldValidator;
167 typedef std::function<void()> OnResultSetEnd;
168
169 // text representations of SSL modes
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[];
175 //
176 // mysql_option's
177 //
178 // (sorted by appearance in documentation)
179
180 // type for mysql_option's which set/get a 'bool'
181 template <mysql_option Opt>
183
184 // type for mysql_option's which set/get a 'unsigned int'
185 template <mysql_option Opt>
187
188 // type for mysql_option's which set/get a 'unsigned long'
189 template <mysql_option Opt>
191
192 // type for mysql_option's which set/get a 'const char *'
193 template <mysql_option Opt>
195
216 // TCP/UnixSocket/...
233
242
244 public:
246 Transaction(Transaction &&other) : session_{other.session_} {
247 other.session_ = nullptr;
248 }
249
250 Transaction(MySQLSession *session, const bool consisten_snapshot = false)
251 : session_(session) {
252 if (session_)
253 session_->execute(consisten_snapshot
254 ? "START TRANSACTION WITH CONSISTENT SNAPSHOT"
255 : "START TRANSACTION");
256 }
257
259 try {
260 rollback();
261 } catch (...) {
262 // ignore errors during rollback on d-tor
263 }
264 }
265
266 void commit() {
267 if (session_) {
268 session_->execute("COMMIT");
269 session_ = nullptr;
270 }
271 }
272
273 void rollback() {
274 if (session_) {
275 session_->execute("ROLLBACK");
276 session_ = nullptr;
277 }
278 }
279
281 std::swap(session_, other.session_);
282 return *this;
283 }
284
285 private:
286 MySQLSession *session_{nullptr};
287 };
288
289 class Error : public std::runtime_error {
290 public:
291 // NOTE Not all calls to constructors provide the 3rd argument. To save
292 // time, only the code where it was needed atm was upgraded from 2 to
293 // 3 args; upgrade elsewhere if needed
294
295 Error(const char *error, unsigned int code,
296 const std::string message = "<not set>")
297 : std::runtime_error(error), code_(code), message_(message) {}
298
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) {}
302
303 unsigned int code() const { return code_; }
304 std::string message() const { return message_; }
305
306 private:
307 const unsigned int code_;
308 const std::string message_;
309 };
310
311 class ResultRow {
312 public:
313 class RowIt {
314 public:
315 RowIt(const ResultRow *parent, uint32_t idx = 0)
316 : idx_{idx}, parent_{parent} {}
317 const char *operator*() const { return (*parent_)[idx_]; }
318 void operator++() { ++idx_; }
319
320 bool operator!=(const RowIt &other) const {
321 if (parent_ != other.parent_) return false;
322 return idx_ != other.idx_;
323 }
324
325 private:
326 uint32_t idx_{0};
328 };
329 ResultRow(Row row) : row_{std::move(row)} {}
330 virtual ~ResultRow() = default;
331 size_t size() const { return row_.size(); }
332 RowIt begin() const { return RowIt(this, 0); }
333 RowIt end() const { return RowIt(this, size()); }
334 const char *&operator[](size_t i) { return row_[i]; }
335 const char *operator[](size_t i) const { return row_[i]; }
336 virtual size_t get_data_size(size_t i) const { return strlen(row_[i]); }
337
338 private:
339 friend class MySQLSession;
341 };
342
343 MySQLSession();
344 virtual ~MySQLSession();
345
347 std::string ssl_mode); // throws std::logic_error
348 static const char *ssl_mode_to_string(mysql_ssl_mode ssl_mode) noexcept;
349
350 // throws Error, std::invalid_argument
352 const std::string &tls_version,
353 const std::string &ssl_cipher,
354 const std::string &ca, const std::string &capath,
355 const std::string &crl,
356 const std::string &crlpath);
357
358 uint64_t connection_id();
359
360 mysql_ssl_mode ssl_mode() const;
361 std::string tls_version() const;
362 std::string ssl_cipher() const;
363 std::string ssl_ca() const;
364 std::string ssl_capath() const;
365 std::string ssl_crl() const;
366 std::string ssl_crlpath() const;
367
368 std::string ssl_cert() const;
369 std::string ssl_key() const;
370
371 int connect_timeout() const;
372 int read_timeout() const;
373
374 // throws Error
375 virtual void set_ssl_cert(const std::string &cert, const std::string &key);
376
377 /**
378 * set a mysql option.
379 *
380 * @code
381 * auto res = set_option(ConnectTimeout(10));
382 * @endcode
383 *
384 * @note on error the MysqlError may not always contain the right error-code.
385 *
386 * @param [in] opt option to set.
387 * @returns a MysqlError on error
388 * @retval true on success
389 */
390 template <class SettableMysqlOption>
391 stdx::expected<void, MysqlError> set_option(const SettableMysqlOption &opt) {
392 if (0 != mysql_options(connection_, opt.option(), opt.data())) {
396 }
397
398 return {};
399 }
400
401 /**
402 * get a mysql option.
403 *
404 * @code
405 * ConnectTimeout opt_connect_timeout;
406 * auto res = get_option(opt_connect_timeout);
407 * if (res) {
408 * std::cerr << opt_connect_timeout.value() << std::endl;
409 * }
410 * @endcode
411 *
412 * @param [in,out] opt option to query.
413 * @retval true on success.
414 * @retval false if option is not known.
415 */
416 template <class GettableMysqlOption>
417 bool get_option(GettableMysqlOption &opt) const {
418 if (0 != mysql_get_option(connection_, opt.option(), opt.data())) {
419 return false;
420 }
421
422 return true;
423 }
424
425 // these methods are deprecated, versions with a SecureString password should
426 // be used instead
427 void connect(const std::string &host, unsigned int port,
428 const std::string &username, const std::string &password,
429 const std::string &unix_socket,
430 const std::string &default_schema,
433 unsigned long extra_client_flags = 0);
434 void connect(const MySQLSession &other, const std::string &username,
435 const std::string &password);
436 void change_user(const std::string &user, const std::string &password,
437 const std::string &db);
438
439 virtual void connect(const std::string &host, unsigned int port,
440 const std::string &username,
442 const std::string &unix_socket,
443 const std::string &default_schema,
446 unsigned long extra_client_flags = 0); // throws Error
447 /**
448 * Connect using the same settings and parameters that were used for the last
449 * other.connect() using provided credentials.
450 */
451 virtual void connect(const MySQLSession &other, const std::string &username,
453 virtual void change_user(const std::string &user,
455 const std::string &db);
456
457 virtual void disconnect();
458
459 virtual void reset();
460
461 virtual uint64_t prepare(const std::string &query);
463 uint64_t ps_id, std::vector<MYSQL_BIND> bind_parameters,
464 const ResultRowProcessor &processor,
465 const FieldValidator &validator /*= null_field_validator*/,
466 const OnResultSetEnd &on_resultset_end);
467 virtual void prepare_remove(uint64_t ps_id);
468 virtual void execute(
469 const std::string &query); // throws Error, std::logic_error
470 virtual void query(
471 const std::string &query, const ResultRowProcessor &processor,
472 const FieldValidator &validator); // throws Error, std::logic_error
473 virtual std::unique_ptr<MySQLSession::ResultRow> query_one(
474 const std::string &query,
475 const FieldValidator &validator); // throws Error
476 //
477 void query(
478 const std::string &query, const RowProcessor &processor,
479 const FieldValidator &validator); // throws Error, std::logic_error
480 void query(const std::string &stmt, const RowProcessor &processor) {
481 return query(stmt, processor, [](unsigned, MYSQL_FIELD *) {});
482 }
483
484 virtual std::unique_ptr<MySQLSession::ResultRow> query_one(
485 const std::string &stmt) {
486 return query_one(stmt, [](unsigned, MYSQL_FIELD *) {});
487 }
488
489 virtual int ping();
490 virtual bool execute_nb(
491 const std::string &query); // throws Error, std::logic_error
492
493 virtual uint64_t last_insert_id() noexcept;
494 virtual uint64_t affected_rows() noexcept;
495
496 virtual unsigned warning_count() noexcept;
497
498 virtual std::string quote(const std::string &s, char qchar = '\'') const;
499
500 virtual bool is_connected() noexcept { return connection_ && connected_; }
501 const std::string &get_address() noexcept { return connection_address_; }
502
503 virtual const char *last_sqlstate();
504 virtual const char *last_error();
505 virtual unsigned int last_errno();
506
507 virtual const char *ssl_cipher();
508 virtual bool has_data_on_socket();
509 virtual std::vector<std::string> get_session_tracker_data(
511
512 virtual bool is_ssl_session_reused();
513
514 virtual unsigned long server_version();
515
517
518 void log_queries(bool log) { log_queries_ = log; }
519 bool log_queries() const { return log_queries_; }
520
521 private:
522 // stores selected parameters that were passed to the last successful call to
523 // connect()
524 struct {
525 std::string host;
526 unsigned int port{};
527 std::string unix_socket;
528 std::string default_schema;
529 } connect_params_;
530
531 uint64_t last_stmt_id{0};
532 std::map<uint64_t, MYSQL_STMT *> stmts_;
536 unsigned long extra_client_flags_{0};
537 uint64_t connection_id_{0};
538
540 public:
542 };
543
544 using mysql_result_type = std::unique_ptr<MYSQL_RES, MYSQL_RES_Deleter>;
545
546 enum class AsyncQueryState {
547 kNone, // no async query active
548 kQuery, // waiting query to finish
549 kStoreResult, // waiting store_result to finish
550 kNextResult, // waiting next_result to finish
551 kStoreNextResult, // waiting store_result after next_result to finish
552 };
554 bool async_query_logged_ = false;
555
556 /**
557 * run query.
558 *
559 * There are 3 cases:
560 *
561 * 1. query returns a resultset
562 * 3. query returns no resultset
563 * 2. query fails with an error
564 *
565 * @param q stmt to execute
566 *
567 * @returns resultset on success, MysqlError on error
568 */
570 const std::string &q);
571
573 const std::string &q);
574
576
577 /**
578 * log query after running it.
579 */
581 const std::string &q);
582
584 const std::string &q);
585
586 void throw_mysqlerror(MYSQL_STMT *stmt, uint64_t ps_id);
587 // if query be timed and sent to the sql-log.
589
590 static SQLLogFilter &get_log_filter();
591
592 bool log_queries_{true};
593};
594
595} // namespace mysqlrouter
596
597#endif
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
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:300
virtual bool has_data_on_socket()
Definition: mysql_session.cc:1004
virtual void set_ssl_cert(const std::string &cert, const std::string &key)
Definition: mysql_session.cc:309
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:327
virtual unsigned warning_count() noexcept
Definition: mysql_session.cc:1024
virtual uint64_t affected_rows() noexcept
Definition: mysql_session.cc:1000
std::unique_ptr< MYSQL_RES, MYSQL_RES_Deleter > mysql_result_type
Definition: mysql_session.h:544
virtual ~MySQLSession()
Definition: mysql_session.cc:137
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:746
std::string ssl_ca() const
Definition: mysql_session.cc:273
virtual uint64_t prepare(const std::string &query)
Definition: mysql_session.cc:709
virtual int ping()
Definition: mysql_session.cc:1028
void query(const std::string &stmt, const RowProcessor &processor)
Definition: mysql_session.h:480
virtual bool is_ssl_session_reused()
Definition: mysql_session.cc:1056
virtual std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &query, const FieldValidator &validator)
Definition: mysql_session.cc:916
std::string ssl_crl() const
Definition: mysql_session.cc:291
std::function< void()> OnResultSetEnd
Definition: mysql_session.h:167
std::string ssl_cert() const
Definition: mysql_session.cc:318
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:246
virtual uint64_t last_insert_id() noexcept
Definition: mysql_session.cc:996
virtual bool execute_nb(const std::string &query)
Definition: mysql_session.cc:956
virtual unsigned long server_version()
Definition: mysql_session.cc:1060
std::string tls_version() const
Definition: mysql_session.cc:255
std::string host
Definition: mysql_session.h:525
virtual const char * last_sqlstate()
Definition: mysql_session.cc:1041
virtual std::vector< std::string > get_session_tracker_data(enum enum_session_state_type type)
Definition: mysql_session.cc:1008
MYSQL * get_handle()
Definition: mysql_session.h:516
std::string ssl_cipher() const
Definition: mysql_session.cc:264
static mysql_ssl_mode parse_ssl_mode(std::string ssl_mode)
Definition: mysql_session.cc:144
std::string unix_socket
Definition: mysql_session.h:527
virtual void prepare_remove(uint64_t ps_id)
Definition: mysql_session.cc:823
uint64_t connection_id()
Definition: mysql_session.cc:234
int read_timeout() const
Definition: mysql_session.cc:345
AsyncQueryState
Definition: mysql_session.h:546
std::string ssl_capath() const
Definition: mysql_session.cc:282
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:1030
virtual unsigned int last_errno()
Definition: mysql_session.cc:1048
void change_user(const std::string &user, const std::string &password, const std::string &db)
Definition: mysql_session.cc:465
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: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:1356
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 const unsigned int kDefaultConnectTimeout
Definition: metadata_cache.h:60
constexpr const unsigned int kDefaultReadTimeout
Definition: metadata_cache.h:62
constexpr char kNone[]
Definition: logging.h:70
Definition: base64.h:43
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
Definition: mysql.h:121
Definition: mysql.h:340
Definition: mysql.h:692
Definition: mysql.h:300
synode_no q[FIFO_SIZE]
Definition: xcom_base.cc:4112