MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
postgresql_connect.hpp
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"
6#include <libpq-fe.h>
8
9class MSTL_API postgresql_connect final : public idb_tb_connect {
10private:
11 db_config config_{};
12 string last_error_{};
13 string charset_ = "utf8";
14 clock_type last_alive_ = 0;
15 uint32_t last_errno_ = 0;
16 ::PGconn* conn_ = nullptr;
17
18 void clear_error() noexcept;
19 void set_error(string error, uint32_t errno_val = 0);
20 void update_error();
21 string build_conn_string(
22 const string& user, const string& password,
23 const string& dbname, const string& host,
24 uint32_t port) const;
25
26public:
27 postgresql_connect() : last_alive_(std::clock()) {}
28 ~postgresql_connect() override { close(); }
29
30 postgresql_connect(const postgresql_connect&) = delete;
31 postgresql_connect& operator =(const postgresql_connect&) = delete;
32
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;
38
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_; }
43
44 bool update(const string& sql) const override;
45
46 MSTL_NODISCARD bool connected() const override;
47 MSTL_NODISCARD bool is_valid() const override { return connected(); }
48 void close() override;
49
50 void refresh_alive() override { last_alive_ = std::clock(); }
51 MSTL_NODISCARD clock_type get_alive() const override { return last_alive_; }
52
53 bool reset_connect(const db_config& config) override;
54
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;
57};
58
59
60class MSTL_API postgresql_factory final : public idb_factory {
61public:
62 explicit postgresql_factory(db_config config) : idb_factory(_MSTL move(config)) {}
63 ~postgresql_factory() override = default;
64
65 idb_connect* create_connect() override;
66 idb_result* create_result(void* native_result) override;
67};
68
70#endif
71#endif // MSTL_DATABASE_POSTGRESQL_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)
移动范围元素