1
0
Fork 0
mirror of https://github.com/KingDuckZ/dindexer.git synced 2025-02-21 12:34:56 +00:00

Implement find_set_details().

This commit is contained in:
King_DuckZ 2016-07-12 20:31:57 +01:00
parent d10ae6846d
commit d7c254e1a0
4 changed files with 41 additions and 7 deletions

View file

@ -32,6 +32,7 @@
#include <cstdint> #include <cstdint>
#include <boost/range/empty.hpp> #include <boost/range/empty.hpp>
#include <fstream> #include <fstream>
#include <ctime>
namespace dindb { namespace dindb {
namespace { namespace {
@ -180,7 +181,8 @@ namespace dindb {
"content_type", parSetData.content_type, "content_type", parSetData.content_type,
"base_file_id", lexical_cast<std::string>(base_file_id), "base_file_id", lexical_cast<std::string>(base_file_id),
"item_count", lexical_cast<std::string>(parData.size()), "item_count", lexical_cast<std::string>(parData.size()),
"dir_count", lexical_cast<std::string>(std::count_if(parData.begin(), parData.end(), [](const mchlib::FileRecordData& r){return r.is_directory;})) "dir_count", lexical_cast<std::string>(std::count_if(parData.begin(), parData.end(), [](const mchlib::FileRecordData& r){return r.is_directory;})),
"creation", lexical_cast<std::string>(std::time(nullptr))
); );
#if !defined(NDEBUG) #if !defined(NDEBUG)
@ -204,7 +206,9 @@ namespace dindb {
"is_symlink", (file_data.is_symlink ? '1' : '0'), "is_symlink", (file_data.is_symlink ? '1' : '0'),
"unreadable", (file_data.unreadable ? '1' : '0'), "unreadable", (file_data.unreadable ? '1' : '0'),
"hash_valid", (file_data.hash_valid ? '1' : '0'), "hash_valid", (file_data.hash_valid ? '1' : '0'),
"group_id", group_id "group_id", group_id,
"atime", lexical_cast<std::string>(file_data.atime),
"mtime", lexical_cast<std::string>(file_data.mtime)
); );
batch.sadd( batch.sadd(
@ -267,7 +271,7 @@ namespace dindb {
} }
std::vector<dinhelp::MaxSizedArray<std::string, 4>> BackendRedis::find_set_details (const std::vector<GroupIDType>& parSets) { std::vector<dinhelp::MaxSizedArray<std::string, 4>> BackendRedis::find_set_details (const std::vector<GroupIDType>& parSets) {
return std::vector<dinhelp::MaxSizedArray<std::string, 4>>(); return dindb::find_set_details(m_redis, parSets);
} }
std::vector<dinhelp::MaxSizedArray<std::string, 1>> BackendRedis::find_file_details (GroupIDType parSetID, uint16_t parLevel, boost::string_ref parDir) { std::vector<dinhelp::MaxSizedArray<std::string, 1>> BackendRedis::find_file_details (GroupIDType parSetID, uint16_t parLevel, boost::string_ref parDir) {

View file

@ -84,7 +84,6 @@ namespace dindb {
using boost::adaptors::transformed; using boost::adaptors::transformed;
using boost::tuple; using boost::tuple;
using boost::make_tuple; using boost::make_tuple;
using redis::get_string;
using redis::Reply; using redis::Reply;
using std::vector; using std::vector;
using dinhelp::lexical_cast; using dinhelp::lexical_cast;
@ -259,6 +258,35 @@ namespace dindb {
filter = filter_case_sens; filter = filter_case_sens;
return locate_in_bursts<LocatedSet>(parRedis, PROGRAM_NAME ":set:*", filter, "desc", "item_count", "dir_count"); return locate_in_bursts<LocatedSet>(parRedis, PROGRAM_NAME ":set:*", filter, "desc", "item_count", "dir_count");
} }
std::vector<dinhelp::MaxSizedArray<std::string, 4>> find_set_details (redis::IncRedis& parRedis, const std::vector<GroupIDType>& parSets) {
using dinhelp::lexical_cast;
using MArr = dinhelp::MaxSizedArray<std::string, 4>;
auto batch = parRedis.make_batch();
for (auto set_id : parSets) {
const auto set_key = PROGRAM_NAME ":set:" + lexical_cast<std::string>(set_id);
batch.hmget(set_key, "creation", "name", "disk_label");
}
batch.throw_if_failed();
std::vector<MArr> retval;
auto curr_set = parSets.begin();
for (const auto& reply : batch.replies()) {
const auto& reply_list = get_array(reply);
if (redis::RedisVariantType_Nil != reply_list[0].which() and
redis::RedisVariantType_Nil != reply_list[1].which() and
redis::RedisVariantType_Nil != reply_list[2].which())
{
retval.resize(retval.size() + 1);
retval.back().push_back(lexical_cast<std::string>(*curr_set));
retval.back().push_back(get_string(reply_list[1]));
retval.back().push_back(get_string(reply_list[0]));
retval.back().push_back(get_string(reply_list[2]));
}
++curr_set;
}
return retval;
};
} //namespace dindb } //namespace dindb

View file

@ -19,6 +19,7 @@
#define idB4972996B4494E66A03B6AE205B1FA36 #define idB4972996B4494E66A03B6AE205B1FA36
#include "backends/db_backend.hpp" #include "backends/db_backend.hpp"
#include "helpers/MaxSizedArray.hpp"
#include <vector> #include <vector>
namespace redis { namespace redis {
@ -31,6 +32,7 @@ namespace dindb {
std::vector<LocatedItem> locate_in_db ( redis::IncRedis& parRedis, const mchlib::TigerHash& parSearch, const TagList& parTags ); std::vector<LocatedItem> locate_in_db ( redis::IncRedis& parRedis, const mchlib::TigerHash& parSearch, const TagList& parTags );
std::vector<LocatedSet> locate_sets_in_db ( redis::IncRedis& parRedis, const std::string& parSubstr, bool parCaseInsensitive ); std::vector<LocatedSet> locate_sets_in_db ( redis::IncRedis& parRedis, const std::string& parSubstr, bool parCaseInsensitive );
std::vector<LocatedSet> locate_sets_in_db ( redis::IncRedis& parRedis, const std::string& parSubstr, const std::vector<GroupIDType>& parSets, bool parCaseInsensitive ); std::vector<LocatedSet> locate_sets_in_db ( redis::IncRedis& parRedis, const std::string& parSubstr, const std::vector<GroupIDType>& parSets, bool parCaseInsensitive );
std::vector<dinhelp::MaxSizedArray<std::string, 4>> find_set_details ( redis::IncRedis& parRedis, const std::vector<GroupIDType>& parSets );
} //namespace dindb } //namespace dindb
#endif #endif

View file

@ -78,9 +78,9 @@ namespace redis {
private: private:
template <typename T> template <typename T>
Reply forward_scan_command ( typename std::enable_if<HasScanTargetMethod<T>::value, int>::type parDummy ); Reply forward_scan_command ( typename std::enable_if<HasScanTargetMethod<T>::value, long long>::type parContext );
template <typename T> template <typename T>
Reply forward_scan_command ( typename std::enable_if<not HasScanTargetMethod<T>::value, int>::type parDummy ); Reply forward_scan_command ( typename std::enable_if<not HasScanTargetMethod<T>::value, long long>::type parContext );
bool is_end ( void ) const; bool is_end ( void ) const;
void increment ( void ); void increment ( void );