Merge branch 'master' of github.com:ClickHouse/ClickHouse

This commit is contained in:
Sergei Shtykov 2020-02-18 11:13:06 +03:00
commit 7f6e9c32b0
443 changed files with 3577 additions and 1247 deletions

4
.gitmodules vendored
View File

@ -104,6 +104,10 @@
[submodule "contrib/sparsehash-c11"] [submodule "contrib/sparsehash-c11"]
path = contrib/sparsehash-c11 path = contrib/sparsehash-c11
url = https://github.com/sparsehash/sparsehash-c11.git url = https://github.com/sparsehash/sparsehash-c11.git
[submodule "contrib/grpc"]
path = contrib/grpc
url = https://github.com/grpc/grpc.git
branch = v1.25.0
[submodule "contrib/aws"] [submodule "contrib/aws"]
path = contrib/aws path = contrib/aws
url = https://github.com/aws/aws-sdk-cpp.git url = https://github.com/aws/aws-sdk-cpp.git

View File

@ -229,6 +229,10 @@ endif ()
# Using system libs can cause a lot of warnings in includes (on macro expansion). # Using system libs can cause a lot of warnings in includes (on macro expansion).
if (UNBUNDLED OR NOT (OS_LINUX OR OS_DARWIN) OR ARCH_32) if (UNBUNDLED OR NOT (OS_LINUX OR OS_DARWIN) OR ARCH_32)
option (NO_WERROR "Disable -Werror compiler option" ON) option (NO_WERROR "Disable -Werror compiler option" ON)
if (NOT NO_WERROR)
add_warning(error)
endif ()
endif () endif ()
# Make this extra-checks for correct library dependencies. # Make this extra-checks for correct library dependencies.
@ -326,7 +330,6 @@ include (cmake/find/poco.cmake)
include (cmake/find/lz4.cmake) include (cmake/find/lz4.cmake)
include (cmake/find/xxhash.cmake) include (cmake/find/xxhash.cmake)
include (cmake/find/sparsehash.cmake) include (cmake/find/sparsehash.cmake)
include (cmake/find/rt.cmake)
include (cmake/find/execinfo.cmake) include (cmake/find/execinfo.cmake)
include (cmake/find/re2.cmake) include (cmake/find/re2.cmake)
include (cmake/find/libgsasl.cmake) include (cmake/find/libgsasl.cmake)
@ -341,6 +344,7 @@ endif()
include (cmake/find/libxml2.cmake) include (cmake/find/libxml2.cmake)
include (cmake/find/brotli.cmake) include (cmake/find/brotli.cmake)
include (cmake/find/protobuf.cmake) include (cmake/find/protobuf.cmake)
include (cmake/find/grpc.cmake)
include (cmake/find/pdqsort.cmake) include (cmake/find/pdqsort.cmake)
include (cmake/find/hdfs3.cmake) # uses protobuf include (cmake/find/hdfs3.cmake) # uses protobuf
include (cmake/find/s3.cmake) include (cmake/find/s3.cmake)
@ -364,9 +368,9 @@ if (ENABLE_TESTS)
endif () endif ()
# Need to process before "contrib" dir: # Need to process before "contrib" dir:
include (libs/libcommon/cmake/find_jemalloc.cmake) include (cmake/find/jemalloc.cmake)
include (libs/libcommon/cmake/find_cctz.cmake) include (cmake/find/cctz.cmake)
include (libs/libmysqlxx/cmake/find_mysqlclient.cmake) include (cmake/find/mysqlclient.cmake)
# When testing for memory leaks with Valgrind, don't link tcmalloc or jemalloc. # When testing for memory leaks with Valgrind, don't link tcmalloc or jemalloc.
@ -398,7 +402,7 @@ macro (add_executable target)
endif() endif()
endmacro() endmacro()
add_subdirectory (libs) add_subdirectory (base)
add_subdirectory (utils) add_subdirectory (utils)
add_subdirectory (dbms) add_subdirectory (dbms)

17
base/CMakeLists.txt Normal file
View File

