NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
db_interface.hpp
浏览该文件的文档.
1#ifndef NEFORCE_DATABASE_DB_INTERFACE_HPP__
2#define NEFORCE_DATABASE_DB_INTERFACE_HPP__
3
18
24NEFORCE_BEGIN_NAMESPACE__
25
31
37
44struct NEFORCE_API idb_result {
45 using size_type = size_t;
47
48 virtual ~idb_result() = default;
49
54 NEFORCE_NODISCARD virtual bool empty() const = 0;
55
60 virtual bool next() = 0;
61};
62
69struct NEFORCE_API column_meta {
72 size_t max_length{0};
73 bool nullable{true};
74};
75
82struct NEFORCE_API idb_tb_result : idb_result {
83 ~idb_tb_result() override = default;
84
89 NEFORCE_NODISCARD virtual size_type row_count() const = 0;
90
95 NEFORCE_NODISCARD virtual size_type column_count() const = 0;
96
101 NEFORCE_NODISCARD virtual const vector<string_view>& column_names() const = 0;
102
108 NEFORCE_NODISCARD virtual column_meta column_metadata(size_type n) const = 0;
109
110 NEFORCE_NODISCARD virtual string_view get(size_type n) const = 0;
111
112 NEFORCE_NODISCARD virtual bool get_bool(size_type n) const = 0;
113 NEFORCE_NODISCARD virtual int16_t get_int16(size_type n) const = 0;
114 NEFORCE_NODISCARD virtual int32_t get_int32(size_type n) const = 0;
115 NEFORCE_NODISCARD virtual int64_t get_int64(size_type n) const = 0;
116 NEFORCE_NODISCARD virtual float32_t get_float32(size_type n) const = 0;
117 NEFORCE_NODISCARD virtual float64_t get_float64(size_type n) const = 0;
118 NEFORCE_NODISCARD virtual decimal_t get_decimal(size_type n) const = 0;
119 NEFORCE_NODISCARD virtual vector<char> get_blob(size_type n) const = 0;
120 NEFORCE_NODISCARD virtual uint64_t get_bit(size_type n) const = 0;
121 NEFORCE_NODISCARD virtual date get_date(size_type n) const = 0;
122 NEFORCE_NODISCARD virtual time get_time(size_type n) const = 0;
123 NEFORCE_NODISCARD virtual datetime get_datetime(size_type n) const = 0;
124 NEFORCE_NODISCARD virtual timestamp get_timestamp(size_type n) const = 0;
125};
126
133struct NEFORCE_API idb_kv_result : idb_result {
134 ~idb_kv_result() override = default;
135
136 NEFORCE_NODISCARD virtual string_view key() const = 0;
137 NEFORCE_NODISCARD virtual string_view value() const = 0;
138
139 NEFORCE_NODISCARD virtual bool value_bool() const = 0;
140 NEFORCE_NODISCARD virtual int64_t value_int64() const = 0;
141 NEFORCE_NODISCARD virtual double value_double() const = 0;
142 NEFORCE_NODISCARD virtual vector<string> value_array() const = 0;
143 NEFORCE_NODISCARD virtual const vector<pair<string, string>>& value_hash() const = 0;
144};
145
152struct NEFORCE_API idb_prepared_statement {
153 virtual ~idb_prepared_statement() = default;
154
159 NEFORCE_NODISCARD virtual uint32_t param_count() const noexcept = 0;
160
161 virtual bool bind_param(uint32_t index, const string& value) = 0;
162 virtual bool bind_param(uint32_t index, string_view value) = 0;
163 virtual bool bind_param(uint32_t index, const char* value) = 0;
164 virtual bool bind_param(uint32_t index, int32_t value) = 0;
165 virtual bool bind_param(uint32_t index, int64_t value) = 0;
166 virtual bool bind_param(uint32_t index, float64_t value) = 0;
167 virtual bool bind_param(uint32_t index, cbyte_view value) = 0;
168
173 virtual bool execute() = 0;
174
180
185 NEFORCE_NODISCARD virtual string_view get_error() const noexcept = 0;
186
191 NEFORCE_NODISCARD virtual uint32_t get_errno() const noexcept = 0;
192};
193
200struct NEFORCE_API idb_connect {
201public:
203
204private:
205 clock_type alive_time_{0};
206
207public:
208 virtual ~idb_connect() = default;
209
214 virtual bool connect(const db_config& config) = 0;
215 virtual bool reconnect(const db_config& config) = 0;
216 virtual void close() = 0;
218
223 NEFORCE_NODISCARD virtual bool set_character_set(const string& encoding) = 0;
224 NEFORCE_NODISCARD virtual string_view get_character_set() const = 0;
226
231 NEFORCE_NODISCARD virtual string_view get_error() const = 0;
232 NEFORCE_NODISCARD virtual uint32_t get_errno() const = 0;
234
240 NEFORCE_NODISCARD virtual bool update(const string& sql) const = 0;
241
246 virtual bool begin() = 0;
247 virtual bool commit() = 0;
248 virtual bool rollback() = 0;
250
255 NEFORCE_NODISCARD virtual bool connected() const = 0;
256 NEFORCE_NODISCARD virtual bool is_valid() const = 0;
258
263 NEFORCE_NODISCARD virtual void* native_handle() noexcept = 0;
264
270 void refresh_alive() noexcept { alive_time_ = time_cast<milliseconds>(steady_clock::now().since_epoch()); }
271
276 NEFORCE_NODISCARD clock_type get_alive() const noexcept {
277 return time_cast<milliseconds>(steady_clock::now().since_epoch()) - alive_time_;
278 }
279};
280
287struct NEFORCE_API idb_tb_connect : idb_connect {
288 ~idb_tb_connect() override = default;
289
295 NEFORCE_NODISCARD virtual unique_ptr<idb_tb_result> query(const string& sql) const = 0;
296
302 NEFORCE_NODISCARD virtual unique_ptr<idb_prepared_statement> prepare_statement(const string& sql) const = 0;
303
308 virtual size_t batch_insert(const string& table, const vector<string>& columns,
309 const vector<vector<string>>& rows) = 0;
311
316 NEFORCE_NODISCARD virtual bool table_exists(const string& table) const = 0;
318};
319
326struct NEFORCE_API idb_kv_connect : idb_connect {
327 ~idb_kv_connect() override = default;
328
334 NEFORCE_NODISCARD virtual unique_ptr<idb_kv_result> query(const string& sql) const = 0;
335
336 virtual bool set(const string& key, const string& value) = 0;
337 virtual bool setex(const string& key, const string& value, int seconds) = 0;
338 virtual unique_ptr<idb_kv_result> get(const string& key) = 0;
339 virtual bool del(const string& key) = 0;
340 virtual bool exists(const string& key) = 0;
341 virtual bool expire(const string& key, int seconds) = 0;
342
343 virtual bool hset(const string& key, const string& field, const string& value) = 0;
344 virtual unique_ptr<idb_kv_result> hget(const string& key, const string& field) = 0;
345 virtual unique_ptr<idb_kv_result> hgetall(const string& key) = 0;
346
347 virtual bool lpush(const string& key, const string& value) = 0;
348 virtual bool rpush(const string& key, const string& value) = 0;
349 virtual unique_ptr<idb_kv_result> lrange(const string& key, int start, int stop) = 0;
350
351 virtual bool sadd(const string& key, const string& member) = 0;
352 virtual unique_ptr<idb_kv_result> smembers(const string& key) = 0;
353};
354
362class NEFORCE_API idb_factory {
363protected:
365
366public:
371 explicit idb_factory(db_config config) noexcept :
372 config_(move(config)) {}
373
374 virtual ~idb_factory() noexcept = default;
375
376 idb_factory(const idb_factory&) = delete;
377 idb_factory& operator=(const idb_factory&) = delete;
378
379 idb_factory(idb_factory&&) noexcept = default;
380 idb_factory& operator=(idb_factory&&) noexcept = default;
381
387
393 virtual idb_result* create_result(void* native_result) = 0;
394};
395 // DatabaseInterface
397 // Database
399
400NEFORCE_END_NAMESPACE__
401#endif // NEFORCE_DATABASE_DB_INTERFACE_HPP__
日期时间类
数据库连接工厂抽象基类
virtual idb_connect * create_connect()=0
创建数据库连接对象
db_config config_
数据库配置
idb_factory(db_config config) noexcept
构造函数
virtual idb_result * create_result(void *native_result)=0
创建结果集对象
独占智能指针
动态大小数组容器
时钟类型
日期时间处理库
数据库配置定义
long int64_t
64位有符号整数类型
float float32_t
32位单精度浮点数类型
unsigned int uint32_t
32位无符号整数类型
unsigned long uint64_t
64位无符号整数类型
long double decimal_t
扩展精度浮点数类型
int int32_t
32位有符号整数类型
double float64_t
64位双精度浮点数类型
short int16_t
16位有符号整数类型
duration< int64_t > seconds
秒持续时间
constexpr ToDur time_cast(const duration< Rep, Period > &value)
持续时间类型转换
duration< int64_t, milli > milliseconds
毫秒持续时间
memory_view< const byte_t > cbyte_view
常量字节视图类型别名
uint64_t size_t
无符号大小类型
int64_t ptrdiff_t
指针差类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
int32_t type
列类型(数据库原生类型码)
bool nullable
是否可为空
size_t max_length
最大长度
数据库连接配置结构
数据库连接抽象基类
milliseconds clock_type
存活时间计时器类型
virtual uint32_t get_errno() const =0
获取错误码
virtual bool set_character_set(const string &encoding)=0
设置字符集
virtual bool connected() const =0
检查连接状态
void refresh_alive() noexcept
刷新连接存活时间
virtual void * native_handle() noexcept=0
获取原生连接句柄
virtual bool update(const string &sql) const =0
执行非查询SQL语句
virtual bool is_valid() const =0
检查连接有效性
clock_type get_alive() const noexcept
获取连接空闲时间
virtual bool rollback()=0
回滚事务
virtual bool reconnect(const db_config &config)=0
重新连接
virtual bool commit()=0
提交事务
virtual string_view get_error() const =0
获取错误信息
virtual string_view get_character_set() const =0
获取字符集
virtual bool begin()=0
开始事务
virtual bool connect(const db_config &config)=0
建立连接
virtual void close()=0
关闭连接
键值存储连接抽象基类
virtual bool lpush(const string &key, const string &value)=0
左推入列表
virtual unique_ptr< idb_kv_result > get(const string &key)=0
获取键值
virtual unique_ptr< idb_kv_result > query(const string &sql) const =0
执行键值存储查询命令
virtual bool rpush(const string &key, const string &value)=0
右推入列表
virtual bool sadd(const string &key, const string &member)=0
添加集合成员
virtual unique_ptr< idb_kv_result > hget(const string &key, const string &field)=0
获取哈希字段
virtual bool set(const string &key, const string &value)=0
设置键值
virtual bool exists(const string &key)=0
检查键是否存在
virtual unique_ptr< idb_kv_result > hgetall(const string &key)=0
获取所有哈希字段
virtual bool expire(const string &key, int seconds)=0
设置过期时间
virtual bool setex(const string &key, const string &value, int seconds)=0
设置键值并指定过期时间
virtual bool del(const string &key)=0
删除键
virtual bool hset(const string &key, const string &field, const string &value)=0
设置哈希字段
virtual unique_ptr< idb_kv_result > smembers(const string &key)=0
获取所有集合成员
virtual unique_ptr< idb_kv_result > lrange(const string &key, int start, int stop)=0
获取列表范围
键值存储结果集抽象基类
virtual const vector< pair< string, string > > & value_hash() const =0
获取哈希表值
virtual string_view key() const =0
获取键
virtual int64_t value_int64() const =0
获取64位整数值
virtual string_view value() const =0
获取字符串值
virtual vector< string > value_array() const =0
获取数组值
virtual bool value_bool() const =0
获取布尔值
virtual double value_double() const =0
获取浮点值
预处理语句抽象基类
virtual bool execute()=0
执行非查询语句(UPDATE/INSERT/DELETE)
virtual bool bind_param(uint32_t index, const string &value)=0
绑定字符串
virtual unique_ptr< idb_tb_result > execute_query()=0
执行查询语句(SELECT)
virtual string_view get_error() const noexcept=0
获取错误信息
virtual uint32_t param_count() const noexcept=0
获取参数数量
virtual uint32_t get_errno() const noexcept=0
获取错误码
数据库结果集抽象基类
virtual bool empty() const =0
检查结果集是否为空
size_t size_type
大小类型
virtual bool next()=0
移动到下一行
ptrdiff_t difference_type
差值类型
关系型数据库连接抽象基类
virtual unique_ptr< idb_prepared_statement > prepare_statement(const string &sql) const =0
创建预处理语句
virtual unique_ptr< idb_tb_result > query(const string &sql) const =0
执行查询SQL语句
关系型数据库结果集抽象基类
virtual size_type row_count() const =0
获取结果集行数
virtual bool get_bool(size_type n) const =0
布尔值
virtual timestamp get_timestamp(size_type n) const =0
时间戳类型
virtual int64_t get_int64(size_type n) const =0
64位整数
virtual int32_t get_int32(size_type n) const =0
32位整数
virtual decimal_t get_decimal(size_type n) const =0
高精度十进制数
virtual string_view get(size_type n) const =0
字符串
virtual vector< char > get_blob(size_type n) const =0
BLOB二进制数据
virtual uint64_t get_bit(size_type n) const =0
位字段值
virtual time get_time(size_type n) const =0
时间类型
virtual int16_t get_int16(size_type n) const =0
16位整数
virtual size_type column_count() const =0
获取结果集列数
virtual column_meta column_metadata(size_type n) const =0
获取列元数据
virtual date get_date(size_type n) const =0
日期类型
virtual float64_t get_float64(size_type n) const =0
64位浮点数
virtual const vector< string_view > & column_names() const =0
获取所有列名
virtual float32_t get_float32(size_type n) const =0
32位浮点数
virtual datetime get_datetime(size_type n) const =0
日期时间类型
static time_point now() noexcept
获取当前时间点
独占智能指针
动态大小数组容器