1#ifndef MSTL_DATABASE_POSTGRESQL_CONNECT_HPP__
2#define MSTL_DATABASE_POSTGRESQL_CONNECT_HPP__
3#ifdef MSTL_SUPPORT_POSTGRESQL__
4#include "../../core/config/undef_cmacro.hpp"
5#include "MSTL/database/db_interface.hpp"
9class MSTL_API postgresql_connect final :
public idb_tb_connect {
13 string charset_ =
"utf8";
14 clock_type last_alive_ = 0;
16 ::PGconn* conn_ =
nullptr;
18 void clear_error() noexcept;
19 void set_error(
string error,
uint32_t errno_val = 0);
21 string build_conn_string(
22 const
string& user, const
string& password,
23 const
string& dbname, const
string& host,
27 postgresql_connect() : last_alive_(std::clock()) {}
28 ~postgresql_connect()
override { close(); }
30 postgresql_connect(
const postgresql_connect&) =
delete;
31 postgresql_connect& operator =(
const postgresql_connect&) =
delete;
33 MSTL_NODISCARD
bool connect_to(
34 const string& user,
const string& password,
35 const string& dbname,
const string& ip,
36 uint32_t port,
const string& character_set)
override;
37 MSTL_NODISCARD
bool connect_to(
const db_config& config)
override;
39 bool set_character_set(
const string& encoding)
const override;
40 MSTL_NODISCARD string_view get_character_set()
const override;
41 MSTL_NODISCARD string_view get_error()
const override {
return last_error_.view(); }
42 MSTL_NODISCARD
uint32_t get_errno()
const override {
return last_errno_; }
44 bool update(
const string& sql)
const override;
46 MSTL_NODISCARD
bool connected()
const override;
47 MSTL_NODISCARD
bool is_valid()
const override {
return connected(); }
48 void close()
override;
50 void refresh_alive()
override { last_alive_ = std::clock(); }
51 MSTL_NODISCARD clock_type get_alive()
const override {
return last_alive_; }
53 bool reset_connect(
const db_config& config)
override;
55 unique_ptr<idb_tb_result> query(
const string& sql)
const override;
56 unique_ptr<idb_prepared_statement> prepare_statement(
const string& sql)
const override;
60class MSTL_API postgresql_factory final :
public idb_factory {
62 explicit postgresql_factory(db_config config) : idb_factory(
_MSTL move(config)) {}
63 ~postgresql_factory()
override =
default;
65 idb_connect* create_connect()
override;
66 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)
移动范围元素