@ -0,0 +1,17 @@
add_subdirectory (common)
add_subdirectory (loggers)
add_subdirectory (daemon)
if (USE_INTERNAL_MEMCPY)
add_subdirectory (memcpy)
endif()
if (USE_MYSQL)
add_subdirectory (mysqlxx)
endif ()
if (USE_INTERNAL_CONSISTENT_HASHING_LIBRARY)
add_subdirectory (consistent-hashing)
endif ()
add_subdirectory (consistent-hashing-sumbur)
add_subdirectory (widechar_width)

View File

@ -0,0 +1,64 @@
configure_file (config_common.h.in config_common.h)
set (SRCS
argsToConfig.cpp
coverage.cpp
DateLUT.cpp
DateLUTImpl.cpp
demangle.cpp
getMemoryAmount.cpp
getThreadId.cpp
JSON.cpp
LineReader.cpp
mremap.cpp
phdr_cache.cpp
preciseExp10.c
setTerminalEcho.cpp
shift10.cpp
sleep.cpp
)
if (ENABLE_REPLXX)
set (SRCS ${SRCS}
ReplxxLineReader.cpp
ReplxxLineReader.h
)
endif ()
add_library (common ${SRCS})
target_include_directories(common PUBLIC .. ${CMAKE_CURRENT_BINARY_DIR}/..)
if (USE_INTERNAL_MEMCPY)
target_link_libraries (common PRIVATE memcpy)
endif ()
if(CCTZ_INCLUDE_DIR)
target_include_directories(common BEFORE PRIVATE ${CCTZ_INCLUDE_DIR})
endif()
if (NOT USE_INTERNAL_BOOST_LIBRARY)
target_include_directories (common SYSTEM BEFORE PUBLIC ${Boost_INCLUDE_DIRS})
endif ()
if(NOT USE_INTERNAL_POCO_LIBRARY)
target_include_directories (common SYSTEM BEFORE PUBLIC ${Poco_Foundation_INCLUDE_DIR})
endif()
if(CCTZ_LIBRARY)
target_link_libraries(common PRIVATE ${CCTZ_LIBRARY})
endif()
target_link_libraries(common PUBLIC replxx)
target_link_libraries (common
PUBLIC
${Poco_Util_LIBRARY}
${Poco_Foundation_LIBRARY}
${CITYHASH_LIBRARIES}
${Boost_SYSTEM_LIBRARY}
)
if (ENABLE_TESTS)
add_subdirectory (tests)
endif ()

View File

