MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
mysql_prepared_statement.hpp
1#ifndef MSTL_DATABASE_MYSQL_PREPARED_STATEMENT_HPP__
2#define MSTL_DATABASE_MYSQL_PREPARED_STATEMENT_HPP__
3#ifdef MSTL_SUPPORT_MYSQL__
4#include "MSTL/database/db_interface.hpp"
5#ifdef CR_OUT_OF_MEMORY
6#undef CR_OUT_OF_MEMORY
7#endif
8#include <mysql.h>
10
11class MSTL_API mysql_prepared_statement final : public idb_prepared_statement {
12private:
13 ::MYSQL_STMT* stmt_ = nullptr;
14 ::MYSQL* conn_ = nullptr;
15 uint32_t param_count_ = 0;
16
17 vector<::MYSQL_BIND> bind_params_;
18 vector<vector<char>> param_buffers_;
19
20 MSTL_ALWAYS_INLINE void throw_if_stmt_null() const {
21 if (!stmt_) {
22 throw_exception(database_prepared_stmt_exception("Prepared statement not initialized"));
23 }
24 }
25
26public:
27 explicit mysql_prepared_statement(::MYSQL* conn, string_view sql);
28
29 explicit mysql_prepared_statement(::MYSQL* conn, const string& sql)
30 : mysql_prepared_statement(conn, sql.view()) {}
31
32 explicit mysql_prepared_statement(::MYSQL* conn, const char* sql)
33 : mysql_prepared_statement(conn, string_view{sql}) {}
34
35 mysql_prepared_statement(mysql_prepared_statement&& other) noexcept;
36 mysql_prepared_statement& operator =(mysql_prepared_statement&& other) noexcept;
37
38 mysql_prepared_statement(const mysql_prepared_statement&) = delete;
39 mysql_prepared_statement& operator =(const mysql_prepared_statement&) = delete;
40
41 ~mysql_prepared_statement() override;
42
43 MSTL_NODISCARD uint32_t param_count() const noexcept override { return param_count_; }
44
45 bool bind_param(uint32_t index, const string& value) override { return bind_param(index, value.view()); }
46 bool bind_param(uint32_t index, string_view value) override;
47 bool bind_param(uint32_t index, const char* value) override { return bind_param(index, string_view{value}); }
48 bool bind_param(uint32_t index, int32_t value) override;
49 bool bind_param(uint32_t index, int64_t value) override;
50 bool bind_param(uint32_t index, float64_t value) override;
51 bool bind_param(uint32_t index, const void* data, size_t length) override;
52
53 bool execute() override;
54 MSTL_NODISCARD unique_ptr<idb_prepared_result> execute_query() override;
55
56 MSTL_NODISCARD string_view get_error() const noexcept override;
57 MSTL_NODISCARD uint32_t get_errno() const noexcept override;
58
59 void swap(mysql_prepared_statement& other) noexcept;
60};
61
63#endif // MSTL_SUPPORT_MYSQL__
64#endif // MSTL_DATABASE_MYSQL_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
void swap()=delete
删除无参数的swap重载
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针