MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
postgresql_prepared_statement.hpp
1#ifndef MSTL_DATABASE_POSTGRESQL_PREPARED_STATEMENT_HPP__
2#define MSTL_DATABASE_POSTGRESQL_PREPARED_STATEMENT_HPP__
3#ifdef MSTL_SUPPORT_POSTGRESQL__
4#include "MSTL/database/db_interface.hpp"
5#include <libpq-fe.h>
7
9struct __pgsql_pstmt_data {
10 vector<string> param_values{};
11 vector<const char*> param_ptrs{};
12 vector<int> param_lengths{};
13 vector<int> param_formats{};
14};
16
17class MSTL_API postgresql_prepared_statement final : public idb_prepared_statement {
18private:
19 ::PGconn* conn_ = nullptr;
20 string stmt_name_{};
21 string sql_{};
22 uint32_t param_count_ = 0;
23 _INNER __pgsql_pstmt_data* data_ = new _INNER __pgsql_pstmt_data();
24 vector<vector<char>> param_buffers_{};
25 string last_error_{};
26 uint32_t last_errno_ = 0;
27
28 void init_params() const;
29 bool prepare();
30 void clear_error() noexcept;
31 void set_error(string error, uint32_t errno_val = 0) noexcept;
32
33public:
34 postgresql_prepared_statement(PGconn* conn, const string& sql);
35 ~postgresql_prepared_statement() override;
36
37 MSTL_NODISCARD uint32_t param_count() const noexcept override { return param_count_; }
38
39 bool bind_param(uint32_t index, const string& value) override { return bind_param(index, value.view()); }
40 bool bind_param(uint32_t index, string_view value) override;
41 bool bind_param(uint32_t index, const char* value) override { return bind_param(index, string_view(value)); }
42 bool bind_param(uint32_t index, int32_t value) override;
43 bool bind_param(uint32_t index, int64_t value) override;
44 bool bind_param(uint32_t index, float64_t value) override;
45 bool bind_param(uint32_t index, const void* data, size_t length) override;
46
47 bool execute() override;
48 MSTL_NODISCARD unique_ptr<idb_prepared_result> execute_query() override;
49 MSTL_NODISCARD string_view get_error() const noexcept override { return last_error_.view(); }
50 MSTL_NODISCARD uint32_t get_errno() const noexcept override { return last_errno_; }
51};
52
54#endif
55#endif // MSTL_DATABASE_POSTGRESQL_PREPARED_STATEMENT_HPP__
unsigned int uint32_t
32位无符号整数类型
long long int64_t
64位有符号整数类型
double float64_t
64位双精度浮点数类型
int int32_t
32位有符号整数类型
#define MSTL_END_INNER__
结束inner命名空间
#define _INNER
inner命名空间前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
#define MSTL_BEGIN_INNER__
开始inner命名空间
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针