MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
sqlite_connect.hpp
1#ifndef MSTL_DATABASE_SQLITE_CONNECT_HPP__
2#define MSTL_DATABASE_SQLITE_CONNECT_HPP__
3#ifdef MSTL_SUPPORT_SQLITE3__
4#include "MSTL/database/db_interface.hpp"
5#include <sqlite3.h>
7
8struct MSTL_API sqlite_connect final : idb_tb_connect {
9private:
10 mutable ::sqlite3* db = nullptr;
11 clock_type alive_time_ = 0;
12 mutable string_view last_error_;
13
14public:
15 sqlite_connect() noexcept { ::sqlite3_open(nullptr, &db); }
16 ~sqlite_connect() noexcept override { this->close(); }
17
18 bool connect_to(const _MSTL string&, const _MSTL string&,
19 const _MSTL string& dbname, const _MSTL string&,
20 uint32_t, const _MSTL string&) override;
21
22 bool connect_to(const db_config& config) override;
23 MSTL_NODISCARD bool reset_connect(const db_config& config) override;
24
25 MSTL_NODISCARD bool set_character_set(const _MSTL string& encoding) const override;
26
27 MSTL_NODISCARD string_view get_character_set() const override;
28 MSTL_NODISCARD string_view get_error() const override;
29 MSTL_NODISCARD uint32_t get_errno() const override { return db ? ::sqlite3_errcode(db) : 0; }
30
31 MSTL_NODISCARD bool update(const string& sql) const override;
32 MSTL_NODISCARD unique_ptr<idb_tb_result> query(const string& sql) const override;
33 MSTL_NODISCARD unique_ptr<idb_prepared_statement> prepare_statement(const string& sql) const override;
34
35 MSTL_NODISCARD bool connected() const override { return db != nullptr; }
36 MSTL_NODISCARD bool is_valid() const override;
37
38 void close() noexcept override { if (db) ::sqlite3_close(db); }
39 void refresh_alive() noexcept override { alive_time_ = std::clock(); }
40 MSTL_NODISCARD clock_type get_alive() const noexcept override { return std::clock() - alive_time_; }
41
42private:
43 bool connect_to_file(const string& file_path);
44};
45
46class MSTL_API sqlite_factory final : public idb_factory {
47public:
48 explicit sqlite_factory(db_config config)
49 : idb_factory(_MSTL move(config)) {}
50
51 idb_connect* create_connect() override;
52 idb_result* create_result(void* native_result) override;
53};
54
56#endif
57#endif // MSTL_DATABASE_SQLITE_CONNECT_HPP__
unsigned int uint32_t
32位无符号整数类型
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素