@ -391,9 +391,9 @@ public:
/* /*
The bits in week_mode has the following meaning: The bits in week_mode has the following meaning:
WeekModeFlag::MONDAY_FIRST (0) If not set Sunday is first day of week WeekModeFlag::MONDAY_FIRST (0) If not set Sunday is first day of week
If set Monday is first day of week If set Monday is first day of week
WeekModeFlag::YEAR (1) If not set Week is in range 0-53 WeekModeFlag::YEAR (1) If not set Week is in range 0-53
Week 0 is returned for the the last week of the previous year (for Week 0 is returned for the the last week of the previous year (for
a date at start of january) In this case one can get 53 for the a date at start of january) In this case one can get 53 for the
@ -401,19 +401,19 @@ public:
relevant for the given year. Note that this flag is only relevant for the given year. Note that this flag is only
releveant if WeekModeFlag::JANUARY is not set. releveant if WeekModeFlag::JANUARY is not set.
If set Week is in range 1-53. If set Week is in range 1-53.
In this case one may get week 53 for a date in January (when In this case one may get week 53 for a date in January (when
the week is that last week of previous year) and week 1 for a the week is that last week of previous year) and week 1 for a
date in December. date in December.
WeekModeFlag::FIRST_WEEKDAY (2) If not set Weeks are numbered according WeekModeFlag::FIRST_WEEKDAY (2) If not set Weeks are numbered according
to ISO 8601:1988 to ISO 8601:1988
If set The week that contains the first If set The week that contains the first
'first-day-of-week' is week 1. 'first-day-of-week' is week 1.
WeekModeFlag::NEWYEAR_DAY (3) If not set no meaning WeekModeFlag::NEWYEAR_DAY (3) If not set no meaning
If set The week that contains the January 1 is week 1. If set The week that contains the January 1 is week 1.
Week is in range 1-53. Week is in range 1-53.
And ignore WeekModeFlag::YEAR, WeekModeFlag::FIRST_WEEKDAY And ignore WeekModeFlag::YEAR, WeekModeFlag::FIRST_WEEKDAY

View File

@ -399,7 +399,7 @@ JSON::Pos JSON::skipElement() const
ElementType type = getType(); ElementType type = getType();
switch(type) switch (type)
{ {
case TYPE_NULL: case TYPE_NULL:
return skipNull(); return skipNull();
@ -587,7 +587,7 @@ std::string JSON::getString() const
++s; ++s;
checkPos(s); checkPos(s);
switch(*s) switch (*s)
{ {
case '"': case '"':
buf += '"'; buf += '"';
@ -665,7 +665,7 @@ StringRef JSON::getRawString() const
if (*s != '"') if (*s != '"')
throw JSONException(std::string("JSON: expected \", got ") + *s); throw JSONException(std::string("JSON: expected \", got ") + *s);
while (++s != ptr_end && *s != '"'); while (++s != ptr_end && *s != '"');
if (s != ptr_end ) if (s != ptr_end)
return StringRef(ptr_begin + 1, s - ptr_begin - 1); return StringRef(ptr_begin + 1, s - ptr_begin - 1);
throw JSONException("JSON: incorrect syntax (expected end of string, found end of JSON)."); throw JSONException("JSON: incorrect syntax (expected end of string, found end of JSON).");
} }

View File

@ -3,8 +3,8 @@
#include <iostream> #include <iostream>
#include <string_view> #include <string_view>
#include <port/unistd.h>
#include <string.h> #include <string.h>
#include <unistd.h>
#ifdef OS_LINUX #ifdef OS_LINUX
/// We can detect if code is linked with one or another readline variants or open the library dynamically. /// We can detect if code is linked with one or another readline variants or open the library dynamically.

View File

@ -1,8 +1,8 @@
#include <common/ReplxxLineReader.h> #include <common/ReplxxLineReader.h>
#include <errno.h> #include <errno.h>
#include <port/unistd.h>
#include <string.h> #include <string.h>
#include <unistd.h>
namespace namespace
{ {

View File

@ -33,7 +33,7 @@ uint64_t getMemoryAmountOrZero()
/* New 64-bit MEMORYSTATUSEX isn't available. Use old 32.bit */ /* New 64-bit MEMORYSTATUSEX isn't available. Use old 32.bit */
MEMORYSTATUS status; MEMORYSTATUS status;
status.dwLength = sizeof(status); status.dwLength = sizeof(status);
GlobalMemoryStatus( &status ); GlobalMemoryStatus(&status);
return status.dwTotalPhys; return status.dwTotalPhys;
#elif defined(WIN32) || defined(_WIN32) #elif defined(WIN32) || defined(_WIN32)
@ -41,7 +41,7 @@ uint64_t getMemoryAmountOrZero()
/* Use new 64-bit MEMORYSTATUSEX, not old 32-bit MEMORYSTATUS */ /* Use new 64-bit MEMORYSTATUSEX, not old 32-bit MEMORYSTATUS */
MEMORYSTATUSEX status; MEMORYSTATUSEX status;
status.dwLength = sizeof(status); status.dwLength = sizeof(status);
GlobalMemoryStatusEx( &status ); GlobalMemoryStatusEx(&status);
return status.ullTotalPhys; return status.ullTotalPhys;
#else #else
@ -58,24 +58,24 @@ uint64_t getMemoryAmountOrZero()
#endif #endif
uint64_t size = 0; /* 64-bit */ uint64_t size = 0; /* 64-bit */
size_t len = sizeof(size); size_t len = sizeof(size);
if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) { if (sysctl(mib, 2, &size, &len, NULL, 0) == 0)
return size; return size;
}
return 0; /* Failed? */ return 0; /* Failed? */
#elif defined(_SC_AIX_REALMEM) #elif defined(_SC_AIX_REALMEM)
/* AIX. ----------------------------------------------------- */ /* AIX. ----------------------------------------------------- */
return sysconf( _SC_AIX_REALMEM ) * 1024; return sysconf(_SC_AIX_REALMEM) * 1024;
#elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE)
/* FreeBSD, Linux, OpenBSD, and Solaris. -------------------- */ /* FreeBSD, Linux, OpenBSD, and Solaris. -------------------- */
return (uint64_t)sysconf( _SC_PHYS_PAGES ) return (uint64_t)sysconf(_SC_PHYS_PAGES)
* (uint64_t)sysconf( _SC_PAGESIZE ); * (uint64_t)sysconf(_SC_PAGESIZE);
#elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE) #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE)
/* Legacy. -------------------------------------------------- */ /* Legacy. -------------------------------------------------- */
return (uint64_t)sysconf( _SC_PHYS_PAGES ) return (uint64_t)sysconf(_SC_PHYS_PAGES)
* (uint64_t)sysconf( _SC_PAGE_SIZE ); * (uint64_t)sysconf(_SC_PAGE_SIZE);
#elif defined(CTL_HW) && (defined(HW_PHYSMEM) || defined(HW_REALMEM)) #elif defined(CTL_HW) && (defined(HW_PHYSMEM) || defined(HW_REALMEM))
/* DragonFly BSD, FreeBSD, NetBSD, OpenBSD, and OSX. -------- */ /* DragonFly BSD, FreeBSD, NetBSD, OpenBSD, and OSX. -------- */
@ -87,10 +87,10 @@ uint64_t getMemoryAmountOrZero()
mib[1] = HW_PHYSMEM; /* Others. ------------------ */ mib[1] = HW_PHYSMEM; /* Others. ------------------ */
#endif #endif
unsigned int size = 0; /* 32-bit */ unsigned int size = 0; /* 32-bit */
size_t len = sizeof( size ); size_t len = sizeof(size);
if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) { if (sysctl(mib, 2, &size, &len, NULL, 0) == 0)
return size; return size;
}
return 0; /* Failed? */ return 0; /* Failed? */
#endif /* sysctl and sysconf variants */ #endif /* sysctl and sysconf variants */

