MySQL 26.10.0
Source Code Documentation
counted_mysql_session.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2023, 2026, 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_SRC_MYSQL_REST_SERVICE_SRC_COLLECTOR_MYSQL_SQL_SESSION_H_
27#define ROUTER_SRC_MYSQL_REST_SERVICE_SRC_COLLECTOR_MYSQL_SQL_SESSION_H_
28
31
32#include <memory>
33#include <vector>
34
35#include "secure_string.h" // NOLINT(build/include_subdir)
36
37namespace collector {
38
40 public:
41 using Sqls = std::vector<std::string>;
43 struct SslOptions {
45 std::string tls_version;
46 std::string ssl_cipher;
47 std::string ca;
48 std::string capath;
49 std::string crl;
50 std::string crlpath;
52 struct SslCert {
53 std::string cert;
54 std::string key;
56 struct ConnOptions {
58
59 std::string username;
61 std::string default_schema;
64 unsigned long extra_client_flags{0};
66 };
67
69 explicit CountedMySQLSession(std::unique_ptr<mysqlrouter::MySQLSession> impl);
70 ~CountedMySQLSession() override;
71
72 virtual void allow_failure_at_next_query();
74 virtual void execute_initial_sqls();
75 virtual Sqls get_initial_sqls() const;
76 virtual void connect_and_set_opts(
77 const ConnectionParameters &connection_params, const Sqls &initial_sqls);
78 virtual void connect(const ConnectionParameters &connection_params);
79
80 void set_ssl_options(mysql_ssl_mode ssl_mode, const std::string &tls_version,
81 const std::string &ssl_cipher, const std::string &ca,
82 const std::string &capath, const std::string &crl,
83 const std::string &crlpath) override;
84
85 void connect(const MySQLSession &other, const std::string &username,
87 void connect(const std::string &host, unsigned int port,
88 const std::string &username,
90 const std::string &unix_socket,
91 const std::string &default_schema,
94 unsigned long extra_client_flags = 0) override;
95
96 void change_user(const std::string &user,
98 const std::string &db) override;
99 void disconnect() override;
100 void reset() override;
101 uint64_t prepare(const std::string &query) override;
103 uint64_t ps_id, std::vector<MYSQL_BIND> bind_parameters,
104 const ResultRowProcessor &processor, const FieldValidator &validator,
105 const OnResultSetEnd &on_resultset_end) override;
106 void prepare_remove(uint64_t ps_id) override;
107
108 void execute(
109 const std::string &query) override; // throws Error, std::logic_error
110
111 void query(const std::string &query, const ResultRowProcessor &processor,
112 const FieldValidator &validator)
113 override; // throws Error, std::logic_error
114 std::unique_ptr<MySQLSession::ResultRow> query_one(
115 const std::string &query,
116 const FieldValidator &validator) override; // throws Error
117 std::unique_ptr<MySQLSession::ResultRow> query_one(
118 const std::string &query) override; // throws Error
119 int ping() override;
120 bool execute_nb(const std::string &query) override;
121 uint64_t last_insert_id() noexcept override;
122 uint64_t affected_rows() noexcept override;
123 unsigned warning_count() noexcept override;
124 std::string quote(const std::string &s, char qchar = '\'') const override;
125 bool is_connected() noexcept override;
126 const char *last_sqlstate() override;
127 const char *last_error() override;
128 unsigned int last_errno() override;
129 const char *ssl_cipher() override;
130 bool has_data_on_socket() override;
132 enum enum_session_state_type type) override;
133 bool is_ssl_session_reused() override;
134 unsigned long server_version() override;
135 MYSQL *get_handle() override;
136 void log_queries(bool log) override;
137 bool log_queries() const override;
138
139 uint64_t connection_id();
140 const std::string &get_address() noexcept;
141
142 private:
143 void update_connection_address(const std::string &host, unsigned int port,
144 const std::string &unix_socket);
145
147 uint64_t connection_id_{0};
148 std::unique_ptr<mysqlrouter::MySQLSession> impl_;
152};
153
154} // namespace collector
155
156#endif // ROUTER_SRC_MYSQL_REST_SERVICE_SRC_COLLECTOR_MYSQL_SQL_SESSION_H_
Definition: counted_mysql_session.h:39
~CountedMySQLSession() override
Definition: counted_mysql_session.cc:105
std::vector< std::string > get_session_tracker_data(enum enum_session_state_type type) override
Definition: counted_mysql_session.cc:325
void disconnect() override
Definition: counted_mysql_session.cc:232
void prepare_remove(uint64_t ps_id) override
Definition: counted_mysql_session.cc:256
std::vector< std::string > Sqls
Definition: counted_mysql_session.h:41
virtual void connect(const ConnectionParameters &connection_params)
Definition: counted_mysql_session.cc:139
bool execute_nb(const std::string &query) override
Definition: counted_mysql_session.cc:287
const char * ssl_cipher() override
Definition: counted_mysql_session.cc:319
std::string connection_address_
Definition: counted_mysql_session.h:149
void query(const std::string &query, const ResultRowProcessor &processor, const FieldValidator &validator) override
Definition: counted_mysql_session.cc:266
unsigned int last_errno() override
Definition: counted_mysql_session.cc:317
MYSQL * get_handle() override
Definition: counted_mysql_session.cc:338
virtual void connect_and_set_opts(const ConnectionParameters &connection_params, const Sqls &initial_sqls)
Definition: counted_mysql_session.cc:128
const char * last_error() override
Definition: counted_mysql_session.cc:315
Sqls initial_sqls_
Definition: counted_mysql_session.h:151
uint64_t connection_id()
Definition: counted_mysql_session.cc:344
void update_connection_address(const std::string &host, unsigned int port, const std::string &unix_socket)
Definition: counted_mysql_session.cc:367
const char * last_sqlstate() override
Definition: counted_mysql_session.cc:311
uint64_t last_insert_id() noexcept override
Definition: counted_mysql_session.cc:291
virtual Sqls get_initial_sqls() const
Definition: counted_mysql_session.cc:124
bool has_data_on_socket() override
Definition: counted_mysql_session.cc:321
virtual void execute_initial_sqls()
Definition: counted_mysql_session.cc:118
void execute(const std::string &query) override
Definition: counted_mysql_session.cc:261
uint64_t prepare(const std::string &query) override
Definition: counted_mysql_session.cc:242
void reset() override
Definition: counted_mysql_session.cc:240
const std::string & get_address() noexcept
Definition: counted_mysql_session.cc:363
int ping() override
Definition: counted_mysql_session.cc:285
bool is_ssl_session_reused() override
Definition: counted_mysql_session.cc:330
unsigned warning_count() noexcept override
Definition: counted_mysql_session.cc:299
std::unique_ptr< MySQLSession::ResultRow > query_one(const std::string &query, const FieldValidator &validator) override
Definition: counted_mysql_session.cc:273
std::string quote(const std::string &s, char qchar='\'') const override
Definition: counted_mysql_session.cc:303
ConnectionParameters connection_params_
Definition: counted_mysql_session.h:146
bool is_connected() noexcept override
Definition: counted_mysql_session.cc:307
uint64_t connection_id_
Definition: counted_mysql_session.h:147
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) override
Definition: counted_mysql_session.cc:247
unsigned long server_version() override
Definition: counted_mysql_session.cc:334
bool reconnect_at_next_query_
Definition: counted_mysql_session.h:150
virtual void allow_failure_at_next_query()
Definition: counted_mysql_session.cc:109
virtual ConnectionParameters get_connection_parameters() const
Definition: counted_mysql_session.cc:114
void set_ssl_options(mysql_ssl_mode ssl_mode, const std::string &tls_version, const std::string &ssl_cipher, const std::string &ca, const std::string &capath, const std::string &crl, const std::string &crlpath) override
Definition: counted_mysql_session.cc:166
uint64_t affected_rows() noexcept override
Definition: counted_mysql_session.cc:295
bool log_queries() const override
Definition: counted_mysql_session.cc:342
void change_user(const std::string &user, const mysql_harness::SecureString &password, const std::string &db) override
Definition: counted_mysql_session.cc:221
CountedMySQLSession()
Definition: counted_mysql_session.cc:92
std::unique_ptr< mysqlrouter::MySQLSession > impl_
Definition: counted_mysql_session.h:148
Definition: destination.h:95
Definition: destination.h:40
Null-terminated string which is securely wiped on destruction.
Definition: secure_string.h:59
Definition: mysql_session.h:157
std::function< void(unsigned, MYSQL_FIELD *)> FieldValidator
Definition: mysql_session.h:166
std::function< bool(const ResultRow &)> ResultRowProcessor
Definition: mysql_session.h:164
unsigned int port
Definition: mysql_session.h:526
int connect_timeout() const
Definition: mysql_session.cc:338
std::function< void()> OnResultSetEnd
Definition: mysql_session.h:167
std::string default_schema
Definition: mysql_session.h:528
mysql_ssl_mode ssl_mode() const
Definition: mysql_session.cc:248
std::string tls_version() const
Definition: mysql_session.cc:257
std::string host
Definition: mysql_session.h:525
static constexpr int kDefaultReadTimeout
Definition: mysql_session.h:160
std::string unix_socket
Definition: mysql_session.h:527
int read_timeout() const
Definition: mysql_session.cc:347
static constexpr int kDefaultConnectTimeout
Definition: mysql_session.h:159
mysql_ssl_mode
Definition: mysql.h:275
@ SSL_MODE_PREFERRED
Definition: mysql.h:277
enum_session_state_type
Type of state change information that the server can include in the Ok packet.
Definition: mysql_com.h:1077
static char * password
Definition: mysql_secure_installation.cc:58
Definition: mrs_component_embedded_mysql_cache.h:33
Definition: http_server_component.cc:36
collector::CountedMySQLSession::ConnectionParameters ConnectionParameters
Definition: query_retry_on_ro.cc:38
noexcept
The return type for any call_and_catch(f, args...) call where f(args...) returns Type.
Definition: call_and_catch.h:76
Define std::hash<Gtid>.
Definition: gtid.h:355
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2724
required string type
Definition: replication_group_member_actions.proto:34
Definition: mysql.h:303
std::string username
Definition: counted_mysql_session.h:59
mysql_harness::Destination destination
Definition: counted_mysql_session.h:57
std::string default_schema
Definition: counted_mysql_session.h:61
mysql_harness::SecureString password
Definition: counted_mysql_session.h:60
int read_timeout
Definition: counted_mysql_session.h:63
int connect_timeout
Definition: counted_mysql_session.h:62
unsigned long extra_client_flags
Definition: counted_mysql_session.h:64
std::string cert
Definition: counted_mysql_session.h:53
std::string key
Definition: counted_mysql_session.h:54
std::string ssl_cipher
Definition: counted_mysql_session.h:46
std::string tls_version
Definition: counted_mysql_session.h:45
std::string crl
Definition: counted_mysql_session.h:49
std::string capath
Definition: counted_mysql_session.h:48
std::string crlpath
Definition: counted_mysql_session.h:50
std::string ca
Definition: counted_mysql_session.h:47
mysql_ssl_mode ssl_mode
Definition: counted_mysql_session.h:44
Definition: counted_mysql_session.h:42
struct collector::CountedMySQLSession::ConnectionParameters::SslCert ssl_cert
struct collector::CountedMySQLSession::ConnectionParameters::SslOptions ssl_opts
struct collector::CountedMySQLSession::ConnectionParameters::ConnOptions conn_opts