1#ifndef MSTL_DATABASE_DB_INTERFACE_HPP__
2#define MSTL_DATABASE_DB_INTERFACE_HPP__
3#include "../core/container/vector.hpp"
4#include "../core/time/datetime.hpp"
6#include "db_config.hpp"
10struct MSTL_API idb_result {
14 virtual ~idb_result() =
default;
15 virtual bool empty()
const = 0;
16 virtual bool next() = 0;
19struct MSTL_API idb_tb_result : idb_result {
20 ~idb_tb_result()
override =
default;
22 virtual size_type row_count()
const = 0;
23 virtual size_type column_count()
const = 0;
25 virtual const vector<string_view>& column_names()
const = 0;
27 virtual string_view
get(size_type)
const = 0;
28 virtual bool get_bool(size_type)
const = 0;
29 virtual int8_t get_int8(size_type)
const = 0;
30 virtual int16_t get_int16(size_type)
const = 0;
31 virtual int32_t get_int32(size_type)
const = 0;
32 virtual int64_t get_int64(size_type)
const = 0;
33 virtual float32_t get_float32(size_type)
const = 0;
34 virtual float64_t get_float64(size_type)
const = 0;
35 virtual decimal_t get_decimal(size_type)
const = 0;
36 virtual vector<char> get_blob(size_type)
const = 0;
37 virtual string get_set(size_type)
const = 0;
38 virtual uint64_t get_bit(size_type)
const = 0;
39 virtual date get_date(size_type)
const = 0;
40 virtual time get_time(size_type)
const = 0;
41 virtual datetime get_datetime(size_type)
const = 0;
42 virtual timestamp get_timestamp(size_type)
const = 0;
43 virtual string get_string(size_type)
const = 0;
44 virtual string_view get_enum(size_type)
const = 0;
47struct MSTL_API idb_kv_result : idb_result {
48 ~idb_kv_result()
override =
default;
50 virtual string_view key()
const = 0;
51 virtual string_view value()
const = 0;
53 virtual bool value_bool()
const = 0;
54 virtual int64_t value_int64()
const = 0;
55 virtual double value_double()
const = 0;
56 virtual vector<string> value_array()
const = 0;
57 virtual const vector<pair<string, string>>& value_hash()
const = 0;
61struct MSTL_API idb_prepared_result : idb_tb_result {
62 ~idb_prepared_result()
override =
default;
65struct MSTL_API idb_prepared_statement {
66 virtual ~idb_prepared_statement() =
default;
68 virtual uint32_t param_count() const noexcept = 0;
70 virtual
bool bind_param(
uint32_t index, const
string& value) = 0;
71 virtual
bool bind_param(
uint32_t index, string_view value) = 0;
72 virtual
bool bind_param(
uint32_t index, const
char* value) = 0;
76 virtual
bool bind_param(
uint32_t index, const
void*
data,
size_t length) = 0;
78 virtual
bool execute() = 0;
79 virtual unique_ptr<idb_prepared_result> execute_query() = 0;
80 virtual string_view get_error() const noexcept = 0;
81 virtual
uint32_t get_errno() const noexcept = 0;
85struct MSTL_API idb_connect {
86 using clock_type = std::clock_t;
88 virtual ~idb_connect() =
default;
90 virtual bool connect_to(
const _MSTL string& user,
const _MSTL string& password,
91 const _MSTL string& dbname,
const _MSTL string& ip,
93 virtual bool connect_to(
const db_config& config) = 0;
95 virtual bool set_character_set(
const _MSTL string& encoding)
const = 0;
96 virtual string_view get_character_set()
const = 0;
97 virtual string_view get_error()
const = 0;
98 virtual uint32_t get_errno()
const = 0;
100 virtual bool update(
const _MSTL string& sql)
const = 0;
101 virtual bool connected()
const = 0;
102 virtual bool is_valid()
const = 0;
103 virtual void close() = 0;
104 virtual void refresh_alive() = 0;
105 virtual clock_type get_alive()
const = 0;
106 virtual bool reset_connect(
const db_config& config) = 0;
109struct MSTL_API idb_tb_connect : idb_connect {
110 ~idb_tb_connect()
override =
default;
112 virtual unique_ptr<idb_tb_result> query(
const string& sql)
const = 0;
113 virtual unique_ptr<idb_prepared_statement> prepare_statement(
const string& sql)
const = 0;
116struct MSTL_API idb_kv_connect : idb_connect {
117 ~idb_kv_connect()
override =
default;
119 virtual unique_ptr<idb_kv_result> query(
const string& sql)
const = 0;
121 virtual bool set(
const string& key,
const string& value) = 0;
122 virtual bool setex(
const string& key,
const string& value,
int seconds) = 0;
123 virtual unique_ptr<idb_kv_result>
get(
const string& key) = 0;
124 virtual bool del(
const string& key) = 0;
125 virtual bool exists(
const string& key) = 0;
126 virtual bool expire(
const string& key,
int seconds) = 0;
128 virtual bool hset(
const string& key,
const string& field,
const string& value) = 0;
129 virtual unique_ptr<idb_kv_result> hget(
const string& key,
const string& field) = 0;
130 virtual unique_ptr<idb_kv_result> hgetall(
const string& key) = 0;
132 virtual bool lpush(
const string& key,
const string& value) = 0;
133 virtual bool rpush(
const string& key,
const string& value) = 0;
134 virtual unique_ptr<idb_kv_result> lrange(
const string& key,
int start,
int stop) = 0;
136 virtual bool sadd(
const string& key,
const string& member) = 0;
137 virtual unique_ptr<idb_kv_result> smembers(
const string& key) = 0;
141class MSTL_API idb_factory {
146 explicit idb_factory(db_config config) : config_(
_MSTL move(config)) {}
147 virtual ~idb_factory() =
default;
149 virtual idb_connect* create_connect() = 0;
150 virtual idb_result* create_result(
void* native_result) = 0;
MSTL_ALWAYS_INLINE enable_if_t< is_void_v< T >, future_result_t< T > > get(future< T > &f)
通用future结果获取函数
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位无符号整数类型
signed char int8_t
8位有符号整数类型
duration< int64_t > seconds
秒持续时间
constexpr Iterator next(Iterator iter, iter_difference_t< Iterator > n=1)
获取迭代器的后一个位置
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr bool empty(const Container &cont) noexcept(noexcept(cont.empty()))
检查容器是否为空
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针