View File

@ -1,7 +1,8 @@
#include <common/shift10.h> #include <common/shift10.h>
#include <common/likely.h> #include <common/likely.h>
#include <limits> #include <limits>
#include <port/ssize_t.h>
template <typename T> template <typename T>

7
base/common/time.h Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include <time.h>
#if defined (OS_DARWIN)
# define CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC
#endif

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include <sys/types.h> #include <sys/types.h>
#include <port/unistd.h> #include <unistd.h>
#include <iostream> #include <iostream>
#include <memory> #include <memory>
#include <functional> #include <functional>

View File

@ -382,7 +382,7 @@ enum class InstructionFail
static std::string instructionFailToString(InstructionFail fail) static std::string instructionFailToString(InstructionFail fail)
{ {
switch(fail) switch (fail)
{ {
case InstructionFail::NONE: case InstructionFail::NONE:
return "NONE"; return "NONE";

View File

@ -2,7 +2,15 @@
#include <memory> #include <memory>
namespace ext { namespace ext
{
/** Thread-unsafe singleton. It works simply like a global variable.
* Supports deinitialization.
*
* In most of the cases, you don't need this class.
* Use "Meyers Singleton" instead: static T & instance() { static T x; return x; }
*/
template <class T> template <class T>
class Singleton class Singleton
@ -11,14 +19,7 @@ public:
Singleton() Singleton()
{ {
if (!instance) if (!instance)
instance.reset(new T); instance = std::make_unique<T>();
}
template <typename ... Args>
Singleton(const Args & ... args)
{
instance.reset(new T(args...));
/// TODO: throw exception on double-creation.
} }
T * operator->() T * operator->()

Some files were not shown because too many files have changed in this diff Show More