mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-04 13:32:13 +00:00
Functions: Hashing: add sipHash128Reference{,Keyed}
This commit is contained in:
parent
001b714d3e
commit
476342602b
@ -363,6 +363,41 @@ struct SipHash128KeyedImpl
|
|||||||
static constexpr bool use_int_hash_for_pods = false;
|
static constexpr bool use_int_hash_for_pods = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SipHash128ReferenceImpl
|
||||||
|
{
|
||||||
|
static constexpr auto name = "sipHash128Reference";
|
||||||
|
|
||||||
|
using ReturnType = UInt128;
|
||||||
|
|
||||||
|
static UInt128 combineHashes(UInt128 h1, UInt128 h2) { return combineHashesFunc<UInt128, SipHash128Impl>(h1, h2); }
|
||||||
|
|
||||||
|
static UInt128 apply(const char * data, const size_t size) { return sipHash128Reference(data, size); }
|
||||||
|
|
||||||
|
static constexpr bool use_int_hash_for_pods = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SipHash128ReferenceKeyedImpl
|
||||||
|
{
|
||||||
|
static constexpr auto name = "sipHash128ReferenceKeyed";
|
||||||
|
using ReturnType = UInt128;
|
||||||
|
using Key = impl::SipHashKey;
|
||||||
|
|
||||||
|
static Key parseKey(const ColumnWithTypeAndName & key) { return impl::parseSipHashKey(key); }
|
||||||
|
|
||||||
|
static UInt128 applyKeyed(const Key & key, const char * begin, size_t size)
|
||||||
|
{
|
||||||
|
return sipHash128ReferenceKeyed(key.key0, key.key1, begin, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static UInt128 combineHashesKeyed(const Key & key, UInt128 h1, UInt128 h2)
|
||||||
|
{
|
||||||
|
UInt128 hashes[] = {h1, h2};
|
||||||
|
return applyKeyed(key, reinterpret_cast<const char *>(hashes), 2 * sizeof(UInt128));
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr bool use_int_hash_for_pods = false;
|
||||||
|
};
|
||||||
|
|
||||||
/** Why we need MurmurHash2?
|
/** Why we need MurmurHash2?
|
||||||
* MurmurHash2 is an outdated hash function, superseded by MurmurHash3 and subsequently by CityHash, xxHash, HighwayHash.
|
* MurmurHash2 is an outdated hash function, superseded by MurmurHash3 and subsequently by CityHash, xxHash, HighwayHash.
|
||||||
* Usually there is no reason to use MurmurHash.
|
* Usually there is no reason to use MurmurHash.
|
||||||
@ -1624,6 +1659,8 @@ using FunctionSHA512 = FunctionStringHashFixedString<SHA512Impl>;
|
|||||||
#endif
|
#endif
|
||||||
using FunctionSipHash128 = FunctionAnyHash<SipHash128Impl>;
|
using FunctionSipHash128 = FunctionAnyHash<SipHash128Impl>;
|
||||||
using FunctionSipHash128Keyed = FunctionAnyHash<SipHash128KeyedImpl, true, SipHash128KeyedImpl::Key>;
|
using FunctionSipHash128Keyed = FunctionAnyHash<SipHash128KeyedImpl, true, SipHash128KeyedImpl::Key>;
|
||||||
|
using FunctionSipHash128Reference = FunctionAnyHash<SipHash128ReferenceImpl>;
|
||||||
|
using FunctionSipHash128ReferenceKeyed = FunctionAnyHash<SipHash128ReferenceKeyedImpl, true, SipHash128ReferenceKeyedImpl::Key>;
|
||||||
using FunctionCityHash64 = FunctionAnyHash<ImplCityHash64>;
|
using FunctionCityHash64 = FunctionAnyHash<ImplCityHash64>;
|
||||||
using FunctionFarmFingerprint64 = FunctionAnyHash<ImplFarmFingerprint64>;
|
using FunctionFarmFingerprint64 = FunctionAnyHash<ImplFarmFingerprint64>;
|
||||||
using FunctionFarmHash64 = FunctionAnyHash<ImplFarmHash64>;
|
using FunctionFarmHash64 = FunctionAnyHash<ImplFarmHash64>;
|
||||||
|
@ -15,6 +15,8 @@ REGISTER_FUNCTION(Hashing)
|
|||||||
factory.registerFunction<FunctionSipHash64Keyed>();
|
factory.registerFunction<FunctionSipHash64Keyed>();
|
||||||
factory.registerFunction<FunctionSipHash128>();
|
factory.registerFunction<FunctionSipHash128>();
|
||||||
factory.registerFunction<FunctionSipHash128Keyed>();
|
factory.registerFunction<FunctionSipHash128Keyed>();
|
||||||
|
factory.registerFunction<FunctionSipHash128Reference>();
|
||||||
|
factory.registerFunction<FunctionSipHash128ReferenceKeyed>();
|
||||||
factory.registerFunction<FunctionCityHash64>();
|
factory.registerFunction<FunctionCityHash64>();
|
||||||
factory.registerFunction<FunctionFarmFingerprint64>();
|
factory.registerFunction<FunctionFarmFingerprint64>();
|
||||||
factory.registerFunction<FunctionFarmHash64>();
|
factory.registerFunction<FunctionFarmHash64>();
|
||||||
|
Loading…
Reference in New Issue
Block a user