MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
redis_result.hpp
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"
6#include <hiredis.h>
8
9struct MSTL_API redis_result final : idb_kv_result {
10private:
11 ::redisReply* reply_ = nullptr;
12 size_type cursor_ = 0;
13 size_type rows_ = 0;
14 unique_ptr<vector<string>> column_names_ =
16 unique_ptr<vector<pair<string, string>>> kv_pairs_ =
18
19 size_type kv_cursor_ = 0;
20 bool is_array_ = false;
21
22 static string format_redis_reply_element(::redisReply* element);
23 void process_reply();
24 string get_string() const;
25
26public:
27 redis_result() noexcept = default;
28
29 explicit redis_result(::redisReply* reply) noexcept
30 : reply_(reply) {
31 process_reply();
32 }
33
34 ~redis_result() override {
35 if (reply_) ::freeReplyObject(reply_);
36 }
37
38 MSTL_NODISCARD bool empty() const noexcept override { return !reply_ || (rows_ == 0 && kv_pairs_->empty()); }
39 MSTL_NODISCARD bool next() noexcept override;
40
41 MSTL_NODISCARD string_view key() const noexcept override;
42 MSTL_NODISCARD string_view value() const noexcept override;
43
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_; }
49
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; }
52};
53
55#endif
56#endif // MSTL_DATABASE_REDIS_RESULT_HPP__
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