1#ifndef NEFORCE_DATABASE_SQLITE_CONNECT_HPP__
2#define NEFORCE_DATABASE_SQLITE_CONNECT_HPP__
11#ifdef NEFORCE_SUPPORT_SQLITE3
12# ifdef NEFORCE_SUPPORT_SQLCIPHER
13# include <sqlcipher/sqlite3.h>
20NEFORCE_BEGIN_NAMESPACE__
53# ifdef NEFORCE_SUPPORT_SQLCIPHER
63 enum class key_type :
byte_t {
74 mutable string last_error_;
111# ifdef NEFORCE_SUPPORT_SQLCIPHER
123 bool connect(
const db_config& config,
const string& encryption_key, key_type type = key_type::PBKDF2);
134 NEFORCE_NODISCARD
bool reconnect(
const db_config& config,
const string& encryption_key,
135 key_type type = key_type::PBKDF2);
145 NEFORCE_NODISCARD
bool rekey(
const string& new_key, key_type type = key_type::PBKDF2);
184 NEFORCE_NODISCARD
bool update(
const string& sql)
const override;
212 NEFORCE_NODISCARD
bool table_exists(
const string& table)
const override;
214 size_t batch_insert(
const string& table,
const vector<string>& columns,
218 string begin_sql() {
return "BEGIN TRANSACTION"; }
219 string commit_sql() {
return "COMMIT"; }
220 string rollback_sql() {
return "ROLLBACK"; }
221 string table_exists_query(
const string& table)
const {
222 return "SELECT name FROM sqlite_master WHERE type='table' AND name='" + table +
"'";
233# ifdef NEFORCE_SUPPORT_SQLCIPHER
234 string encryption_key_;
235 sqlite_connect::key_type key_type_ = sqlite_connect::key_type::PBKDF2;
246# ifdef NEFORCE_SUPPORT_SQLCIPHER
254 sqlite_connect::key_type type = sqlite_connect::key_type::PBKDF2) :
256 encryption_key_(
move(encryption_key)),
278NEFORCE_END_NAMESPACE__
idb_factory(db_config config) noexcept
构造函数
idb_result * create_result(void *native_result) override
创建SQLite结果集对象
sqlite_factory(db_config config)
构造函数
idb_connect * create_connect() override
创建SQLite连接对象
unsigned char byte_t
字节类型,定义为无符号字符
unsigned int uint32_t
32位无符号整数类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
virtual bool reconnect(const db_config &config)=0
重新连接
virtual bool connect(const db_config &config)=0
建立连接
virtual void close()=0
关闭连接
bool update(const string &sql) const override
执行非查询SQL语句
::sqlite3 * link_
SQLite数据库连接句柄
uint32_t get_errno() const override
获取最后错误码
bool connected() const override
检查连接是否已建立
unique_ptr< idb_tb_result > query(const string &sql) const override
执行查询SQL语句
string_view get_error() const override
获取最后错误信息
void close() noexcept override
关闭数据库连接
~sqlite_connect() noexcept override
析构函数
string_view get_character_set() const override
获取当前字符集
bool connect(const db_config &config) override
建立数据库连接
bool reconnect(const db_config &config) override
重新连接数据库
bool is_valid() const override
检查连接是否有效
unique_ptr< idb_prepared_statement > prepare_statement(const string &sql) const override
创建预处理语句
sqlite_connect() noexcept
默认构造函数
bool set_character_set(const string &encoding) override
设置字符集