MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
mysql_connect.hpp
1#ifndef MSTL_DATABASE_MYSQL_CONNECT_HPP__
2#define MSTL_DATABASE_MYSQL_CONNECT_HPP__
3#ifdef MSTL_SUPPORT_MYSQL__
4#include "../../core/config/undef_cmacro.hpp"
5#include "MSTL/database/db_interface.hpp"
6#ifdef CR_OUT_OF_MEMORY
7#undef CR_OUT_OF_MEMORY
8#endif
9#include <mysql.h>
11
12struct MSTL_API mysql_connect final : idb_tb_connect {
13private:
14 ::MYSQL* mysql_ = nullptr;
15 clock_type alive_time_ = 0;
16
17public:
18 mysql_connect() noexcept { mysql_ = ::mysql_init(nullptr); }
19 ~mysql_connect() noexcept override { this->close(); }
20
21 MSTL_NODISCARD bool connect_to(
22 const _MSTL string& user, const _MSTL string& password,
23 const _MSTL string& dbname, const _MSTL string& ip,
24 uint32_t port, const _MSTL string& character_set) noexcept override;
25
26 MSTL_NODISCARD bool connect_to(const db_config& config) noexcept override {
27 return connect_to(
28 config.username,
29 config.password,
30 config.database,
31 config.host,
32 config.port,
33 config.charset
34 );
35 }
36 MSTL_NODISCARD bool reset_connect(const db_config& config) override;
37
38 MSTL_NODISCARD bool set_character_set(const _MSTL string& encoding) const noexcept override {
39 return connected() && !::mysql_set_character_set(mysql_, encoding.data());
40 }
41 MSTL_NODISCARD bool set_options(const ::mysql_option option, const _MSTL string& str) const noexcept {
42 return connected() && !::mysql_options(mysql_, option, str.data());
43 }
44
45 MSTL_NODISCARD string_view get_character_set() const noexcept override {
46 return ::mysql_character_set_name(mysql_);
47 }
48 MSTL_NODISCARD string_view get_error() const noexcept override {
49 return ::mysql_error(mysql_);
50 }
51 MSTL_NODISCARD uint32_t get_errno() const noexcept override {
52 return ::mysql_errno(mysql_);
53 }
54
55 MSTL_NODISCARD bool update(const _MSTL string& sql) const noexcept override {
56 return !::mysql_query(mysql_, sql.c_str());
57 }
58 MSTL_NODISCARD unique_ptr<idb_tb_result> query(const string& sql) const noexcept override;
59 MSTL_NODISCARD unique_ptr<idb_prepared_statement> prepare_statement(const string& sql) const override;
60
61 MSTL_NODISCARD bool connected() const noexcept override { return mysql_ != nullptr; }
62 MSTL_NODISCARD bool is_valid() const noexcept override { return mysql_ping(mysql_) == 0; }
63
64 void close() noexcept override { if (connected()) mysql_close(mysql_); }
65 void refresh_alive() noexcept override { alive_time_ = std::clock(); }
66 MSTL_NODISCARD clock_type get_alive() const noexcept override { return std::clock() - alive_time_; }
67};
68
69class MSTL_API mysql_factory final : public idb_factory {
70public:
71 explicit mysql_factory(db_config config)
72 : idb_factory(_MSTL move(config)) {}
73
74 idb_connect* create_connect() override;
75 idb_result* create_result(void* native_result) override;
76};
77
79#endif // MSTL_SUPPORT_MYSQL__
80#endif // MSTL_DATABASE_MYSQL_CONNECT_HPP__
unsigned int uint32_t
32位无符号整数类型
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素