aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Interpreters/Cache/FileCacheKey.cpp
blob: 75a8ac2934e6003cb52eb2ae8a8dba45bef1d5fb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "FileCacheKey.h"

#include <base/hex.h>
#include <Common/SipHash.h>
#include <Core/UUID.h>


namespace DB
{
namespace ErrorCodes
{
    extern const int BAD_ARGUMENTS;
}

FileCacheKey::FileCacheKey(const std::string & path)
    : key(sipHash128(path.data(), path.size()))
{
}

FileCacheKey::FileCacheKey(const UInt128 & key_)
    : key(key_)
{
}

std::string FileCacheKey::toString() const
{
    return getHexUIntLowercase(key);
}

FileCacheKey FileCacheKey::random()
{
    return FileCacheKey(UUIDHelpers::generateV4().toUnderType());
}

FileCacheKey FileCacheKey::fromKeyString(const std::string & key_str)
{
    if (key_str.size() != 32)
        throw Exception(ErrorCodes::BAD_ARGUMENTS, "Invalid cache key hex: {}", key_str);
    return FileCacheKey(unhexUInt<UInt128>(key_str.data()));
}

}