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"
12struct MSTL_API mysql_connect final : idb_tb_connect {
14 ::MYSQL* mysql_ =
nullptr;
15 clock_type alive_time_ = 0;
18 mysql_connect() noexcept { mysql_ = ::mysql_init(
nullptr); }
19 ~mysql_connect() noexcept
override { this->close(); }
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;
26 MSTL_NODISCARD
bool connect_to(
const db_config& config)
noexcept override {
36 MSTL_NODISCARD
bool reset_connect(
const db_config& config)
override;
38 MSTL_NODISCARD
bool set_character_set(
const _MSTL string& encoding)
const noexcept override {
39 return connected() && !::mysql_set_character_set(mysql_, encoding.data());
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());
45 MSTL_NODISCARD string_view get_character_set() const noexcept
override {
46 return ::mysql_character_set_name(mysql_);
48 MSTL_NODISCARD string_view get_error() const noexcept
override {
49 return ::mysql_error(mysql_);
51 MSTL_NODISCARD
uint32_t get_errno() const noexcept
override {
52 return ::mysql_errno(mysql_);
55 MSTL_NODISCARD
bool update(
const _MSTL string& sql)
const noexcept override {
56 return !::mysql_query(mysql_, sql.c_str());
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;
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; }
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_; }
69class MSTL_API mysql_factory final :
public idb_factory {
71 explicit mysql_factory(db_config config)
74 idb_connect* create_connect()
override;
75 idb_result* create_result(
void* native_result)
override;
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)
移动范围元素