Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
MysqlClient.hpp
Go to the documentation of this file.
1#pragma once
2#include <mysql.h>
3#include <string>
4#include <memory>
5#include <coroutine>
6#include <vector>
7#include <stdexcept>
8#include <functional>
11
12namespace database {
13
18public:
22 struct Config {
23 std::string host;
24 int port{3306};
25 std::string user;
26 std::string password;
27 std::string dbname;
28 };
29
30
31
38 MysqlClient(network::Proactor& proactor, const Config& config);
40
41 // Delete copy semantics
42 MysqlClient(const MysqlClient&) = delete;
44
45 // Awaiter for connecting
48 MYSQL* ret_ptr{nullptr};
49 int status{0};
50 std::coroutine_handle<> coro;
51
52 bool await_ready() const { return false; }
53 void await_suspend(std::coroutine_handle<> h);
54 void await_resume();
55 void resume_loop();
56 };
57
58 // Awaiter for executing a query
59 struct QueryAwaiter {
61 std::string query;
62 int err{0};
63 int status{0};
64 std::coroutine_handle<> coro;
66
67 bool await_ready() const { return false; }
68 void await_suspend(std::coroutine_handle<> h);
70 void resume_loop();
73
74 MYSQL_RES* res{nullptr};
75 };
76
83
94 QueryAwaiter query_async(std::string query);
95
99 void close();
100
105 network::Proactor& get_proactor() { return proactor_; }
106
111 MYSQL* get_mysql() { return mysql_; }
112
113private:
114 network::Proactor& proactor_;
115 Config config_;
116 MYSQL* mysql_{nullptr};
117 bool connected_{false};
118
119 void wait_for_status(int status, std::function<void()> callback);
120};
121
122} // namespace database
An asynchronous MySQL client using coroutines and a network Proactor.
Definition MysqlClient.hpp:17
network::Proactor & get_proactor()
Gets the associated network proactor.
Definition MysqlClient.hpp:105
MysqlClient & operator=(const MysqlClient &)=delete
MYSQL * get_mysql()
Gets the underlying MySQL connection object.
Definition MysqlClient.hpp:111
void close()
Closes the MySQL connection.
Definition MysqlClient.cpp:19
ConnectAwaiter connect_async()
Connects to the MySQL database asynchronously.
Definition MysqlClient.cpp:72
MysqlClient(const MysqlClient &)=delete
QueryAwaiter query_async(std::string query)
Executes a query asynchronously.
Definition MysqlClient.cpp:153
~MysqlClient()
Definition MysqlClient.cpp:15
Represents a generic, unified result set from a database query.
Definition ResultSet.hpp:111
Definition Proactor.hpp:8
Definition Config.hpp:5
Definition ConnectionPool.hpp:10
A coroutine awaiter for connecting a PostgresClient asynchronously.
Definition PostgresCoro.hpp:12
Configuration options for the MySQL client.
Definition MysqlClient.hpp:22
std::string password
Definition MysqlClient.hpp:26
std::string user
Definition MysqlClient.hpp:25
std::string host
Definition MysqlClient.hpp:23
int port
Definition MysqlClient.hpp:24
std::string dbname
Definition MysqlClient.hpp:27
Definition MysqlClient.hpp:46
MysqlClient & client
Definition MysqlClient.hpp:47
void await_suspend(std::coroutine_handle<> h)
Definition MysqlClient.cpp:42
void await_resume()
Definition MysqlClient.cpp:65
void resume_loop()
Definition MysqlClient.cpp:54
MYSQL * ret_ptr
Definition MysqlClient.hpp:48
std::coroutine_handle coro
Definition MysqlClient.hpp:50
bool await_ready() const
Definition MysqlClient.hpp:52
int status
Definition MysqlClient.hpp:49
Definition MysqlClient.hpp:59
int err
Definition MysqlClient.hpp:62
ResultSet await_resume()
Definition MysqlClient.cpp:146
ResultSet result
Definition MysqlClient.hpp:65
void process_result_cont()
Definition MysqlClient.cpp:103
int status
Definition MysqlClient.hpp:63
MYSQL_RES * res
Definition MysqlClient.hpp:74
void resume_loop()
Definition MysqlClient.cpp:83
bool await_ready() const
Definition MysqlClient.hpp:67
std::coroutine_handle coro
Definition MysqlClient.hpp:64
void await_suspend(std::coroutine_handle<> h)
Definition MysqlClient.cpp:77
void process_result_start()
Definition MysqlClient.cpp:98
MysqlClient & client
Definition MysqlClient.hpp:60
std::string query
Definition MysqlClient.hpp:61
A coroutine awaiter for executing a query on a PostgresClient asynchronously.
Definition PostgresCoro.hpp:39