NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
mysql_connect.hpp
浏览该文件的文档.
1#ifndef NEFORCE_DATABASE_MYSQL_CONNECT_HPP__
2#define NEFORCE_DATABASE_MYSQL_CONNECT_HPP__
3
10
11#ifdef NEFORCE_SUPPORT_MYSQL
12# include <mysql/mysql.h>
14NEFORCE_BEGIN_NAMESPACE__
15
21
27
41struct NEFORCE_API mysql_connect final : sql_connect_base<mysql_connect> {
42protected:
43 ::MYSQL* link_ = nullptr;
45
46private:
47 mutable string last_error_;
48 mutable uint32_t last_errno_ = 0;
49
50public:
56 mysql_connect() { link_ = ::mysql_init(nullptr); }
57
63 ~mysql_connect() noexcept override { close(); }
64
72 NEFORCE_NODISCARD bool connect(const db_config& config) override;
73
81 NEFORCE_NODISCARD bool reconnect(const db_config& config) override;
82
86 void close() noexcept override;
87
93 NEFORCE_NODISCARD bool set_character_set(const string& encoding) noexcept override;
94
101 NEFORCE_NODISCARD bool set_options(::mysql_option option, const string& str) const noexcept;
102
107 NEFORCE_NODISCARD string_view get_character_set() const noexcept override;
108
113 NEFORCE_NODISCARD string_view get_error() const noexcept override;
114
119 NEFORCE_NODISCARD uint32_t get_errno() const noexcept override;
120
126 NEFORCE_NODISCARD bool update(const string& sql) const override;
127
133 NEFORCE_NODISCARD unique_ptr<idb_tb_result> query(const string& sql) const override;
134
141 NEFORCE_NODISCARD unique_ptr<idb_prepared_statement> prepare_statement(const string& sql) const override;
142
147 NEFORCE_NODISCARD bool connected() const noexcept override { return link_ != nullptr; }
148
153 NEFORCE_NODISCARD bool is_valid() const noexcept override { return ::mysql_ping(link_) == 0; }
154
155 size_t batch_insert(const string& table, const vector<string>& columns,
156 const vector<vector<string>>& rows) override;
157
158private:
159 string begin_sql() { return "START TRANSACTION"; }
160 string commit_sql() { return "COMMIT"; }
161 string rollback_sql() { return "ROLLBACK"; }
162 string table_exists_query(const string& table) const { return "SHOW TABLES LIKE '" + table + "'"; }
163};
164
171class NEFORCE_API mysql_factory final : public idb_factory {
172public:
177 explicit mysql_factory(db_config config) noexcept :
178 idb_factory(move(config)) {}
179
180 mysql_factory(const mysql_factory&) = delete;
181 mysql_factory& operator=(const mysql_factory&) = delete;
182
183 mysql_factory(mysql_factory&&) noexcept = default;
184 mysql_factory& operator=(mysql_factory&&) noexcept = default;
185
186 ~mysql_factory() noexcept override = default;
187
193
199 idb_result* create_result(void* native_result) override;
200};
201 // MySQL
203 // Database
205
206NEFORCE_END_NAMESPACE__
207#endif // NEFORCE_SUPPORT_MYSQL
208#endif // NEFORCE_DATABASE_MYSQL_CONNECT_HPP__
idb_factory(db_config config) noexcept
构造函数
idb_connect * create_connect() override
创建MySQL连接对象
idb_result * create_result(void *native_result) override
创建MySQL结果集对象
mysql_factory(db_config config) noexcept
构造函数
独占智能指针
动态大小数组容器
unsigned int uint32_t
32位无符号整数类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
SQL连接CRTP基类
数据库连接配置结构
数据库连接抽象基类
virtual void close()=0
关闭连接
预处理语句抽象基类
数据库结果集抽象基类
关系型数据库结果集抽象基类
unique_ptr< idb_prepared_statement > prepare_statement(const string &sql) const override
创建预处理语句
bool connected() const noexcept override
检查连接是否已建立
bool set_character_set(const string &encoding) noexcept override
设置字符集
void close() noexcept override
关闭数据库连接
bool set_options(::mysql_option option, const string &str) const noexcept
设置MySQL连接选项
unique_ptr< idb_tb_result > query(const string &sql) const override
执行查询SQL语句
bool update(const string &sql) const override
执行非查询SQL语句
bool reconnect(const db_config &config) override
重新连接数据库
string_view get_character_set() const noexcept override
获取当前字符集
::MYSQL * link_
MySQL连接句柄
bool connect(const db_config &config) override
建立数据库连接
uint32_t get_errno() const noexcept override
获取最后错误码
bool is_valid() const noexcept override
检查连接是否有效
~mysql_connect() noexcept override
析构函数
string_view get_error() const noexcept override
获取最后错误信息