This commit is contained in:
olevino999 2022-04-21 02:26:37 +03:00
parent 2f38e7bc5c
commit 64989afa52
7 changed files with 41 additions and 0 deletions

3
.gitmodules vendored
View File

@ -262,3 +262,6 @@
[submodule "contrib/minizip-ng"]
path = contrib/minizip-ng
url = https://github.com/zlib-ng/minizip-ng
[submodule "contrib/wyhash"]
path = contrib/wyhash
url = https://github.com/wangyi-fudan/wyhash.git

View File

@ -94,6 +94,7 @@ if (ENABLE_FUZZING)
add_contrib (libprotobuf-mutator-cmake libprotobuf-mutator)
endif()
add_contrib (wyhash-cmake wyhash)
add_contrib (cityhash102)
add_contrib (libfarmhash)
add_contrib (icu-cmake icu)

1
contrib/wyhash vendored Submodule

@ -0,0 +1 @@
Subproject commit 991aa3dab624e50b066f7a02ccc9f6935cc740ec

View File

@ -0,0 +1,7 @@
set (LIBRARY_DIR ${ClickHouse_SOURCE_DIR}/contrib/wyhash)
add_library (wyhash "${LIBRARY_DIR}/wyhash.h")
target_include_directories(wyhash PUBLIC ${LIBRARY_DIR})
add_library (ch_contrib::wyhash ALIAS wyhash)

View File

@ -13,6 +13,7 @@ add_library(clickhouse_functions ${clickhouse_functions_sources})
target_link_libraries(clickhouse_functions
PUBLIC
ch_contrib::wyhash
ch_contrib::cityhash
ch_contrib::farmhash
clickhouse_dictionaries

View File

@ -39,5 +39,7 @@ void registerFunctionsHashing(FunctionFactory & factory)
factory.registerFunction<FunctionXxHash32>();
factory.registerFunction<FunctionXxHash64>();
factory.registerFunction<FunctionWyHash64>();
}
}

View File

@ -5,6 +5,7 @@
#include <metrohash.h>
#include <MurmurHash2.h>
#include <MurmurHash3.h>
#include <wyhash.h>
#include "config_functions.h"
#include "config_core.h"
@ -1369,6 +1370,29 @@ private:
}
};
struct ImplWyHash64
{
static constexpr auto name = "wyHash64";
using ReturnType = UInt64;
static UInt64 apply(const char * s, const size_t len)
{
return uint64_t hash=wyhash(s, len, 0, _wyp);
}
static UInt64 combineHashes(UInt64 h1, UInt64 h2)
{
union
{
UInt64 u64[2];
char chars[8];
};
u64[0] = h1;
u64[2] = h2;
return apply(chars, 8);
}
static constexpr bool use_int_hash_for_pods = false;
};
struct NameIntHash32 { static constexpr auto name = "intHash32"; };
struct NameIntHash64 { static constexpr auto name = "intHash64"; };
@ -1406,4 +1430,6 @@ using FunctionHiveHash = FunctionAnyHash<HiveHashImpl>;
using FunctionXxHash32 = FunctionAnyHash<ImplXxHash32>;
using FunctionXxHash64 = FunctionAnyHash<ImplXxHash64>;
using FunctionWyHash64 = FunctionAnyHash<ImplWyHash64>;
}