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"
8struct MSTL_API sqlite_connect final : idb_tb_connect {
10 mutable ::sqlite3* db =
nullptr;
11 clock_type alive_time_ = 0;
12 mutable string_view last_error_;
15 sqlite_connect() noexcept { ::sqlite3_open(
nullptr, &db); }
16 ~sqlite_connect() noexcept
override { this->close(); }
18 bool connect_to(
const _MSTL string&,
const _MSTL string&,
19 const _MSTL string& dbname,
const _MSTL string&,
22 bool connect_to(
const db_config& config)
override;
23 MSTL_NODISCARD
bool reset_connect(
const db_config& config)
override;
25 MSTL_NODISCARD
bool set_character_set(
const _MSTL string& encoding)
const override;
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; }
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;
35 MSTL_NODISCARD
bool connected()
const override {
return db !=
nullptr; }
36 MSTL_NODISCARD
bool is_valid()
const override;
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_; }
43 bool connect_to_file(
const string& file_path);
46class MSTL_API sqlite_factory final :
public idb_factory {
48 explicit sqlite_factory(db_config config)
51 idb_connect* create_connect()
override;
52 idb_result* create_result(
void* native_result)
override;
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)
移动范围元素