26#ifndef MYSQLD_MOCK_STATEMENT_READER_INCLUDED
27#define MYSQLD_MOCK_STATEMENT_READER_INCLUDED
36#include <openssl/bio.h>
65 std::vector<classic_protocol::message::server::ColumnMeta>
columns;
66 std::vector<RowValueType>
rows;
102 virtual void encode_ok(
const uint64_t affected_rows = 0,
103 const uint64_t last_insert_id = 0,
104 const uint16_t server_status = 0,
105 const uint16_t warning_count = 0) = 0;
108 encode_ok(resp.affected_rows(), resp.last_insert_id(),
109 resp.status_flags().to_ulong(), resp.warning_count());
123 template <
class CompletionToken>
130 auto write_ec = write_res.error();
136 [
this, compl_handler = std::move(
init.completion_handler)](
137 std::error_code ec)
mutable {
139 compl_handler(ec, {});
147 [compl_handler = std::move(
init.completion_handler),
148 ec = write_res.error()]() { compl_handler(ec, {}); });
154 [compl_handler = std::move(
init.completion_handler),
155 transferred = write_res.value()]() {
156 compl_handler({}, transferred);
160 return init.result.get();
163 template <
class CompletionToken>
166 async_send_tls(std::forward<CompletionToken>(token));
169 std::forward<CompletionToken>(token));
178 template <
class CompletionToken>
185 auto orig_size =
buf.size();
186 auto grow_size = 16 * 1024;
189 size_t transferred{};
190 auto read_res = read_ssl(
buf.data(orig_size, grow_size));
192 transferred = read_res.value();
195 buf.shrink(grow_size - transferred);
198 const auto read_ec = read_res.error();
200 client_socket_.async_wait(
203 [
this, compl_handler = std::move(
init.completion_handler)](
204 std::error_code ec)
mutable {
206 compl_handler(ec, {});
210 async_receive_tls(std::move(compl_handler));
217 client_socket_.get_executor(),
218 [compl_handler = std::move(
init.completion_handler),
219 ec = map_tls_error_code(read_ec)]() { compl_handler(ec, {}); });
224 [compl_handler = std::move(
init.completion_handler),
225 transferred]() { compl_handler({}, transferred); });
228 return init.result.get();
231 template <
class CompletionToken>
233 is_terminated_([&](
const bool killed) {
239 [compl_handler = std::move(
init.completion_handler)]() {
241 make_error_code(std::errc::operation_canceled), 0);
243 }
else if (is_tls()) {
244 return async_receive_tls(std::forward<CompletionToken>(token));
248 std::forward<CompletionToken>(token));
253 template <
class CompletionToken>
258 auto res = tls_accept();
260 auto ec = res.error();
265 client_socket_.async_wait(
266 wt, [&, compl_handler = std::move(
init.completion_handler)](
267 std::error_code ec)
mutable {
274 async_tls_accept(std::move(compl_handler));
277 net::defer(client_socket_.get_executor().context(),
278 [ec, compl_handler = std::move(
init.completion_handler)]() {
283 net::defer(client_socket_.get_executor().context(),
284 [compl_handler = std::move(
init.completion_handler)]() {
289 return init.result.get();
292 const std::vector<uint8_t> &
send_buffer()
const {
return send_buffer_; }
301 auth_method_name_ = auth_method_name;
307 auth_method_data_ = auth_method_data;
312 static bool authenticate(
const std::string &auth_method_name,
313 const std::string &auth_method_data,
315 const std::vector<uint8_t> &auth_response);
321 const SSL *
ssl()
const {
return ssl_.get(); }
350 std::string username_{};
351 std::string auth_method_name_{};
352 std::string auth_method_data_{};
361 std::unique_ptr<SSL, SSL_Deleter>
ssl_;
374 bool cert_required{
false};
static mysql_service_status_t init()
Component initialization.
Definition: audit_api_message_emit.cc:571
Monitor pattern.
Definition: monitor.h:39
TLS Context for the server side.
Definition: tls_server_context.h:46
Definition: executor.h:72
Definition: socket.h:1144
io_context & context() const noexcept
Definition: io_context.h:1002
Definition: io_context.h:61
executor_type get_executor() noexcept
Definition: io_context.h:1080
TCP protocol.
Definition: internet.h:1155
basic_endpoint< tcp > endpoint
Definition: internet.h:1157
basic_stream_socket< tcp > socket
Definition: internet.h:1159
static constexpr wait_type wait_read
Definition: socket.h:168
static constexpr wait_type wait_write
Definition: socket.h:169
Definition: statement_reader.h:356
void operator()(SSL *v)
Definition: statement_reader.h:358
Definition: statement_reader.h:81
std::string username() const
Definition: statement_reader.h:298
virtual ~ProtocolBase()=default
ProtocolBase(ProtocolBase &&)=delete
net::steady_timer & exec_timer()
Definition: statement_reader.h:325
TlsServerContext & tls_ctx_
Definition: statement_reader.h:354
ProtocolBase(socket_type client_sock, endpoint_type client_ep, TlsServerContext &tls_ctx)
Definition: protocol_base.cc:36
stdx::expected< size_t, std::error_code > avail_ssl()
Definition: protocol_base.cc:74
const std::vector< uint8_t > & send_buffer() const
Definition: statement_reader.h:292
void async_send_tls(CompletionToken &&token)
Definition: statement_reader.h:124
socket_type client_socket_
Definition: statement_reader.h:346
const SSL * ssl() const
Definition: statement_reader.h:321
ProtocolBase & operator=(ProtocolBase &&rhs)=delete
std::string auth_method_data() const
Definition: statement_reader.h:310
virtual void encode_ok(const uint64_t affected_rows=0, const uint64_t last_insert_id=0, const uint16_t server_status=0, const uint16_t warning_count=0)=0
void encode_ok(const OkResponse &resp)
Definition: statement_reader.h:107
void auth_method_name(const std::string &auth_method_name)
Definition: statement_reader.h:300
void async_tls_accept(CompletionToken &&token)
Definition: statement_reader.h:254
virtual void encode_resultset(const ResultsetResponse &response)=0
endpoint_type client_ep_
Definition: statement_reader.h:347
std::vector< uint8_t > recv_buffer_
Definition: statement_reader.h:363
const net::ip::tcp::socket & client_socket() const
Definition: statement_reader.h:294
void async_receive_tls(CompletionToken &&token)
Definition: statement_reader.h:179
void auth_method_data(const std::string &auth_method_data)
Definition: statement_reader.h:306
bool is_tls()
Definition: statement_reader.h:319
void async_receive(CompletionToken &&token)
Definition: statement_reader.h:232
typename protocol_type::endpoint endpoint_type
Definition: statement_reader.h:85
void async_send(CompletionToken &&token)
Definition: statement_reader.h:164
std::string auth_method_name() const
Definition: statement_reader.h:304
virtual void encode_error(const ErrorResponse &resp)=0
stdx::expected< size_t, std::error_code > read_ssl(const net::mutable_buffer &buf)
Definition: protocol_base.cc:59
static std::error_code map_tls_error_code(std::error_code ec)
Definition: statement_reader.h:174
void username(const std::string &username)
Definition: statement_reader.h:296
ProtocolBase & operator=(const ProtocolBase &)=delete
typename protocol_type::socket socket_type
Definition: statement_reader.h:84
stdx::expected< size_t, std::error_code > write_ssl(const net::const_buffer &buf)
Definition: protocol_base.cc:48
std::vector< uint8_t > send_buffer_
Definition: statement_reader.h:364
net::io_context & io_context()
Definition: statement_reader.h:338
ProtocolBase(const ProtocolBase &)=delete
std::unique_ptr< SSL, SSL_Deleter > ssl_
Definition: statement_reader.h:361
Definition: statement_reader.h:367
StatementReaderBase & operator=(StatementReaderBase &&)=default
virtual std::vector< AsyncNotice > get_async_notices()=0
virtual stdx::expected< handshake_data, ErrorResponse > handshake()=0
StatementReaderBase(StatementReaderBase &&)=default
virtual ~StatementReaderBase()=default
virtual void set_session_ssl_info(const SSL *ssl)=0
virtual void handle_statement(const std::string &statement, ProtocolBase *protocol)=0
Returns the data about the next statement from the json file.
virtual stdx::expected< classic_protocol::message::server::Greeting, std::error_code > server_greeting(bool with_tls)=0
StatementReaderBase & operator=(const StatementReaderBase &)=default
virtual std::chrono::microseconds server_greeting_exec_time()=0
StatementReaderBase()=default
StatementReaderBase(const StatementReaderBase &)=default
virtual std::chrono::microseconds get_default_exec_time()=0
Returns the default execution time in microseconds.
static char * password
Definition: mysql_secure_installation.cc:56
Definition: buf0block_hint.cc:30
constexpr value_type ssl
Definition: classic_protocol_constants.h:49
borrowable::message::server::Error< false > Error
Definition: classic_protocol_message.h:1399
borrowable::message::server::Greeting< false > Greeting
Definition: classic_protocol_message.h:1401
borrowable::message::server::Ok< false > Ok
Definition: classic_protocol_message.h:1398
bool terminate(THD *thd)
Drop all DD tables in case there is an error while upgrading server.
Definition: upgrade.cc:686
dynamic_vector_buffer< T, Allocator > dynamic_buffer(std::vector< T, Allocator > &vec) noexcept
Definition: buffer.h:663
auto defer(CompletionToken &&token)
Definition: executor.h:804
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:420
std::enable_if_t< is_dynamic_buffer< DynamicBuffer >::value, void > async_read(AsyncReadStream &stream, DynamicBuffer &&b, CompletionCondition completion_condition, CompletionToken &&token)
Definition: buffer.h:928
std::enable_if_t< is_dynamic_buffer< DynamicBuffer >::value, void > async_write(AsyncWriteStream &stream, DynamicBuffer &&b, CompletionCondition cond, CompletionToken &&token)
Definition: buffer.h:1074
Definition: mock_server_component.h:36
classic_protocol::message::server::Ok OkResponse
Definition: statement_reader.h:69
std::vector< std::optional< std::string > > RowValueType
Vector for keeping has_value|string representation of the values of the single row (ordered by column...
Definition: statement_reader.h:59
classic_protocol::message::server::Error ErrorResponse
Definition: statement_reader.h:70
Definition: statement_reader.h:72
std::chrono::milliseconds send_offset_ms
Definition: statement_reader.h:75
bool is_local
Definition: statement_reader.h:77
std::string payload
Definition: statement_reader.h:78
unsigned type
Definition: statement_reader.h:76
Keeps result data for single SQL statement that returns resultset.
Definition: statement_reader.h:64
std::vector< RowValueType > rows
Definition: statement_reader.h:66
std::vector< classic_protocol::message::server::ColumnMeta > columns
Definition: statement_reader.h:65
Definition: statement_reader.h:369
std::optional< std::string > username
Definition: statement_reader.h:372
std::optional< ErrorResponse > error
Definition: statement_reader.h:370
std::optional< std::string > cert_issuer
Definition: statement_reader.h:376
std::optional< std::string > password
Definition: statement_reader.h:373
std::optional< std::string > cert_subject
Definition: statement_reader.h:375
Definition: mysqlslap.cc:217