1#ifndef MSTL_DATABASE_REDIS_RESULT_HPP__
2#define MSTL_DATABASE_REDIS_RESULT_HPP__
3#ifdef MSTL_SUPPORT_REDIS__
4#include "../../core/config/undef_cmacro.hpp"
5#include "MSTL/database/db_interface.hpp"
9struct MSTL_API redis_result final : idb_kv_result {
11 ::redisReply* reply_ =
nullptr;
12 size_type cursor_ = 0;
14 unique_ptr<vector<string>> column_names_ =
16 unique_ptr<vector<pair<string, string>>> kv_pairs_ =
19 size_type kv_cursor_ = 0;
20 bool is_array_ =
false;
22 static string format_redis_reply_element(::redisReply* element);
24 string get_string()
const;
27 redis_result() noexcept = default;
29 explicit redis_result(::redisReply* reply) noexcept
34 ~redis_result()
override {
35 if (reply_) ::freeReplyObject(reply_);
38 MSTL_NODISCARD
bool empty() const noexcept
override {
return !reply_ || (rows_ == 0 && kv_pairs_->empty()); }
39 MSTL_NODISCARD
bool next() noexcept override;
41 MSTL_NODISCARD string_view key() const noexcept override;
42 MSTL_NODISCARD string_view value() const noexcept override;
44 MSTL_NODISCARD
bool value_bool() const override;
45 MSTL_NODISCARD
int64_t value_int64() const override;
46 MSTL_NODISCARD
double value_double() const override;
47 MSTL_NODISCARD vector<
string> value_array() const override;
48 MSTL_NODISCARD const vector<pair<
string,
string>>& value_hash()
const override {
return *kv_pairs_; }
50 MSTL_NODISCARD
int type() const noexcept {
return reply_ ? reply_->type : -1; }
51 MSTL_NODISCARD
bool is_nil() const noexcept {
return reply_ && reply_->type == REDIS_REPLY_NIL; }
long long int64_t
64位有符号整数类型
constexpr Iterator next(Iterator iter, iter_difference_t< Iterator > n=1)
获取迭代器的后一个位置
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr bool empty(const Container &cont) noexcept(noexcept(cont.empty()))
检查容器是否为空
MSTL_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr