NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
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 virtual bool empty() const = 0;
55
60 virtual bool next() = 0;
61};
62
69struct NEFORCE_API idb_tb_result : idb_result {
70 ~idb_tb_result() override = default;
71
76 virtual size_type row_count() const = 0;
77
82 virtual size_type column_count() const = 0;
83
88 virtual const vector<string_view>& column_names() const = 0;
89
90 virtual string_view get(size_type n) const = 0;
91
92 virtual bool get_bool(size_type n) const = 0;
93 virtual int16_t get_int16(size_type n) const = 0;
94 virtual int32_t get_int32(size_type n) const = 0;
95 virtual int64_t get_int64(size_type n) const = 0;
96 virtual float32_t get_float32(size_type n) const = 0;
97 virtual float64_t get_float64(size_type n) const = 0;
98 virtual decimal_t get_decimal(size_type n) const = 0;
99 virtual vector<char> get_blob(size_type n) const = 0;
100 virtual uint64_t get_bit(size_type n) const = 0;
101 virtual date get_date(size_type n) const = 0;
102 virtual time get_time(size_type n) const = 0;
103 virtual datetime get_datetime(size_type n) const = 0;
104 virtual timestamp get_timestamp(size_type n) const = 0;
105};
106
113struct NEFORCE_API idb_kv_result : idb_result {
114 ~idb_kv_result() override = default;
115
116 virtual string_view key() const = 0;
117 virtual string_view value() const = 0;
118
119 virtual bool value_bool() const = 0;
120 virtual int64_t value_int64() const = 0;
121 virtual double value_double() const = 0;
122 virtual vector<string> value_array() const = 0;
123 virtual const vector<pair<string, string>>& value_hash() const = 0;
124};
125
132struct NEFORCE_API idb_prepared_result : idb_tb_result {
133 ~idb_prepared_result() override = default;
134};
135
142struct NEFORCE_API idb_prepared_statement {
143 virtual ~idb_prepared_statement() = default;
144
149 virtual uint32_t param_count() const noexcept = 0;
150
151 virtual bool bind_param(uint32_t index, const string& value) = 0;
152 virtual bool bind_param(uint32_t index, string_view value) = 0;
153 virtual bool bind_param(uint32_t index, const char* value) = 0;
154 virtual bool bind_param(uint32_t index, int32_t value) = 0;
155 virtual bool bind_param(uint32_t index, int64_t value) = 0;
156 virtual bool bind_param(uint32_t index, float64_t value) = 0;
157 virtual bool bind_param(uint32_t index, cbyte_view value) = 0;
158
163 virtual bool execute() = 0;
164
170
175 virtual string_view get_error() const noexcept = 0;
176
181 virtual uint32_t get_errno() const noexcept = 0;
182};
183
190struct NEFORCE_API idb_connect {
191public:
193
194private:
195 clock_type alive_time_{0};
196
197public:
198 virtual ~idb_connect() = default;
199
204 virtual bool connect(const db_config& config) = 0;
205 virtual bool reconnect(const db_config& config) = 0;
206 virtual void close() = 0;
208
213 virtual bool set_character_set(const string& encoding) const = 0;
214 virtual string_view get_character_set() const = 0;
216
221 virtual string_view get_error() const = 0;
222 virtual uint32_t get_errno() const = 0;
224
230 virtual bool update(const string& sql) const = 0;
231
236 virtual bool connected() const = 0;
237 virtual bool is_valid() const = 0;
239
245 void refresh_alive() noexcept { alive_time_ = time_cast<milliseconds>(steady_clock::now().since_epoch()); }
246
251 NEFORCE_NODISCARD clock_type get_alive() const noexcept {
252 return time_cast<milliseconds>(steady_clock::now().since_epoch()) - alive_time_;
253 }
254};
255
262struct NEFORCE_API idb_tb_connect : idb_connect {
263 ~idb_tb_connect() override = default;
264
270 virtual unique_ptr<idb_tb_result> query(const string& sql) const = 0;
271
277 virtual unique_ptr<idb_prepared_statement> prepare_statement(const string& sql) const = 0;
278};
279
286struct NEFORCE_API idb_kv_connect : idb_connect {
287 ~idb_kv_connect() override = default;
288
294 virtual unique_ptr<idb_kv_result> query(const string& sql) const = 0;
295
296 virtual bool set(const string& key, const string& value) = 0;
297 virtual bool setex(const string& key, const string& value, int seconds) = 0;
298 virtual unique_ptr<idb_kv_result> get(const string& key) = 0;
299 virtual bool del(const string& key) = 0;
300 virtual bool exists(const string& key) = 0;
301 virtual bool expire(const string& key, int seconds) = 0;
302
303 virtual bool hset(const string& key, const string& field, const string& value) = 0;
304 virtual unique_ptr<idb_kv_result> hget(const string& key, const string& field) = 0;
305 virtual unique_ptr<idb_kv_result> hgetall(const string& key) = 0;
306
307 virtual bool lpush(const string& key, const string& value) = 0;
308 virtual bool rpush(const string& key, const string& value) = 0;
309 virtual unique_ptr<idb_kv_result> lrange(const string& key, int start, int stop) = 0;
310
311 virtual bool sadd(const string& key, const string& member) = 0;
312 virtual unique_ptr<idb_kv_result> smembers(const string& key) = 0;
313};
314
322class NEFORCE_API idb_factory {
323protected:
325
326public:
331 explicit idb_factory(db_config config) :
332 config_(move(config)) {}
333
334 virtual ~idb_factory() = default;
335
341
347 virtual idb_result* create_result(void* native_result) = 0;
348};
349 // DatabaseInterface
351 // Database
353
354NEFORCE_END_NAMESPACE__
355#endif // NEFORCE_DATABASE_DB_INTERFACE_HPP__
日期类
日期时间类
数据库连接工厂抽象基类
virtual idb_result * create_result(void *native_result)=0
创建结果集对象
virtual idb_connect * create_connect()=0
创建数据库连接对象
db_config config_
数据库配置
idb_factory(db_config config)
构造函数
时间类
时间戳类
独占智能指针
动态大小数组容器
时钟类型
日期时间处理库
数据库配置定义
float float32_t
32位单精度浮点数类型
unsigned int uint32_t
32位无符号整数类型
long double decimal_t
扩展精度浮点数类型
long long int64_t
64位有符号整数类型
double float64_t
64位双精度浮点数类型
unsigned long long uint64_t
64位无符号整数类型
short int16_t
16位有符号整数类型
int int32_t
32位有符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
constexpr ToDur time_cast(const duration< Rep, Period > &value)
持续时间类型转换
duration< int64_t > seconds
秒持续时间
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
字符字符串视图
数据库连接配置结构
数据库连接抽象基类
virtual bool connected() const =0
检查连接状态
virtual string_view get_error() const =0
获取错误信息
virtual uint32_t get_errno() const =0
获取错误码
void refresh_alive() noexcept
刷新连接存活时间
virtual bool reconnect(const db_config &config)=0
重新连接
virtual void close()=0
关闭连接
virtual bool connect(const db_config &config)=0
建立连接
virtual bool is_valid() const =0
检查连接有效性
virtual string_view get_character_set() const =0
获取字符集
virtual bool set_character_set(const string &encoding) const =0
设置字符集
milliseconds clock_type
存活时间计时器类型
virtual bool update(const string &sql) const =0
执行非查询SQL语句
NEFORCE_NODISCARD clock_type get_alive() const noexcept
获取连接空闲时间
键值存储连接抽象基类
virtual bool hset(const string &key, const string &field, const string &value)=0
设置哈希字段
virtual bool lpush(const string &key, const string &value)=0
左推入列表
virtual bool expire(const string &key, int seconds)=0
设置过期时间
virtual bool del(const string &key)=0
删除键
virtual bool sadd(const string &key, const string &member)=0
添加集合成员
virtual unique_ptr< idb_kv_result > get(const string &key)=0
获取键值
virtual unique_ptr< idb_kv_result > hget(const string &key, const string &field)=0
获取哈希字段
virtual unique_ptr< idb_kv_result > lrange(const string &key, int start, int stop)=0
获取列表范围
virtual unique_ptr< idb_kv_result > hgetall(const string &key)=0
获取所有哈希字段
virtual bool exists(const string &key)=0
检查键是否存在
virtual unique_ptr< idb_kv_result > query(const string &sql) const =0
执行键值存储查询命令
virtual bool setex(const string &key, const string &value, int seconds)=0
设置键值并指定过期时间
virtual bool set(const string &key, const string &value)=0
设置键值
virtual bool rpush(const string &key, const string &value)=0
右推入列表
virtual unique_ptr< idb_kv_result > smembers(const string &key)=0
获取所有集合成员
键值存储结果集抽象基类
virtual string_view value() const =0
获取字符串值
virtual int64_t value_int64() const =0
获取64位整数值
virtual double value_double() const =0
获取浮点值
virtual vector< string > value_array() const =0
获取数组值
virtual bool value_bool() const =0
获取布尔值
virtual const vector< pair< string, string > > & value_hash() const =0
获取哈希表值
virtual string_view key() const =0
获取键
预处理语句执行结果
预处理语句抽象基类
virtual bool execute()=0
执行非查询语句(UPDATE/INSERT/DELETE)
virtual uint32_t param_count() const noexcept=0
获取参数数量
virtual string_view get_error() const noexcept=0
获取错误信息
virtual unique_ptr< idb_prepared_result > execute_query()=0
执行查询语句(SELECT)
virtual bool bind_param(uint32_t index, const string &value)=0
绑定字符串
virtual uint32_t get_errno() const noexcept=0
获取错误码
数据库结果集抽象基类
virtual bool next()=0
移动到下一行
ptrdiff_t difference_type
差值类型
virtual bool empty() const =0
检查结果集是否为空
size_t size_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 datetime get_datetime(size_type n) const =0
日期时间类型
virtual time get_time(size_type n) const =0
时间类型
virtual size_type column_count() const =0
获取结果集列数
virtual float64_t get_float64(size_type n) const =0
64位浮点数
virtual timestamp get_timestamp(size_type n) const =0
时间戳类型
virtual int32_t get_int32(size_type n) const =0
32位整数
virtual int64_t get_int64(size_type n) const =0
64位整数
virtual decimal_t get_decimal(size_type n) const =0
高精度十进制数
virtual float32_t get_float32(size_type n) const =0
32位浮点数
virtual size_type row_count() const =0
获取结果集行数
virtual uint64_t get_bit(size_type n) const =0
位字段值
virtual vector< char > get_blob(size_type n) const =0
BLOB二进制数据
virtual date get_date(size_type n) const =0
日期类型
virtual const vector< string_view > & column_names() const =0
获取所有列名
virtual bool get_bool(size_type n) const =0
布尔值
virtual string_view get(size_type n) const =0
字符串
virtual int16_t get_int16(size_type n) const =0
16位整数
static time_point now() noexcept
获取当前时间点
独占智能指针
动态大小数组容器