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"
8class MSTL_API sqlite_prepared_statement final :
public idb_prepared_statement {
10 ::sqlite3* db_ =
nullptr;
11 ::sqlite3_stmt* stmt_ =
nullptr;
14 vector<vector<char>> param_buffers_;
15 bool prepared_ =
false;
16 mutable string last_error_;
18 void clear_bindings() noexcept;
19 void reset_statement() noexcept;
22 explicit sqlite_prepared_statement(::sqlite3* db, const
string& sql);
24 sqlite_prepared_statement(const sqlite_prepared_statement&) = delete;
25 sqlite_prepared_statement& operator =(const sqlite_prepared_statement&) = delete;
27 sqlite_prepared_statement(sqlite_prepared_statement&& other) noexcept;
28 sqlite_prepared_statement& operator =(sqlite_prepared_statement&& other) noexcept;
30 ~sqlite_prepared_statement() override;
32 MSTL_NODISCARD
uint32_t param_count() const noexcept
override {
return param_count_; }
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)); }
40 bool bind_param(
uint32_t index,
const void*
data,
size_t length)
override;
42 bool execute()
override;
43 unique_ptr<idb_prepared_result> execute_query()
override;
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;
unsigned int uint32_t
32位无符号整数类型
long long int64_t
64位有符号整数类型
double float64_t
64位双精度浮点数类型
#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()))
获取容器的底层数据指针