MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
sqlite_prepared_statement.hpp
1#ifndef MSTL_DATABASE_SQLITE_PREPARED_STATEMENT_HPP__
2#define MSTL_DATABASE_SQLITE_PREPARED_STATEMENT_HPP__
3#ifdef MSTL_SUPPORT_SQLITE3__
4#include "MSTL/database/db_interface.hpp"
5#include <sqlite3.h>
7
8class MSTL_API sqlite_prepared_statement final : public idb_prepared_statement {
9private:
10 ::sqlite3* db_ = nullptr;
11 ::sqlite3_stmt* stmt_ = nullptr;
12
13 uint32_t param_count_ = 0;
14 vector<vector<char>> param_buffers_;
15 bool prepared_ = false;
16 mutable string last_error_;
17
18 void clear_bindings() noexcept;
19 void reset_statement() noexcept;
20
21public:
22 explicit sqlite_prepared_statement(::sqlite3* db, const string& sql);
23
24 sqlite_prepared_statement(const sqlite_prepared_statement&) = delete;
25 sqlite_prepared_statement& operator =(const sqlite_prepared_statement&) = delete;
26
27 sqlite_prepared_statement(sqlite_prepared_statement&& other) noexcept;
28 sqlite_prepared_statement& operator =(sqlite_prepared_statement&& other) noexcept;
29
30 ~sqlite_prepared_statement() override;
31
32 MSTL_NODISCARD uint32_t param_count() const noexcept override { return param_count_; }
33
34 bool bind_param(uint32_t index, string_view value) override;
35 bool bind_param(uint32_t index, const string& value) override { return bind_param(index, value.view()); }
36 bool bind_param(uint32_t index, const char* value) override { return bind_param(index, string_view(value)); }
37 bool bind_param(uint32_t index, int32_t value) override;
38 bool bind_param(uint32_t index, int64_t value) override;
39 bool bind_param(uint32_t index, float64_t value) override;
40 bool bind_param(uint32_t index, const void* data, size_t length) override;
41
42 bool execute() override;
43 unique_ptr<idb_prepared_result> execute_query() override;
44
45 MSTL_NODISCARD string_view get_error() const noexcept override { return last_error_.view(); }
46 MSTL_NODISCARD uint32_t get_errno() const noexcept override {
47 return db_ ? ::sqlite3_errcode(db_) : 0;
48 }
49};
50
52#endif
53#endif // MSTL_DATABASE_SQLITE_PREPARED_STATEMENT_HPP__
unsigned int uint32_t
32位无符号整数类型
long long int64_t
64位有符号整数类型
double float64_t
64位双精度浮点数类型
int int32_t
32位有符号整数类型
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针