NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
pgsql_connect.hpp
浏览该文件的文档.
1#ifndef NEFORCE_DATABASE_PGSQL_CONNECT_HPP__
2#define NEFORCE_DATABASE_PGSQL_CONNECT_HPP__
3
10
11#ifdef NEFORCE_SUPPORT_POSTGRESQL
12# include <libpq-fe.h>
14NEFORCE_BEGIN_NAMESPACE__
15
21
27
42class NEFORCE_API pgsql_connect final : public sql_connect_base<pgsql_connect> {
43protected:
44 ::PGconn* link_ = nullptr;
46
47private:
48 mutable string last_error_;
49 mutable uint32_t last_errno_ = 0;
50
51public:
55 pgsql_connect() = default;
56
62 ~pgsql_connect() override { close(); }
63
64 pgsql_connect(const pgsql_connect&) = delete;
65 pgsql_connect& operator=(const pgsql_connect&) = delete;
66
75 NEFORCE_NODISCARD bool connect(const db_config& config) override;
76
84 bool reconnect(const db_config& config) override;
85
89 void close() override;
90
96 bool set_character_set(const string& encoding) override;
97
102 NEFORCE_NODISCARD string_view get_character_set() const override;
103
108 NEFORCE_NODISCARD string_view get_error() const override { return last_error_.view(); }
109
114 NEFORCE_NODISCARD uint32_t get_errno() const override { return last_errno_; }
115
121 bool update(const string& sql) const override;
122
128 unique_ptr<idb_tb_result> query(const string& sql) const override;
129
135 unique_ptr<idb_prepared_statement> prepare_statement(const string& sql) const override;
136
141 NEFORCE_NODISCARD bool connected() const override;
142
147 NEFORCE_NODISCARD bool is_valid() const override { return connected(); }
148
149 size_t batch_insert(const string& table, const vector<string>& columns,
150 const vector<vector<string>>& rows) override;
151
152 // PgSQL table_exists 使用 SELECT EXISTS(...) 模式,不同于基类的简单查询
153 NEFORCE_NODISCARD bool table_exists(const string& table) const override;
154
155private:
156 string begin_sql() { return "BEGIN"; }
157 string commit_sql() { return "COMMIT"; }
158 string rollback_sql() { return "ROLLBACK"; }
159 string table_exists_query(const string& table) const {
160 return "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = '" + table + "')";
161 }
162};
163
170class NEFORCE_API pgsql_factory final : public idb_factory {
171public:
176 explicit pgsql_factory(db_config config) :
177 idb_factory(_NEFORCE move(config)) {}
178
182 ~pgsql_factory() override = default;
183
189
195 idb_result* create_result(void* native_result) override;
196};
197 // PostgreSQL
199 // Database
201
202NEFORCE_END_NAMESPACE__
203#endif
204#endif // NEFORCE_DATABASE_PGSQL_CONNECT_HPP__
constexpr basic_string_view view(const size_type off, const size_type count=npos) const
获取子视图
idb_factory(db_config config) noexcept
构造函数
PostgreSQL数据库连接类
uint32_t get_errno() const override
获取最后错误码
string_view get_error() const override
获取最后错误信息
void close() override
关闭数据库连接
~pgsql_connect() override
析构函数
::PGconn * link_
PostgreSQL连接句柄
unique_ptr< idb_prepared_statement > prepare_statement(const string &sql) const override
创建预处理语句
string_view get_character_set() const override
获取当前字符集
bool reconnect(const db_config &config) override
重新连接数据库
bool update(const string &sql) const override
执行非查询SQL语句
unique_ptr< idb_tb_result > query(const string &sql) const override
执行查询SQL语句
bool connected() const override
检查连接是否已建立
pgsql_connect()=default
默认构造函数
bool set_character_set(const string &encoding) override
设置字符集
bool connect(const db_config &config) override
建立数据库连接
bool is_valid() const override
检查连接是否有效
idb_result * create_result(void *native_result) override
创建PostgreSQL结果集对象
idb_connect * create_connect() override
创建PostgreSQL连接对象
~pgsql_factory() override=default
析构函数
pgsql_factory(db_config config)
构造函数
独占智能指针
动态大小数组容器
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 bool connected() const =0
检查连接状态
virtual void close()=0
关闭连接
数据库结果集抽象基类