mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-24 02:30:51 +00:00
Merge branch 'master' of github.com:ClickHouse/ClickHouse into clickhouse-copier
This commit is contained in:
commit
eed5ee4ec7
63
.clang-tidy
63
.clang-tidy
@ -1,2 +1,63 @@
|
|||||||
Checks: '-*,google-readability-avoid-underscore-in-googletest-name,misc-throw-by-value-catch-by-reference,misc-misplaced-const,misc-unconventional-assign-operator,modernize-avoid-bind,modernize-loop-convert,modernize-make-shared,modernize-make-unique,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-auto-ptr,modernize-replace-random-shuffle,modernize-use-bool-literals,modernize-use-nullptr,modernize-use-using,performance-faster-string-find,performance-for-range-copy,readability-avoid-const-params-in-decls,readability-const-return-type,readability-container-size-empty,readability-convert-member-functions-to-static,readability-delete-null-pointer,readability-deleted-default,readability-make-member-function-const,readability-misplaced-array-index,readability-non-const-parameter,readability-qualified-auto,readability-redundant-access-specifiers,readability-redundant-control-flow,readability-redundant-function-ptr-dereference,readability-redundant-smartptr-get,readability-redundant-string-cstr,readability-redundant-string-init,readability-static-definition-in-anonymous-namespace,readability-string-compare,readability-uniqueptr-delete-release,modernize-use-equals-default,modernize-use-equals-delete,bugprone-undelegated-constructor,readability-redundant-member-init,readability-simplify-subscript-expr,readability-simplify-boolean-expr,readability-inconsistent-declaration-parameter-name'
|
Checks: '-*,
|
||||||
|
google-readability-avoid-underscore-in-googletest-name,
|
||||||
|
|
||||||
|
misc-throw-by-value-catch-by-reference,
|
||||||
|
misc-misplaced-const,
|
||||||
|
misc-unconventional-assign-operator,
|
||||||
|
|
||||||
|
modernize-avoid-bind,
|
||||||
|
modernize-loop-convert,
|
||||||
|
modernize-make-shared,
|
||||||
|
modernize-make-unique,
|
||||||
|
modernize-raw-string-literal,
|
||||||
|
modernize-redundant-void-arg,
|
||||||
|
modernize-replace-auto-ptr,
|
||||||
|
modernize-replace-random-shuffle,
|
||||||
|
modernize-use-bool-literals,
|
||||||
|
modernize-use-nullptr,
|
||||||
|
modernize-use-using,
|
||||||
|
modernize-use-equals-default,
|
||||||
|
modernize-use-equals-delete,
|
||||||
|
|
||||||
|
performance-faster-string-find,
|
||||||
|
performance-for-range-copy,
|
||||||
|
|
||||||
|
readability-avoid-const-params-in-decls,
|
||||||
|
readability-const-return-type,
|
||||||
|
readability-container-size-empty,
|
||||||
|
readability-convert-member-functions-to-static,
|
||||||
|
readability-delete-null-pointer,
|
||||||
|
readability-deleted-default,
|
||||||
|
readability-make-member-function-const,
|
||||||
|
readability-misplaced-array-index,
|
||||||
|
readability-non-const-parameter,
|
||||||
|
readability-qualified-auto,
|
||||||
|
readability-redundant-access-specifiers,
|
||||||
|
readability-redundant-control-flow,
|
||||||
|
readability-redundant-function-ptr-dereference,
|
||||||
|
readability-redundant-smartptr-get,
|
||||||
|
readability-redundant-string-cstr,
|
||||||
|
readability-redundant-string-init,
|
||||||
|
readability-static-definition-in-anonymous-namespace,
|
||||||
|
readability-string-compare,
|
||||||
|
readability-uniqueptr-delete-release,
|
||||||
|
readability-redundant-member-init,
|
||||||
|
readability-simplify-subscript-expr,
|
||||||
|
readability-simplify-boolean-expr,
|
||||||
|
readability-inconsistent-declaration-parameter-name,
|
||||||
|
|
||||||
|
bugprone-undelegated-constructor,
|
||||||
|
bugprone-argument-comment,
|
||||||
|
bugprone-bad-signal-to-kill-thread,
|
||||||
|
bugprone-bool-pointer-implicit-conversion,
|
||||||
|
bugprone-copy-constructor-init,
|
||||||
|
bugprone-dangling-handle,
|
||||||
|
bugprone-forward-declaration-namespace,
|
||||||
|
bugprone-fold-init-type,
|
||||||
|
bugprone-inaccurate-erase,
|
||||||
|
bugprone-incorrect-roundings,
|
||||||
|
bugprone-infinite-loop,
|
||||||
|
|
||||||
|
boost-use-to-string,
|
||||||
|
'
|
||||||
WarningsAsErrors: '*'
|
WarningsAsErrors: '*'
|
||||||
|
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@ -1,2 +1,3 @@
|
|||||||
docs/* @ClickHouse/docs
|
docs/* @ClickHouse/docs
|
||||||
docs/zh/* @ClickHouse/docs-zh
|
docs/zh/* @ClickHouse/docs-zh
|
||||||
|
website/* @ClickHouse/docs
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -16,6 +16,7 @@
|
|||||||
/docs/publish
|
/docs/publish
|
||||||
/docs/edit
|
/docs/edit
|
||||||
/docs/website
|
/docs/website
|
||||||
|
/docs/venv/
|
||||||
/docs/tools/venv/
|
/docs/tools/venv/
|
||||||
/docs/en/single.md
|
/docs/en/single.md
|
||||||
/docs/ru/single.md
|
/docs/ru/single.md
|
||||||
|
3264
CHANGELOG.md
3264
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@ -186,11 +186,13 @@ if (COMPILER_GCC OR COMPILER_CLANG)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
option(WITH_COVERAGE "Build with coverage." 0)
|
option(WITH_COVERAGE "Build with coverage." 0)
|
||||||
|
|
||||||
if(WITH_COVERAGE AND COMPILER_CLANG)
|
if(WITH_COVERAGE AND COMPILER_CLANG)
|
||||||
set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
|
||||||
# If we want to disable coverage for specific translation units
|
# If we want to disable coverage for specific translation units
|
||||||
set(WITHOUT_COVERAGE "-fno-profile-instr-generate -fno-coverage-mapping")
|
set(WITHOUT_COVERAGE "-fno-profile-instr-generate -fno-coverage-mapping")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_COVERAGE AND COMPILER_GCC)
|
if(WITH_COVERAGE AND COMPILER_GCC)
|
||||||
set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-arcs -ftest-coverage")
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-arcs -ftest-coverage")
|
||||||
set(COVERAGE_OPTION "-lgcov")
|
set(COVERAGE_OPTION "-lgcov")
|
||||||
|
@ -8,6 +8,7 @@ ClickHouse is an open-source column-oriented database management system that all
|
|||||||
* [Tutorial](https://clickhouse.tech/docs/en/getting_started/tutorial/) shows how to set up and query small ClickHouse cluster.
|
* [Tutorial](https://clickhouse.tech/docs/en/getting_started/tutorial/) shows how to set up and query small ClickHouse cluster.
|
||||||
* [Documentation](https://clickhouse.tech/docs/en/) provides more in-depth information.
|
* [Documentation](https://clickhouse.tech/docs/en/) provides more in-depth information.
|
||||||
* [YouTube channel](https://www.youtube.com/c/ClickHouseDB) has a lot of content about ClickHouse in video format.
|
* [YouTube channel](https://www.youtube.com/c/ClickHouseDB) has a lot of content about ClickHouse in video format.
|
||||||
|
* [Slack](https://join.slack.com/t/clickhousedb/shared_invite/enQtOTUzMjM4ODQwNTc5LWJmMjE3Yjc2YmI1ZDBlZmI4ZTc3OWY3ZTIwYTljYzY4MzBlODM3YzBjZTc1YmYyODRlZTJkYTgzYzBiNTA2Yjk) and [Telegram](https://telegram.me/clickhouse_en) allow to chat with ClickHouse users in real-time.
|
||||||
* [Blog](https://clickhouse.yandex/blog/en/) contains various ClickHouse-related articles, as well as announces and reports about events.
|
* [Blog](https://clickhouse.yandex/blog/en/) contains various ClickHouse-related articles, as well as announces and reports about events.
|
||||||
* [Contacts](https://clickhouse.tech/#contacts) can help to get your questions answered if there are any.
|
* [Contacts](https://clickhouse.tech/#contacts) can help to get your questions answered if there are any.
|
||||||
* You can also [fill this form](https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/) to meet Yandex ClickHouse team in person.
|
* You can also [fill this form](https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/) to meet Yandex ClickHouse team in person.
|
||||||
|
@ -6,6 +6,7 @@ set (SRCS
|
|||||||
DateLUT.cpp
|
DateLUT.cpp
|
||||||
DateLUTImpl.cpp
|
DateLUTImpl.cpp
|
||||||
demangle.cpp
|
demangle.cpp
|
||||||
|
getFQDNOrHostName.cpp
|
||||||
getMemoryAmount.cpp
|
getMemoryAmount.cpp
|
||||||
getThreadId.cpp
|
getThreadId.cpp
|
||||||
JSON.cpp
|
JSON.cpp
|
||||||
@ -20,15 +21,9 @@ set (SRCS
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (ENABLE_REPLXX)
|
if (ENABLE_REPLXX)
|
||||||
set (SRCS ${SRCS}
|
list (APPEND SRCS ReplxxLineReader.cpp)
|
||||||
ReplxxLineReader.cpp
|
|
||||||
ReplxxLineReader.h
|
|
||||||
)
|
|
||||||
elseif (ENABLE_READLINE)
|
elseif (ENABLE_READLINE)
|
||||||
set (SRCS ${SRCS}
|
list (APPEND SRCS ReadlineLineReader.cpp)
|
||||||
ReadlineLineReader.cpp
|
|
||||||
ReadlineLineReader.h
|
|
||||||
)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (USE_DEBUG_HELPERS)
|
if (USE_DEBUG_HELPERS)
|
||||||
@ -38,6 +33,12 @@ endif ()
|
|||||||
|
|
||||||
add_library (common ${SRCS})
|
add_library (common ${SRCS})
|
||||||
|
|
||||||
|
if (WITH_COVERAGE)
|
||||||
|
target_compile_definitions(common PUBLIC WITH_COVERAGE=1)
|
||||||
|
else ()
|
||||||
|
target_compile_definitions(common PUBLIC WITH_COVERAGE=0)
|
||||||
|
endif ()
|
||||||
|
|
||||||
target_include_directories(common PUBLIC .. ${CMAKE_CURRENT_BINARY_DIR}/..)
|
target_include_directories(common PUBLIC .. ${CMAKE_CURRENT_BINARY_DIR}/..)
|
||||||
|
|
||||||
if(CCTZ_INCLUDE_DIR)
|
if(CCTZ_INCLUDE_DIR)
|
||||||
@ -56,8 +57,6 @@ if(CCTZ_LIBRARY)
|
|||||||
target_link_libraries(common PRIVATE ${CCTZ_LIBRARY})
|
target_link_libraries(common PRIVATE ${CCTZ_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(common PUBLIC replxx)
|
|
||||||
|
|
||||||
# allow explicitly fallback to readline
|
# allow explicitly fallback to readline
|
||||||
if (NOT ENABLE_REPLXX AND ENABLE_READLINE)
|
if (NOT ENABLE_REPLXX AND ENABLE_READLINE)
|
||||||
message (STATUS "Attempt to fallback to readline explicitly")
|
message (STATUS "Attempt to fallback to readline explicitly")
|
||||||
@ -82,11 +81,13 @@ endif ()
|
|||||||
|
|
||||||
target_link_libraries (common
|
target_link_libraries (common
|
||||||
PUBLIC
|
PUBLIC
|
||||||
|
${Poco_Net_LIBRARY}
|
||||||
${Poco_Util_LIBRARY}
|
${Poco_Util_LIBRARY}
|
||||||
${Poco_Foundation_LIBRARY}
|
${Poco_Foundation_LIBRARY}
|
||||||
${CITYHASH_LIBRARIES}
|
${CITYHASH_LIBRARIES}
|
||||||
${Boost_SYSTEM_LIBRARY}
|
${Boost_SYSTEM_LIBRARY}
|
||||||
FastMemcpy
|
FastMemcpy
|
||||||
|
replxx
|
||||||
)
|
)
|
||||||
|
|
||||||
if (ENABLE_TESTS)
|
if (ENABLE_TESTS)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include <common/argsToConfig.h>
|
#include "argsToConfig.h"
|
||||||
|
|
||||||
#include <Poco/Util/Application.h>
|
#include <Poco/Util/Application.h>
|
||||||
#include <Poco/Util/LayeredConfiguration.h>
|
#include <Poco/Util/LayeredConfiguration.h>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Poco/Util/Application.h>
|
#include <Poco/Util/Application.h>
|
||||||
|
|
||||||
namespace Poco::Util
|
namespace Poco::Util
|
||||||
|
@ -4,4 +4,3 @@
|
|||||||
|
|
||||||
#cmakedefine01 USE_JEMALLOC
|
#cmakedefine01 USE_JEMALLOC
|
||||||
#cmakedefine01 UNBUNDLED
|
#cmakedefine01 UNBUNDLED
|
||||||
#cmakedefine01 WITH_COVERAGE
|
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
#include <common/coverage.h>
|
#include "coverage.h"
|
||||||
#include <common/config_common.h>
|
|
||||||
|
|
||||||
#if WITH_COVERAGE
|
#if WITH_COVERAGE
|
||||||
|
|
||||||
#include <unistd.h>
|
# include <mutex>
|
||||||
#include <mutex>
|
|
||||||
|
|
||||||
#if defined(__clang__)
|
# include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
|
# if defined(__clang__)
|
||||||
extern "C" void __llvm_profile_dump();
|
extern "C" void __llvm_profile_dump();
|
||||||
#elif defined(__GNUC__) || defined(__GNUG__)
|
# elif defined(__GNUC__) || defined(__GNUG__)
|
||||||
extern "C" void __gcov_exit();
|
extern "C" void __gcov_exit();
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -21,11 +22,11 @@ void dumpCoverageReportIfPossible()
|
|||||||
static std::mutex mutex;
|
static std::mutex mutex;
|
||||||
std::lock_guard lock(mutex);
|
std::lock_guard lock(mutex);
|
||||||
|
|
||||||
#if defined(__clang__)
|
# if defined(__clang__)
|
||||||
__llvm_profile_dump();
|
__llvm_profile_dump();
|
||||||
#elif defined(__GNUC__) || defined(__GNUG__)
|
# elif defined(__GNUC__) || defined(__GNUG__)
|
||||||
__gcov_exit();
|
__gcov_exit();
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <Poco/Net/DNS.h>
|
#include <Poco/Net/DNS.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
|
|
||||||
|
|
||||||
namespace
|
namespace
|
12
base/common/ya.make
Normal file
12
base/common/ya.make
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
LIBRARY()
|
||||||
|
|
||||||
|
PEERDIR(
|
||||||
|
contrib/libs/poco/Util
|
||||||
|
)
|
||||||
|
|
||||||
|
SRCS(
|
||||||
|
argsToConfig.cpp
|
||||||
|
coverage.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
END()
|
@ -362,19 +362,8 @@ void BaseDaemon::reloadConfiguration()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BaseDaemon::BaseDaemon()
|
namespace
|
||||||
{
|
{
|
||||||
checkRequiredInstructions();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BaseDaemon::~BaseDaemon()
|
|
||||||
{
|
|
||||||
writeSignalIDtoSignalPipe(SignalListener::StopThread);
|
|
||||||
signal_listener_thread.join();
|
|
||||||
signal_pipe.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
enum class InstructionFail
|
enum class InstructionFail
|
||||||
{
|
{
|
||||||
@ -388,7 +377,7 @@ enum class InstructionFail
|
|||||||
AVX512 = 7
|
AVX512 = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string instructionFailToString(InstructionFail fail)
|
std::string instructionFailToString(InstructionFail fail)
|
||||||
{
|
{
|
||||||
switch (fail)
|
switch (fail)
|
||||||
{
|
{
|
||||||
@ -413,16 +402,16 @@ static std::string instructionFailToString(InstructionFail fail)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static sigjmp_buf jmpbuf;
|
sigjmp_buf jmpbuf;
|
||||||
|
|
||||||
static void sigIllCheckHandler(int sig, siginfo_t * info, void * context)
|
void sigIllCheckHandler(int sig, siginfo_t * info, void * context)
|
||||||
{
|
{
|
||||||
siglongjmp(jmpbuf, 1);
|
siglongjmp(jmpbuf, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if necessary sse extensions are available by trying to execute some sse instructions.
|
/// Check if necessary sse extensions are available by trying to execute some sse instructions.
|
||||||
/// If instruction is unavailable, SIGILL will be sent by kernel.
|
/// If instruction is unavailable, SIGILL will be sent by kernel.
|
||||||
static void checkRequiredInstructions(volatile InstructionFail & fail)
|
void checkRequiredInstructionsImpl(volatile InstructionFail & fail)
|
||||||
{
|
{
|
||||||
#if __SSE3__
|
#if __SSE3__
|
||||||
fail = InstructionFail::SSE3;
|
fail = InstructionFail::SSE3;
|
||||||
@ -463,8 +452,9 @@ static void checkRequiredInstructions(volatile InstructionFail & fail)
|
|||||||
fail = InstructionFail::NONE;
|
fail = InstructionFail::NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check SSE and others instructions availability
|
||||||
void BaseDaemon::checkRequiredInstructions()
|
/// Calls exit on fail
|
||||||
|
void checkRequiredInstructions()
|
||||||
{
|
{
|
||||||
struct sigaction sa{};
|
struct sigaction sa{};
|
||||||
struct sigaction sa_old{};
|
struct sigaction sa_old{};
|
||||||
@ -487,7 +477,7 @@ void BaseDaemon::checkRequiredInstructions()
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
::checkRequiredInstructions(fail);
|
checkRequiredInstructionsImpl(fail);
|
||||||
|
|
||||||
if (sigaction(signal, &sa_old, nullptr))
|
if (sigaction(signal, &sa_old, nullptr))
|
||||||
{
|
{
|
||||||
@ -496,6 +486,22 @@ void BaseDaemon::checkRequiredInstructions()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BaseDaemon::BaseDaemon()
|
||||||
|
{
|
||||||
|
checkRequiredInstructions();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BaseDaemon::~BaseDaemon()
|
||||||
|
{
|
||||||
|
writeSignalIDtoSignalPipe(SignalListener::StopThread);
|
||||||
|
signal_listener_thread.join();
|
||||||
|
signal_pipe.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BaseDaemon::terminate()
|
void BaseDaemon::terminate()
|
||||||
{
|
{
|
||||||
|
@ -128,7 +128,7 @@ public:
|
|||||||
/// close all process FDs except
|
/// close all process FDs except
|
||||||
/// 0-2 -- stdin, stdout, stderr
|
/// 0-2 -- stdin, stdout, stderr
|
||||||
/// also doesn't close global internal pipes for signal handling
|
/// also doesn't close global internal pipes for signal handling
|
||||||
void closeFDs();
|
static void closeFDs();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Возвращает TaskManager приложения
|
/// Возвращает TaskManager приложения
|
||||||
@ -198,12 +198,6 @@ protected:
|
|||||||
std::string config_path;
|
std::string config_path;
|
||||||
DB::ConfigProcessor::LoadedConfig loaded_config;
|
DB::ConfigProcessor::LoadedConfig loaded_config;
|
||||||
Poco::Util::AbstractConfiguration * last_configuration = nullptr;
|
Poco::Util::AbstractConfiguration * last_configuration = nullptr;
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
/// Check SSE and others instructions availability
|
|
||||||
/// Calls exit on fail
|
|
||||||
void checkRequiredInstructions();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#include <daemon/BaseDaemon.h>
|
#include <daemon/BaseDaemon.h>
|
||||||
#include <Poco/Util/LayeredConfiguration.h>
|
#include <Poco/Util/LayeredConfiguration.h>
|
||||||
#include <Poco/Util/Application.h>
|
#include <Poco/Util/Application.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
|
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
@ -1 +1,3 @@
|
|||||||
|
RECURSE(
|
||||||
|
common
|
||||||
|
)
|
||||||
|
5
contrib/CMakeLists.txt
vendored
5
contrib/CMakeLists.txt
vendored
@ -310,12 +310,13 @@ if (USE_BASE64)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (USE_INTERNAL_HYPERSCAN_LIBRARY)
|
if (USE_INTERNAL_HYPERSCAN_LIBRARY)
|
||||||
add_subdirectory (hyperscan)
|
|
||||||
|
|
||||||
# The library is large - avoid bloat.
|
# The library is large - avoid bloat.
|
||||||
if (USE_STATIC_LIBRARIES)
|
if (USE_STATIC_LIBRARIES)
|
||||||
|
add_subdirectory (hyperscan)
|
||||||
target_compile_options (hs PRIVATE -g0)
|
target_compile_options (hs PRIVATE -g0)
|
||||||
else ()
|
else ()
|
||||||
|
set(BUILD_SHARED_LIBS 1 CACHE INTERNAL "")
|
||||||
|
add_subdirectory (hyperscan)
|
||||||
target_compile_options (hs_shared PRIVATE -g0)
|
target_compile_options (hs_shared PRIVATE -g0)
|
||||||
endif ()
|
endif ()
|
||||||
endif()
|
endif()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
set(AVROCPP_ROOT_DIR ${CMAKE_SOURCE_DIR}/contrib/avro/lang/c++)
|
set(AVROCPP_ROOT_DIR ${CMAKE_SOURCE_DIR}/contrib/avro/lang/c++)
|
||||||
set(AVROCPP_INCLUDE_DIR ${AVROCPP_ROOT_DIR}/api)
|
set(AVROCPP_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/contrib/avro-cmake/include)
|
||||||
set(AVROCPP_SOURCE_DIR ${AVROCPP_ROOT_DIR}/impl)
|
set(AVROCPP_SOURCE_DIR ${AVROCPP_ROOT_DIR}/impl)
|
||||||
|
|
||||||
set (CMAKE_CXX_STANDARD 17)
|
set (CMAKE_CXX_STANDARD 17)
|
||||||
@ -44,6 +44,7 @@ add_library (avrocpp ${AVROCPP_SOURCE_FILES})
|
|||||||
set_target_properties (avrocpp PROPERTIES VERSION ${AVRO_VERSION_MAJOR}.${AVRO_VERSION_MINOR})
|
set_target_properties (avrocpp PROPERTIES VERSION ${AVRO_VERSION_MAJOR}.${AVRO_VERSION_MINOR})
|
||||||
|
|
||||||
target_include_directories(avrocpp SYSTEM PUBLIC ${AVROCPP_INCLUDE_DIR})
|
target_include_directories(avrocpp SYSTEM PUBLIC ${AVROCPP_INCLUDE_DIR})
|
||||||
|
target_include_directories(avrocpp SYSTEM PRIVATE ${AVROCPP_ROOT_DIR}/api)
|
||||||
|
|
||||||
target_include_directories(avrocpp SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
target_include_directories(avrocpp SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
|
||||||
target_link_libraries (avrocpp ${Boost_IOSTREAMS_LIBRARY})
|
target_link_libraries (avrocpp ${Boost_IOSTREAMS_LIBRARY})
|
||||||
@ -61,10 +62,3 @@ elseif (COMPILER_CLANG)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_compile_options(avrocpp PRIVATE ${SUPPRESS_WARNINGS})
|
target_compile_options(avrocpp PRIVATE ${SUPPRESS_WARNINGS})
|
||||||
|
|
||||||
# create a symlink to include headers with <avro/...>
|
|
||||||
ADD_CUSTOM_TARGET(avro_symlink_headers ALL
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${AVROCPP_ROOT_DIR}/include
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${AVROCPP_ROOT_DIR}/api ${AVROCPP_ROOT_DIR}/include/avro
|
|
||||||
)
|
|
||||||
add_dependencies(avrocpp avro_symlink_headers)
|
|
1
contrib/avro-cmake/include/avro
Symbolic link
1
contrib/avro-cmake/include/avro
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../avro/lang/c++/api
|
@ -281,7 +281,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Should we celebrate a bit?
|
/// Should we celebrate a bit?
|
||||||
bool isNewYearMode()
|
static bool isNewYearMode()
|
||||||
{
|
{
|
||||||
time_t current_time = time(nullptr);
|
time_t current_time = time(nullptr);
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ private:
|
|||||||
|| (now.month() == 1 && now.day() <= 5);
|
|| (now.month() == 1 && now.day() <= 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isChineseNewYearMode(const String & local_tz)
|
static bool isChineseNewYearMode(const String & local_tz)
|
||||||
{
|
{
|
||||||
/// Days of Dec. 20 in Chinese calendar starting from year 2019 to year 2105
|
/// Days of Dec. 20 in Chinese calendar starting from year 2019 to year 2105
|
||||||
static constexpr UInt16 chineseNewYearIndicators[]
|
static constexpr UInt16 chineseNewYearIndicators[]
|
||||||
@ -1594,7 +1594,7 @@ private:
|
|||||||
std::cout << "Ok." << std::endl;
|
std::cout << "Ok." << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void showClientVersion()
|
static void showClientVersion()
|
||||||
{
|
{
|
||||||
std::cout << DBMS_NAME << " client version " << VERSION_STRING << VERSION_OFFICIAL << "." << std::endl;
|
std::cout << DBMS_NAME << " client version " << VERSION_STRING << VERSION_OFFICIAL << "." << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -705,8 +705,9 @@ ASTPtr ClusterCopier::removeAliasColumnsFromCreateQuery(const ASTPtr & query_ast
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Replaces ENGINE and table name in a create query
|
/// Replaces ENGINE and table name in a create query
|
||||||
std::shared_ptr<ASTCreateQuery> ClusterCopier::rewriteCreateQueryStorage(
|
std::shared_ptr<ASTCreateQuery> rewriteCreateQueryStorage(const ASTPtr & create_query_ast,
|
||||||
const ASTPtr & create_query_ast, const DatabaseAndTableName & new_table, const ASTPtr & new_storage_ast)
|
const DatabaseAndTableName & new_table,
|
||||||
|
const ASTPtr & new_storage_ast)
|
||||||
{
|
{
|
||||||
const auto & create = create_query_ast->as<ASTCreateQuery &>();
|
const auto & create = create_query_ast->as<ASTCreateQuery &>();
|
||||||
auto res = std::make_shared<ASTCreateQuery>(create);
|
auto res = std::make_shared<ASTCreateQuery>(create);
|
||||||
|
@ -116,10 +116,6 @@ protected:
|
|||||||
/// Removes MATERIALIZED and ALIAS columns from create table query
|
/// Removes MATERIALIZED and ALIAS columns from create table query
|
||||||
ASTPtr removeAliasColumnsFromCreateQuery(const ASTPtr & query_ast);
|
ASTPtr removeAliasColumnsFromCreateQuery(const ASTPtr & query_ast);
|
||||||
|
|
||||||
/// Replaces ENGINE and table name in a create query
|
|
||||||
std::shared_ptr<ASTCreateQuery> rewriteCreateQueryStorage(const ASTPtr & create_query_ast,
|
|
||||||
const DatabaseAndTableName & new_table, const ASTPtr & new_storage_ast);
|
|
||||||
|
|
||||||
bool tryDropPartitionPiece(ShardPartition & task_partition, const size_t current_piece_number,
|
bool tryDropPartitionPiece(ShardPartition & task_partition, const size_t current_piece_number,
|
||||||
const zkutil::ZooKeeperPtr & zookeeper, const CleanStateClock & clean_state_clock);
|
const zkutil::ZooKeeperPtr & zookeeper, const CleanStateClock & clean_state_clock);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include <Common/Exception.h>
|
#include <Common/Exception.h>
|
||||||
#include <Common/ZooKeeper/ZooKeeper.h>
|
#include <Common/ZooKeeper/ZooKeeper.h>
|
||||||
#include <Common/ZooKeeper/KeeperException.h>
|
#include <Common/ZooKeeper/KeeperException.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/isLocalAddress.h>
|
#include <Common/isLocalAddress.h>
|
||||||
#include <Common/typeid_cast.h>
|
#include <Common/typeid_cast.h>
|
||||||
#include <Common/ClickHouseRevision.h>
|
#include <Common/ClickHouseRevision.h>
|
||||||
|
@ -118,6 +118,20 @@ void LocalServer::tryInitPath()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void attachSystemTables()
|
||||||
|
{
|
||||||
|
DatabasePtr system_database = DatabaseCatalog::instance().tryGetDatabase(DatabaseCatalog::SYSTEM_DATABASE);
|
||||||
|
if (!system_database)
|
||||||
|
{
|
||||||
|
/// TODO: add attachTableDelayed into DatabaseMemory to speedup loading
|
||||||
|
system_database = std::make_shared<DatabaseMemory>(DatabaseCatalog::SYSTEM_DATABASE);
|
||||||
|
DatabaseCatalog::instance().attachDatabase(DatabaseCatalog::SYSTEM_DATABASE, system_database);
|
||||||
|
}
|
||||||
|
|
||||||
|
attachSystemTablesLocal(*system_database);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int LocalServer::main(const std::vector<std::string> & /*args*/)
|
int LocalServer::main(const std::vector<std::string> & /*args*/)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -248,20 +262,6 @@ std::string LocalServer::getInitialCreateTableQuery()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LocalServer::attachSystemTables()
|
|
||||||
{
|
|
||||||
DatabasePtr system_database = DatabaseCatalog::instance().tryGetDatabase(DatabaseCatalog::SYSTEM_DATABASE);
|
|
||||||
if (!system_database)
|
|
||||||
{
|
|
||||||
/// TODO: add attachTableDelayed into DatabaseMemory to speedup loading
|
|
||||||
system_database = std::make_shared<DatabaseMemory>(DatabaseCatalog::SYSTEM_DATABASE);
|
|
||||||
DatabaseCatalog::instance().attachDatabase(DatabaseCatalog::SYSTEM_DATABASE, system_database);
|
|
||||||
}
|
|
||||||
|
|
||||||
attachSystemTablesLocal(*system_database);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void LocalServer::processQueries()
|
void LocalServer::processQueries()
|
||||||
{
|
{
|
||||||
String initial_create_query = getInitialCreateTableQuery();
|
String initial_create_query = getInitialCreateTableQuery();
|
||||||
@ -375,7 +375,7 @@ static void showClientVersion()
|
|||||||
std::cout << DBMS_NAME << " client version " << VERSION_STRING << VERSION_OFFICIAL << "." << '\n';
|
std::cout << DBMS_NAME << " client version " << VERSION_STRING << VERSION_OFFICIAL << "." << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string LocalServer::getHelpHeader() const
|
static std::string getHelpHeader()
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
"usage: clickhouse-local [initial table definition] [--query <query>]\n"
|
"usage: clickhouse-local [initial table definition] [--query <query>]\n"
|
||||||
@ -390,7 +390,7 @@ std::string LocalServer::getHelpHeader() const
|
|||||||
"Either through corresponding command line parameters --table --structure --input-format and --file.";
|
"Either through corresponding command line parameters --table --structure --input-format and --file.";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string LocalServer::getHelpFooter() const
|
static std::string getHelpFooter()
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
"Example printing memory used by each Unix user:\n"
|
"Example printing memory used by each Unix user:\n"
|
||||||
|
@ -37,13 +37,9 @@ private:
|
|||||||
void tryInitPath();
|
void tryInitPath();
|
||||||
void applyCmdOptions();
|
void applyCmdOptions();
|
||||||
void applyCmdSettings();
|
void applyCmdSettings();
|
||||||
void attachSystemTables();
|
|
||||||
void processQueries();
|
void processQueries();
|
||||||
void setupUsers();
|
void setupUsers();
|
||||||
|
|
||||||
std::string getHelpHeader() const;
|
|
||||||
std::string getHelpFooter() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::unique_ptr<Context> context;
|
std::unique_ptr<Context> context;
|
||||||
|
|
||||||
|
@ -529,13 +529,13 @@ private:
|
|||||||
static constexpr CodePoint END = -2;
|
static constexpr CodePoint END = -2;
|
||||||
|
|
||||||
|
|
||||||
NGramHash hashContext(const CodePoint * begin, const CodePoint * end) const
|
static NGramHash hashContext(const CodePoint * begin, const CodePoint * end)
|
||||||
{
|
{
|
||||||
return CRC32Hash()(StringRef(reinterpret_cast<const char *>(begin), (end - begin) * sizeof(CodePoint)));
|
return CRC32Hash()(StringRef(reinterpret_cast<const char *>(begin), (end - begin) * sizeof(CodePoint)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// By the way, we don't have to use actual Unicode numbers. We use just arbitrary bijective mapping.
|
/// By the way, we don't have to use actual Unicode numbers. We use just arbitrary bijective mapping.
|
||||||
CodePoint readCodePoint(const char *& pos, const char * end)
|
static CodePoint readCodePoint(const char *& pos, const char * end)
|
||||||
{
|
{
|
||||||
size_t length = UTF8::seqLength(*pos);
|
size_t length = UTF8::seqLength(*pos);
|
||||||
|
|
||||||
@ -550,7 +550,7 @@ private:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool writeCodePoint(CodePoint code, char *& pos, const char * end)
|
static bool writeCodePoint(CodePoint code, char *& pos, const char * end)
|
||||||
{
|
{
|
||||||
size_t length
|
size_t length
|
||||||
= (code & 0xFF000000) ? 4
|
= (code & 0xFF000000) ? 4
|
||||||
|
@ -41,7 +41,7 @@ void ConfigPreprocessor::removeConfigurationsIf(
|
|||||||
std::vector<XMLConfigurationPtr> & configs,
|
std::vector<XMLConfigurationPtr> & configs,
|
||||||
ConfigPreprocessor::FilterType filter_type,
|
ConfigPreprocessor::FilterType filter_type,
|
||||||
const Strings & values,
|
const Strings & values,
|
||||||
bool leave) const
|
bool leave)
|
||||||
{
|
{
|
||||||
auto checker = [&filter_type, &values, &leave] (XMLConfigurationPtr & config)
|
auto checker = [&filter_type, &values, &leave] (XMLConfigurationPtr & config)
|
||||||
{
|
{
|
||||||
|
@ -39,11 +39,11 @@ private:
|
|||||||
|
|
||||||
/// Removes configurations that has a given value.
|
/// Removes configurations that has a given value.
|
||||||
/// If leave is true, the logic is reversed.
|
/// If leave is true, the logic is reversed.
|
||||||
void removeConfigurationsIf(
|
static void removeConfigurationsIf(
|
||||||
std::vector<XMLConfigurationPtr> & configs,
|
std::vector<XMLConfigurationPtr> & configs,
|
||||||
FilterType filter_type,
|
FilterType filter_type,
|
||||||
const Strings & values,
|
const Strings & values,
|
||||||
bool leave = false) const;
|
bool leave = false);
|
||||||
|
|
||||||
const Strings paths;
|
const Strings paths;
|
||||||
};
|
};
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include <Common/getNumberOfPhysicalCPUCores.h>
|
#include <Common/getNumberOfPhysicalCPUCores.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <common/getMemoryAmount.h>
|
#include <common/getMemoryAmount.h>
|
||||||
#include <Common/StringUtils/StringUtils.h>
|
#include <Common/StringUtils/StringUtils.h>
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ ReportBuilder::ReportBuilder(const std::string & server_version_)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ReportBuilder::getCurrentTime() const
|
static std::string getCurrentTime()
|
||||||
{
|
{
|
||||||
return DateLUT::instance().timeToString(time(nullptr));
|
return DateLUT::instance().timeToString(time(nullptr));
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ std::string ReportBuilder::buildFullReport(
|
|||||||
std::string ReportBuilder::buildCompactReport(
|
std::string ReportBuilder::buildCompactReport(
|
||||||
const PerformanceTestInfo & test_info,
|
const PerformanceTestInfo & test_info,
|
||||||
std::vector<TestStats> & stats,
|
std::vector<TestStats> & stats,
|
||||||
const std::vector<std::size_t> & queries_to_run) const
|
const std::vector<std::size_t> & queries_to_run)
|
||||||
{
|
{
|
||||||
FormatSettings settings;
|
FormatSettings settings;
|
||||||
std::ostringstream output;
|
std::ostringstream output;
|
||||||
|
@ -10,16 +10,16 @@ class ReportBuilder
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ReportBuilder(const std::string & server_version_);
|
ReportBuilder(const std::string & server_version_);
|
||||||
|
|
||||||
std::string buildFullReport(
|
std::string buildFullReport(
|
||||||
const PerformanceTestInfo & test_info,
|
const PerformanceTestInfo & test_info,
|
||||||
std::vector<TestStats> & stats,
|
std::vector<TestStats> & stats,
|
||||||
const std::vector<std::size_t> & queries_to_run) const;
|
const std::vector<std::size_t> & queries_to_run) const;
|
||||||
|
|
||||||
|
static std::string buildCompactReport(
|
||||||
std::string buildCompactReport(
|
|
||||||
const PerformanceTestInfo & test_info,
|
const PerformanceTestInfo & test_info,
|
||||||
std::vector<TestStats> & stats,
|
std::vector<TestStats> & stats,
|
||||||
const std::vector<std::size_t> & queries_to_run) const;
|
const std::vector<std::size_t> & queries_to_run);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string server_version;
|
std::string server_version;
|
||||||
@ -27,10 +27,6 @@ private:
|
|||||||
size_t num_cores;
|
size_t num_cores;
|
||||||
size_t num_threads;
|
size_t num_threads;
|
||||||
size_t ram;
|
size_t ram;
|
||||||
|
|
||||||
private:
|
|
||||||
std::string getCurrentTime() const;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include <Core/ExternalTable.h>
|
#include <Core/ExternalTable.h>
|
||||||
#include <Common/StringUtils/StringUtils.h>
|
#include <Common/StringUtils/StringUtils.h>
|
||||||
#include <Common/escapeForFileName.h>
|
#include <Common/escapeForFileName.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/CurrentThread.h>
|
#include <Common/CurrentThread.h>
|
||||||
#include <Common/setThreadName.h>
|
#include <Common/setThreadName.h>
|
||||||
#include <Common/config.h>
|
#include <Common/config.h>
|
||||||
|
@ -77,7 +77,7 @@ private:
|
|||||||
Poco::Net::HTTPServerResponse & response,
|
Poco::Net::HTTPServerResponse & response,
|
||||||
Output & used_output);
|
Output & used_output);
|
||||||
|
|
||||||
void pushDelayedResults(Output & used_output);
|
static void pushDelayedResults(Output & used_output);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <Common/config.h>
|
#include <Common/config.h>
|
||||||
#include <Poco/Net/TCPServerConnection.h>
|
#include <Poco/Net/TCPServerConnection.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/CurrentMetrics.h>
|
#include <Common/CurrentMetrics.h>
|
||||||
#include <Core/MySQLProtocol.h>
|
#include <Core/MySQLProtocol.h>
|
||||||
#include "IServer.h"
|
#include "IServer.h"
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include <Common/ZooKeeper/ZooKeeper.h>
|
#include <Common/ZooKeeper/ZooKeeper.h>
|
||||||
#include <Common/ZooKeeper/ZooKeeperNodeCache.h>
|
#include <Common/ZooKeeper/ZooKeeperNodeCache.h>
|
||||||
#include "config_core.h"
|
#include "config_core.h"
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/getMultipleKeysFromConfig.h>
|
#include <Common/getMultipleKeysFromConfig.h>
|
||||||
#include <Common/getNumberOfPhysicalCPUCores.h>
|
#include <Common/getNumberOfPhysicalCPUCores.h>
|
||||||
#include <Common/getExecutablePath.h>
|
#include <Common/getExecutablePath.h>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <Poco/Net/TCPServerConnection.h>
|
#include <Poco/Net/TCPServerConnection.h>
|
||||||
|
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/CurrentMetrics.h>
|
#include <Common/CurrentMetrics.h>
|
||||||
#include <Common/Stopwatch.h>
|
#include <Common/Stopwatch.h>
|
||||||
#include <Core/Protocol.h>
|
#include <Core/Protocol.h>
|
||||||
|
@ -1,2 +1,24 @@
|
|||||||
|
#include <new>
|
||||||
|
|
||||||
|
#include <common/phdr_cache.h>
|
||||||
|
|
||||||
|
|
||||||
int mainEntryClickHouseServer(int argc, char ** argv);
|
int mainEntryClickHouseServer(int argc, char ** argv);
|
||||||
int main(int argc_, char ** argv_) { return mainEntryClickHouseServer(argc_, argv_); }
|
|
||||||
|
/**
|
||||||
|
* This is the entry-point for the split build server. The initialization
|
||||||
|
* is copied from single-binary entry point in main.cpp.
|
||||||
|
*/
|
||||||
|
int main(int argc_, char ** argv_)
|
||||||
|
{
|
||||||
|
/// Reset new handler to default (that throws std::bad_alloc)
|
||||||
|
/// It is needed because LLVM library clobbers it.
|
||||||
|
std::set_new_handler(nullptr);
|
||||||
|
|
||||||
|
/// PHDR cache is required for query profiler to work reliably
|
||||||
|
/// It also speed up exception handling, but exceptions from dynamically loaded libraries (dlopen)
|
||||||
|
/// will work only after additional call of this function.
|
||||||
|
updatePHDRCache();
|
||||||
|
|
||||||
|
return mainEntryClickHouseServer(argc_, argv_);
|
||||||
|
}
|
||||||
|
@ -158,7 +158,7 @@ public:
|
|||||||
void revoke(const AccessFlags & access_to_revoke, const Helper & helper)
|
void revoke(const AccessFlags & access_to_revoke, const Helper & helper)
|
||||||
{
|
{
|
||||||
if constexpr (mode == NORMAL_REVOKE_MODE)
|
if constexpr (mode == NORMAL_REVOKE_MODE)
|
||||||
{
|
{ // NOLINT
|
||||||
if (level == TABLE_LEVEL)
|
if (level == TABLE_LEVEL)
|
||||||
removeExplicitGrantsRec(access_to_revoke);
|
removeExplicitGrantsRec(access_to_revoke);
|
||||||
else
|
else
|
||||||
@ -166,11 +166,12 @@ public:
|
|||||||
}
|
}
|
||||||
else if constexpr (mode == PARTIAL_REVOKE_MODE)
|
else if constexpr (mode == PARTIAL_REVOKE_MODE)
|
||||||
{
|
{
|
||||||
AccessFlags new_partial_revokes = access_to_revoke - explicit_grants;
|
|
||||||
if (level == TABLE_LEVEL)
|
if (level == TABLE_LEVEL)
|
||||||
removeExplicitGrantsRec(access_to_revoke);
|
removeExplicitGrantsRec(access_to_revoke);
|
||||||
else
|
else
|
||||||
removeExplicitGrants(access_to_revoke);
|
removeExplicitGrants(access_to_revoke);
|
||||||
|
|
||||||
|
AccessFlags new_partial_revokes = access_to_revoke - explicit_grants;
|
||||||
removePartialRevokesRec(new_partial_revokes);
|
removePartialRevokesRec(new_partial_revokes);
|
||||||
partial_revokes |= new_partial_revokes;
|
partial_revokes |= new_partial_revokes;
|
||||||
}
|
}
|
||||||
|
@ -379,7 +379,7 @@ void IAccessStorage::throwNotFound(std::type_index type, const String & name) co
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void IAccessStorage::throwBadCast(const UUID & id, std::type_index type, const String & name, std::type_index required_type) const
|
void IAccessStorage::throwBadCast(const UUID & id, std::type_index type, const String & name, std::type_index required_type)
|
||||||
{
|
{
|
||||||
throw Exception(
|
throw Exception(
|
||||||
"ID {" + toString(id) + "}: " + getTypeName(type) + backQuote(name) + " expected to be of type " + getTypeName(required_type),
|
"ID {" + toString(id) + "}: " + getTypeName(type) + backQuote(name) + " expected to be of type " + getTypeName(required_type),
|
||||||
|
@ -151,8 +151,9 @@ protected:
|
|||||||
static String getTypeName(std::type_index type) { return IAccessEntity::getTypeName(type); }
|
static String getTypeName(std::type_index type) { return IAccessEntity::getTypeName(type); }
|
||||||
[[noreturn]] void throwNotFound(const UUID & id) const;
|
[[noreturn]] void throwNotFound(const UUID & id) const;
|
||||||
[[noreturn]] void throwNotFound(std::type_index type, const String & name) const;
|
[[noreturn]] void throwNotFound(std::type_index type, const String & name) const;
|
||||||
[[noreturn]] void throwBadCast(const UUID & id, std::type_index type, const String & name, std::type_index required_type) const;
|
[[noreturn]] static void throwBadCast(const UUID & id, std::type_index type, const String & name, std::type_index required_type);
|
||||||
[[noreturn]] void throwIDCollisionCannotInsert(const UUID & id, std::type_index type, const String & name, std::type_index existing_type, const String & existing_name) const;
|
[[noreturn]] void throwIDCollisionCannotInsert(
|
||||||
|
const UUID & id, std::type_index type, const String & name, std::type_index existing_type, const String & existing_name) const;
|
||||||
[[noreturn]] void throwNameCollisionCannotInsert(std::type_index type, const String & name) const;
|
[[noreturn]] void throwNameCollisionCannotInsert(std::type_index type, const String & name) const;
|
||||||
[[noreturn]] void throwNameCollisionCannotRename(std::type_index type, const String & old_name, const String & new_name) const;
|
[[noreturn]] void throwNameCollisionCannotRename(std::type_index type, const String & old_name, const String & new_name) const;
|
||||||
[[noreturn]] void throwReadonlyCannotInsert(std::type_index type, const String & name) const;
|
[[noreturn]] void throwReadonlyCannotInsert(std::type_index type, const String & name) const;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <Poco/Net/DNS.h>
|
#include <Poco/Net/DNS.h>
|
||||||
|
|
||||||
#include <Common/BitHelpers.h>
|
#include <Common/BitHelpers.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/isLocalAddress.h>
|
#include <Common/isLocalAddress.h>
|
||||||
#include <Common/ProfileEvents.h>
|
#include <Common/ProfileEvents.h>
|
||||||
#include <Core/Settings.h>
|
#include <Core/Settings.h>
|
||||||
|
@ -576,8 +576,9 @@ ColumnAggregateFunction::MutablePtr ColumnAggregateFunction::createView() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
ColumnAggregateFunction::ColumnAggregateFunction(const ColumnAggregateFunction & src_)
|
ColumnAggregateFunction::ColumnAggregateFunction(const ColumnAggregateFunction & src_)
|
||||||
: foreign_arenas(concatArenas(src_.foreign_arenas, src_.my_arena)),
|
: COWHelper<IColumn, ColumnAggregateFunction>(src_),
|
||||||
func(src_.func), src(src_.getPtr()), data(src_.data.begin(), src_.data.end())
|
foreign_arenas(concatArenas(src_.foreign_arenas, src_.my_arena)),
|
||||||
|
func(src_.func), src(src_.getPtr()), data(src_.data.begin(), src_.data.end())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,12 @@ namespace ErrorCodes
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
void checkColumn(const IColumn & column)
|
||||||
|
{
|
||||||
|
if (!dynamic_cast<const IColumnUnique *>(&column))
|
||||||
|
throw Exception("ColumnUnique expected as an argument of ColumnLowCardinality.", ErrorCodes::ILLEGAL_COLUMN);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
PaddedPODArray<T> * getIndexesData(IColumn & indexes)
|
PaddedPODArray<T> * getIndexesData(IColumn & indexes)
|
||||||
{
|
{
|
||||||
@ -651,13 +657,6 @@ ColumnLowCardinality::Dictionary::Dictionary(ColumnPtr column_unique_, bool is_s
|
|||||||
checkColumn(*column_unique);
|
checkColumn(*column_unique);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColumnLowCardinality::Dictionary::checkColumn(const IColumn & column)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!dynamic_cast<const IColumnUnique *>(&column))
|
|
||||||
throw Exception("ColumnUnique expected as an argument of ColumnLowCardinality.", ErrorCodes::ILLEGAL_COLUMN);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ColumnLowCardinality::Dictionary::setShared(const ColumnPtr & column_unique_)
|
void ColumnLowCardinality::Dictionary::setShared(const ColumnPtr & column_unique_)
|
||||||
{
|
{
|
||||||
checkColumn(*column_unique_);
|
checkColumn(*column_unique_);
|
||||||
|
@ -275,8 +275,6 @@ private:
|
|||||||
private:
|
private:
|
||||||
WrappedPtr column_unique;
|
WrappedPtr column_unique;
|
||||||
bool shared = false;
|
bool shared = false;
|
||||||
|
|
||||||
void checkColumn(const IColumn & column);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Dictionary dictionary;
|
Dictionary dictionary;
|
||||||
|
@ -219,7 +219,7 @@ void ConfigProcessor::merge(XMLDocumentPtr config, XMLDocumentPtr with)
|
|||||||
mergeRecursive(config, config_root, with_root);
|
mergeRecursive(config, config_root, with_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ConfigProcessor::layerFromHost()
|
static std::string layerFromHost()
|
||||||
{
|
{
|
||||||
utsname buf;
|
utsname buf;
|
||||||
if (uname(&buf))
|
if (uname(&buf))
|
||||||
|
@ -97,8 +97,8 @@ public:
|
|||||||
/// If preprocessed_dir is empty - calculate from loaded_config.path + /preprocessed_configs/
|
/// If preprocessed_dir is empty - calculate from loaded_config.path + /preprocessed_configs/
|
||||||
void savePreprocessedConfig(const LoadedConfig & loaded_config, std::string preprocessed_dir);
|
void savePreprocessedConfig(const LoadedConfig & loaded_config, std::string preprocessed_dir);
|
||||||
|
|
||||||
/// Set path of main config.xml . It will be cutted from all configs placed to preprocessed_configs/
|
/// Set path of main config.xml. It will be cutted from all configs placed to preprocessed_configs/
|
||||||
void setConfigPath(const std::string & config_path);
|
static void setConfigPath(const std::string & config_path);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using Files = std::vector<std::string>;
|
using Files = std::vector<std::string>;
|
||||||
@ -131,8 +131,6 @@ private:
|
|||||||
|
|
||||||
void merge(XMLDocumentPtr config, XMLDocumentPtr with);
|
void merge(XMLDocumentPtr config, XMLDocumentPtr with);
|
||||||
|
|
||||||
std::string layerFromHost();
|
|
||||||
|
|
||||||
void doIncludesRecursive(
|
void doIncludesRecursive(
|
||||||
XMLDocumentPtr config,
|
XMLDocumentPtr config,
|
||||||
XMLDocumentPtr include_from,
|
XMLDocumentPtr include_from,
|
||||||
|
@ -6,14 +6,11 @@
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
||||||
|
|
||||||
namespace StopWatchDetail
|
inline UInt64 clock_gettime_ns(clockid_t clock_type = CLOCK_MONOTONIC)
|
||||||
{
|
{
|
||||||
inline UInt64 nanoseconds(clockid_t clock_type)
|
struct timespec ts;
|
||||||
{
|
clock_gettime(clock_type, &ts);
|
||||||
struct timespec ts;
|
return UInt64(ts.tv_sec * 1000000000LL + ts.tv_nsec);
|
||||||
clock_gettime(clock_type, &ts);
|
|
||||||
return UInt64(ts.tv_sec * 1000000000LL + ts.tv_nsec);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -44,7 +41,7 @@ private:
|
|||||||
clockid_t clock_type;
|
clockid_t clock_type;
|
||||||
bool is_running = false;
|
bool is_running = false;
|
||||||
|
|
||||||
UInt64 nanoseconds() const { return StopWatchDetail::nanoseconds(clock_type); }
|
UInt64 nanoseconds() const { return clock_gettime_ns(clock_type); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -131,7 +128,7 @@ private:
|
|||||||
clockid_t clock_type;
|
clockid_t clock_type;
|
||||||
|
|
||||||
/// Most significant bit is a lock. When it is set, compareAndRestartDeferred method will return false.
|
/// Most significant bit is a lock. When it is set, compareAndRestartDeferred method will return false.
|
||||||
UInt64 nanoseconds() const { return StopWatchDetail::nanoseconds(clock_type) & 0x7FFFFFFFFFFFFFFFULL; }
|
UInt64 nanoseconds() const { return clock_gettime_ns(clock_type) & 0x7FFFFFFFFFFFFFFFULL; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ void TraceCollector::run()
|
|||||||
|
|
||||||
if (trace_log)
|
if (trace_log)
|
||||||
{
|
{
|
||||||
TraceLogElement element{std::time(nullptr), trace_type, thread_id, query_id, trace, size};
|
TraceLogElement element{std::time(nullptr), clock_gettime_ns(), trace_type, thread_id, query_id, trace, size};
|
||||||
trace_log->add(element);
|
trace_log->add(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,15 +75,11 @@ static int wcwidth(wchar_t wc)
|
|||||||
switch (width)
|
switch (width)
|
||||||
{
|
{
|
||||||
case widechar_nonprint:
|
case widechar_nonprint:
|
||||||
[[fallthrough]];
|
|
||||||
case widechar_combining:
|
case widechar_combining:
|
||||||
[[fallthrough]];
|
|
||||||
case widechar_unassigned:
|
case widechar_unassigned:
|
||||||
return 0;
|
return 0;
|
||||||
case widechar_ambiguous:
|
case widechar_ambiguous:
|
||||||
[[fallthrough]];
|
|
||||||
case widechar_private_use:
|
case widechar_private_use:
|
||||||
[[fallthrough]];
|
|
||||||
case widechar_widened_in_9:
|
case widechar_widened_in_9:
|
||||||
return 1;
|
return 1;
|
||||||
default:
|
default:
|
||||||
|
@ -131,7 +131,7 @@ TEST(zkutil, MultiAsync)
|
|||||||
/// The test is quite heavy. It is normal if session is expired during this test.
|
/// The test is quite heavy. It is normal if session is expired during this test.
|
||||||
/// If we don't check that, the test will be flacky.
|
/// If we don't check that, the test will be flacky.
|
||||||
|
|
||||||
if (e.code != Coordination::ZSESSIONEXPIRED)
|
if (e.code != Coordination::ZSESSIONEXPIRED && e.code != Coordination::ZCONNECTIONLOSS)
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -519,7 +519,7 @@ public:
|
|||||||
CODEC_WITHOUT_DATA_TYPE,
|
CODEC_WITHOUT_DATA_TYPE,
|
||||||
};
|
};
|
||||||
|
|
||||||
CompressionCodecPtr makeCodec(MakeCodecParam with_data_type)
|
static CompressionCodecPtr makeCodec(MakeCodecParam with_data_type)
|
||||||
{
|
{
|
||||||
const auto & codec_string = std::get<0>(GetParam()).codec_statement;
|
const auto & codec_string = std::get<0>(GetParam()).codec_statement;
|
||||||
const auto & data_type = with_data_type == CODEC_WITH_DATA_TYPE ? std::get<1>(GetParam()).data_type : nullptr;
|
const auto & data_type = with_data_type == CODEC_WITH_DATA_TYPE ? std::get<1>(GetParam()).data_type : nullptr;
|
||||||
@ -527,7 +527,7 @@ public:
|
|||||||
return ::makeCodec(codec_string, data_type);
|
return ::makeCodec(codec_string, data_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void testTranscoding(ICompressionCodec & codec)
|
static void testTranscoding(ICompressionCodec & codec)
|
||||||
{
|
{
|
||||||
NoOpTimer timer;
|
NoOpTimer timer;
|
||||||
::testTranscoding(timer, codec, std::get<1>(GetParam()), std::get<0>(GetParam()).expected_compression_ratio);
|
::testTranscoding(timer, codec, std::get<1>(GetParam()), std::get<0>(GetParam()).expected_compression_ratio);
|
||||||
|
@ -208,7 +208,7 @@ void SettingMaxThreads::setAuto()
|
|||||||
is_auto = true;
|
is_auto = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt64 SettingMaxThreads::getAutoValue() const
|
UInt64 SettingMaxThreads::getAutoValue()
|
||||||
{
|
{
|
||||||
static auto res = getNumberOfPhysicalCPUCores();
|
static auto res = getNumberOfPhysicalCPUCores();
|
||||||
return res;
|
return res;
|
||||||
|
@ -91,7 +91,7 @@ struct SettingMaxThreads
|
|||||||
void deserialize(ReadBuffer & buf, SettingsBinaryFormat format);
|
void deserialize(ReadBuffer & buf, SettingsBinaryFormat format);
|
||||||
|
|
||||||
void setAuto();
|
void setAuto();
|
||||||
UInt64 getAutoValue() const;
|
static UInt64 getAutoValue();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,6 +32,101 @@ namespace ErrorCodes
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void checkCalculated(const ColumnWithTypeAndName & col_read,
|
||||||
|
const ColumnWithTypeAndName & col_defaults,
|
||||||
|
size_t defaults_needed)
|
||||||
|
{
|
||||||
|
size_t column_size = col_read.column->size();
|
||||||
|
|
||||||
|
if (column_size != col_defaults.column->size())
|
||||||
|
throw Exception("Mismatch column sizes while adding defaults", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
|
if (column_size < defaults_needed)
|
||||||
|
throw Exception("Unexpected defaults count", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
||||||
|
|
||||||
|
if (!col_read.type->equals(*col_defaults.type))
|
||||||
|
throw Exception("Mismach column types while adding defaults", ErrorCodes::TYPE_MISMATCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mixNumberColumns(
|
||||||
|
TypeIndex type_idx,
|
||||||
|
MutableColumnPtr & column_mixed,
|
||||||
|
const ColumnPtr & col_defaults,
|
||||||
|
const BlockMissingValues::RowsBitMask & defaults_mask)
|
||||||
|
{
|
||||||
|
auto call = [&](const auto & types) -> bool
|
||||||
|
{
|
||||||
|
using Types = std::decay_t<decltype(types)>;
|
||||||
|
using DataType = typename Types::LeftType;
|
||||||
|
|
||||||
|
if constexpr (!std::is_same_v<DataType, DataTypeString> && !std::is_same_v<DataType, DataTypeFixedString>)
|
||||||
|
{
|
||||||
|
using FieldType = typename DataType::FieldType;
|
||||||
|
using ColVecType = std::conditional_t<IsDecimalNumber<FieldType>, ColumnDecimal<FieldType>, ColumnVector<FieldType>>;
|
||||||
|
|
||||||
|
auto col_read = typeid_cast<ColVecType *>(column_mixed.get());
|
||||||
|
if (!col_read)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
typename ColVecType::Container & dst = col_read->getData();
|
||||||
|
|
||||||
|
if (auto const_col_defs = checkAndGetColumnConst<ColVecType>(col_defaults.get()))
|
||||||
|
{
|
||||||
|
FieldType value = checkAndGetColumn<ColVecType>(const_col_defs->getDataColumnPtr().get())->getData()[0];
|
||||||
|
|
||||||
|
for (size_t i = 0; i < defaults_mask.size(); ++i)
|
||||||
|
if (defaults_mask[i])
|
||||||
|
dst[i] = value;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (auto col_defs = checkAndGetColumn<ColVecType>(col_defaults.get()))
|
||||||
|
{
|
||||||
|
auto & src = col_defs->getData();
|
||||||
|
for (size_t i = 0; i < defaults_mask.size(); ++i)
|
||||||
|
if (defaults_mask[i])
|
||||||
|
dst[i] = src[i];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!callOnIndexAndDataType<void>(type_idx, call))
|
||||||
|
throw Exception("Unexpected type on mixNumberColumns", ErrorCodes::LOGICAL_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static MutableColumnPtr mixColumns(const ColumnWithTypeAndName & col_read,
|
||||||
|
const ColumnWithTypeAndName & col_defaults,
|
||||||
|
const BlockMissingValues::RowsBitMask & defaults_mask)
|
||||||
|
{
|
||||||
|
size_t column_size = col_read.column->size();
|
||||||
|
size_t defaults_needed = defaults_mask.size();
|
||||||
|
|
||||||
|
MutableColumnPtr column_mixed = col_read.column->cloneEmpty();
|
||||||
|
|
||||||
|
for (size_t i = 0; i < defaults_needed; ++i)
|
||||||
|
{
|
||||||
|
if (defaults_mask[i])
|
||||||
|
{
|
||||||
|
if (isColumnConst(*col_defaults.column))
|
||||||
|
column_mixed->insert((*col_defaults.column)[i]);
|
||||||
|
else
|
||||||
|
column_mixed->insertFrom(*col_defaults.column, i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
column_mixed->insertFrom(*col_read.column, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = defaults_needed; i < column_size; ++i)
|
||||||
|
column_mixed->insertFrom(*col_read.column, i);
|
||||||
|
|
||||||
|
return column_mixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
AddingDefaultsBlockInputStream::AddingDefaultsBlockInputStream(const BlockInputStreamPtr & input,
|
AddingDefaultsBlockInputStream::AddingDefaultsBlockInputStream(const BlockInputStreamPtr & input,
|
||||||
const ColumnDefaults & column_defaults_,
|
const ColumnDefaults & column_defaults_,
|
||||||
const Context & context_)
|
const Context & context_)
|
||||||
@ -124,95 +219,4 @@ Block AddingDefaultsBlockInputStream::readImpl()
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddingDefaultsBlockInputStream::checkCalculated(const ColumnWithTypeAndName & col_read,
|
|
||||||
const ColumnWithTypeAndName & col_defaults,
|
|
||||||
size_t defaults_needed) const
|
|
||||||
{
|
|
||||||
size_t column_size = col_read.column->size();
|
|
||||||
|
|
||||||
if (column_size != col_defaults.column->size())
|
|
||||||
throw Exception("Mismatch column sizes while adding defaults", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
|
||||||
|
|
||||||
if (column_size < defaults_needed)
|
|
||||||
throw Exception("Unexpected defaults count", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
|
|
||||||
|
|
||||||
if (!col_read.type->equals(*col_defaults.type))
|
|
||||||
throw Exception("Mismach column types while adding defaults", ErrorCodes::TYPE_MISMATCH);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddingDefaultsBlockInputStream::mixNumberColumns(TypeIndex type_idx, MutableColumnPtr & column_mixed, const ColumnPtr & col_defaults,
|
|
||||||
const BlockMissingValues::RowsBitMask & defaults_mask) const
|
|
||||||
{
|
|
||||||
auto call = [&](const auto & types) -> bool
|
|
||||||
{
|
|
||||||
using Types = std::decay_t<decltype(types)>;
|
|
||||||
using DataType = typename Types::LeftType;
|
|
||||||
|
|
||||||
if constexpr (!std::is_same_v<DataType, DataTypeString> && !std::is_same_v<DataType, DataTypeFixedString>)
|
|
||||||
{
|
|
||||||
using FieldType = typename DataType::FieldType;
|
|
||||||
using ColVecType = std::conditional_t<IsDecimalNumber<FieldType>, ColumnDecimal<FieldType>, ColumnVector<FieldType>>;
|
|
||||||
|
|
||||||
auto col_read = typeid_cast<ColVecType *>(column_mixed.get());
|
|
||||||
if (!col_read)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
typename ColVecType::Container & dst = col_read->getData();
|
|
||||||
|
|
||||||
if (auto const_col_defs = checkAndGetColumnConst<ColVecType>(col_defaults.get()))
|
|
||||||
{
|
|
||||||
FieldType value = checkAndGetColumn<ColVecType>(const_col_defs->getDataColumnPtr().get())->getData()[0];
|
|
||||||
|
|
||||||
for (size_t i = 0; i < defaults_mask.size(); ++i)
|
|
||||||
if (defaults_mask[i])
|
|
||||||
dst[i] = value;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (auto col_defs = checkAndGetColumn<ColVecType>(col_defaults.get()))
|
|
||||||
{
|
|
||||||
auto & src = col_defs->getData();
|
|
||||||
for (size_t i = 0; i < defaults_mask.size(); ++i)
|
|
||||||
if (defaults_mask[i])
|
|
||||||
dst[i] = src[i];
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!callOnIndexAndDataType<void>(type_idx, call))
|
|
||||||
throw Exception("Unexpected type on mixNumberColumns", ErrorCodes::LOGICAL_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
MutableColumnPtr AddingDefaultsBlockInputStream::mixColumns(const ColumnWithTypeAndName & col_read,
|
|
||||||
const ColumnWithTypeAndName & col_defaults,
|
|
||||||
const BlockMissingValues::RowsBitMask & defaults_mask) const
|
|
||||||
{
|
|
||||||
size_t column_size = col_read.column->size();
|
|
||||||
size_t defaults_needed = defaults_mask.size();
|
|
||||||
|
|
||||||
MutableColumnPtr column_mixed = col_read.column->cloneEmpty();
|
|
||||||
|
|
||||||
for (size_t i = 0; i < defaults_needed; ++i)
|
|
||||||
{
|
|
||||||
if (defaults_mask[i])
|
|
||||||
{
|
|
||||||
if (isColumnConst(*col_defaults.column))
|
|
||||||
column_mixed->insert((*col_defaults.column)[i]);
|
|
||||||
else
|
|
||||||
column_mixed->insertFrom(*col_defaults.column, i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
column_mixed->insertFrom(*col_read.column, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = defaults_needed; i < column_size; ++i)
|
|
||||||
column_mixed->insertFrom(*col_read.column, i);
|
|
||||||
|
|
||||||
return column_mixed;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,12 +27,6 @@ private:
|
|||||||
Block header;
|
Block header;
|
||||||
const ColumnDefaults column_defaults;
|
const ColumnDefaults column_defaults;
|
||||||
const Context & context;
|
const Context & context;
|
||||||
|
|
||||||
void checkCalculated(const ColumnWithTypeAndName & col_read, const ColumnWithTypeAndName & col_defaults, size_t needed) const;
|
|
||||||
MutableColumnPtr mixColumns(const ColumnWithTypeAndName & col_read, const ColumnWithTypeAndName & col_defaults,
|
|
||||||
const BlockMissingValues::RowsBitMask & defaults_mask) const;
|
|
||||||
void mixNumberColumns(TypeIndex type_idx, MutableColumnPtr & column_mixed, const ColumnPtr & col_defaults,
|
|
||||||
const BlockMissingValues::RowsBitMask & defaults_mask) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,89 @@ namespace
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns true if merge result is not empty
|
||||||
|
bool mergeMap(const SummingSortedBlockInputStream::MapDescription & desc, Row & row, SortCursor & cursor)
|
||||||
|
{
|
||||||
|
/// Strongly non-optimal.
|
||||||
|
|
||||||
|
Row & left = row;
|
||||||
|
Row right(left.size());
|
||||||
|
|
||||||
|
for (size_t col_num : desc.key_col_nums)
|
||||||
|
right[col_num] = (*cursor->all_columns[col_num])[cursor->pos].template get<Array>();
|
||||||
|
|
||||||
|
for (size_t col_num : desc.val_col_nums)
|
||||||
|
right[col_num] = (*cursor->all_columns[col_num])[cursor->pos].template get<Array>();
|
||||||
|
|
||||||
|
auto at_ith_column_jth_row = [&](const Row & matrix, size_t i, size_t j) -> const Field &
|
||||||
|
{
|
||||||
|
return matrix[i].get<Array>()[j];
|
||||||
|
};
|
||||||
|
|
||||||
|
auto tuple_of_nth_columns_at_jth_row = [&](const Row & matrix, const ColumnNumbers & col_nums, size_t j) -> Array
|
||||||
|
{
|
||||||
|
size_t size = col_nums.size();
|
||||||
|
Array res(size);
|
||||||
|
for (size_t col_num_index = 0; col_num_index < size; ++col_num_index)
|
||||||
|
res[col_num_index] = at_ith_column_jth_row(matrix, col_nums[col_num_index], j);
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<Array, Array> merged;
|
||||||
|
|
||||||
|
auto accumulate = [](Array & dst, const Array & src)
|
||||||
|
{
|
||||||
|
bool has_non_zero = false;
|
||||||
|
size_t size = dst.size();
|
||||||
|
for (size_t i = 0; i < size; ++i)
|
||||||
|
if (applyVisitor(FieldVisitorSum(src[i]), dst[i]))
|
||||||
|
has_non_zero = true;
|
||||||
|
return has_non_zero;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto merge = [&](const Row & matrix)
|
||||||
|
{
|
||||||
|
size_t rows = matrix[desc.key_col_nums[0]].get<Array>().size();
|
||||||
|
|
||||||
|
for (size_t j = 0; j < rows; ++j)
|
||||||
|
{
|
||||||
|
Array key = tuple_of_nth_columns_at_jth_row(matrix, desc.key_col_nums, j);
|
||||||
|
Array value = tuple_of_nth_columns_at_jth_row(matrix, desc.val_col_nums, j);
|
||||||
|
|
||||||
|
auto it = merged.find(key);
|
||||||
|
if (merged.end() == it)
|
||||||
|
merged.emplace(std::move(key), std::move(value));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!accumulate(it->second, value))
|
||||||
|
merged.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
merge(left);
|
||||||
|
merge(right);
|
||||||
|
|
||||||
|
for (size_t col_num : desc.key_col_nums)
|
||||||
|
row[col_num] = Array(merged.size());
|
||||||
|
for (size_t col_num : desc.val_col_nums)
|
||||||
|
row[col_num] = Array(merged.size());
|
||||||
|
|
||||||
|
size_t row_num = 0;
|
||||||
|
for (const auto & key_value : merged)
|
||||||
|
{
|
||||||
|
for (size_t col_num_index = 0, size = desc.key_col_nums.size(); col_num_index < size; ++col_num_index)
|
||||||
|
row[desc.key_col_nums[col_num_index]].get<Array>()[row_num] = key_value.first[col_num_index];
|
||||||
|
|
||||||
|
for (size_t col_num_index = 0, size = desc.val_col_nums.size(); col_num_index < size; ++col_num_index)
|
||||||
|
row[desc.val_col_nums[col_num_index]].get<Array>()[row_num] = key_value.second[col_num_index];
|
||||||
|
|
||||||
|
++row_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
return row_num != 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -401,89 +484,6 @@ void SummingSortedBlockInputStream::merge(MutableColumns & merged_columns, Sorti
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SummingSortedBlockInputStream::mergeMap(const MapDescription & desc, Row & row, SortCursor & cursor)
|
|
||||||
{
|
|
||||||
/// Strongly non-optimal.
|
|
||||||
|
|
||||||
Row & left = row;
|
|
||||||
Row right(left.size());
|
|
||||||
|
|
||||||
for (size_t col_num : desc.key_col_nums)
|
|
||||||
right[col_num] = (*cursor->all_columns[col_num])[cursor->pos].template get<Array>();
|
|
||||||
|
|
||||||
for (size_t col_num : desc.val_col_nums)
|
|
||||||
right[col_num] = (*cursor->all_columns[col_num])[cursor->pos].template get<Array>();
|
|
||||||
|
|
||||||
auto at_ith_column_jth_row = [&](const Row & matrix, size_t i, size_t j) -> const Field &
|
|
||||||
{
|
|
||||||
return matrix[i].get<Array>()[j];
|
|
||||||
};
|
|
||||||
|
|
||||||
auto tuple_of_nth_columns_at_jth_row = [&](const Row & matrix, const ColumnNumbers & col_nums, size_t j) -> Array
|
|
||||||
{
|
|
||||||
size_t size = col_nums.size();
|
|
||||||
Array res(size);
|
|
||||||
for (size_t col_num_index = 0; col_num_index < size; ++col_num_index)
|
|
||||||
res[col_num_index] = at_ith_column_jth_row(matrix, col_nums[col_num_index], j);
|
|
||||||
return res;
|
|
||||||
};
|
|
||||||
|
|
||||||
std::map<Array, Array> merged;
|
|
||||||
|
|
||||||
auto accumulate = [](Array & dst, const Array & src)
|
|
||||||
{
|
|
||||||
bool has_non_zero = false;
|
|
||||||
size_t size = dst.size();
|
|
||||||
for (size_t i = 0; i < size; ++i)
|
|
||||||
if (applyVisitor(FieldVisitorSum(src[i]), dst[i]))
|
|
||||||
has_non_zero = true;
|
|
||||||
return has_non_zero;
|
|
||||||
};
|
|
||||||
|
|
||||||
auto merge = [&](const Row & matrix)
|
|
||||||
{
|
|
||||||
size_t rows = matrix[desc.key_col_nums[0]].get<Array>().size();
|
|
||||||
|
|
||||||
for (size_t j = 0; j < rows; ++j)
|
|
||||||
{
|
|
||||||
Array key = tuple_of_nth_columns_at_jth_row(matrix, desc.key_col_nums, j);
|
|
||||||
Array value = tuple_of_nth_columns_at_jth_row(matrix, desc.val_col_nums, j);
|
|
||||||
|
|
||||||
auto it = merged.find(key);
|
|
||||||
if (merged.end() == it)
|
|
||||||
merged.emplace(std::move(key), std::move(value));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!accumulate(it->second, value))
|
|
||||||
merged.erase(it);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
merge(left);
|
|
||||||
merge(right);
|
|
||||||
|
|
||||||
for (size_t col_num : desc.key_col_nums)
|
|
||||||
row[col_num] = Array(merged.size());
|
|
||||||
for (size_t col_num : desc.val_col_nums)
|
|
||||||
row[col_num] = Array(merged.size());
|
|
||||||
|
|
||||||
size_t row_num = 0;
|
|
||||||
for (const auto & key_value : merged)
|
|
||||||
{
|
|
||||||
for (size_t col_num_index = 0, size = desc.key_col_nums.size(); col_num_index < size; ++col_num_index)
|
|
||||||
row[desc.key_col_nums[col_num_index]].get<Array>()[row_num] = key_value.first[col_num_index];
|
|
||||||
|
|
||||||
for (size_t col_num_index = 0, size = desc.val_col_nums.size(); col_num_index < size; ++col_num_index)
|
|
||||||
row[desc.val_col_nums[col_num_index]].get<Array>()[row_num] = key_value.second[col_num_index];
|
|
||||||
|
|
||||||
++row_num;
|
|
||||||
}
|
|
||||||
|
|
||||||
return row_num != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SummingSortedBlockInputStream::addRow(SortCursor & cursor)
|
void SummingSortedBlockInputStream::addRow(SortCursor & cursor)
|
||||||
{
|
{
|
||||||
for (auto & desc : columns_to_aggregate)
|
for (auto & desc : columns_to_aggregate)
|
||||||
|
@ -35,6 +35,13 @@ public:
|
|||||||
|
|
||||||
String getName() const override { return "SummingSorted"; }
|
String getName() const override { return "SummingSorted"; }
|
||||||
|
|
||||||
|
/// Stores numbers of key-columns and value-columns.
|
||||||
|
struct MapDescription
|
||||||
|
{
|
||||||
|
std::vector<size_t> key_col_nums;
|
||||||
|
std::vector<size_t> val_col_nums;
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Can return 1 more records than max_block_size.
|
/// Can return 1 more records than max_block_size.
|
||||||
Block readImpl() override;
|
Block readImpl() override;
|
||||||
@ -120,13 +127,6 @@ private:
|
|||||||
AggregateDescription(const AggregateDescription &) = delete;
|
AggregateDescription(const AggregateDescription &) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Stores numbers of key-columns and value-columns.
|
|
||||||
struct MapDescription
|
|
||||||
{
|
|
||||||
std::vector<size_t> key_col_nums;
|
|
||||||
std::vector<size_t> val_col_nums;
|
|
||||||
};
|
|
||||||
|
|
||||||
std::vector<AggregateDescription> columns_to_aggregate;
|
std::vector<AggregateDescription> columns_to_aggregate;
|
||||||
std::vector<MapDescription> maps_to_sum;
|
std::vector<MapDescription> maps_to_sum;
|
||||||
|
|
||||||
@ -146,9 +146,6 @@ private:
|
|||||||
/// Insert the summed row for the current group into the result and updates some of per-block flags if the row is not "zero".
|
/// Insert the summed row for the current group into the result and updates some of per-block flags if the row is not "zero".
|
||||||
void insertCurrentRowIfNeeded(MutableColumns & merged_columns);
|
void insertCurrentRowIfNeeded(MutableColumns & merged_columns);
|
||||||
|
|
||||||
/// Returns true if merge result is not empty
|
|
||||||
bool mergeMap(const MapDescription & desc, Row & row, SortCursor & cursor);
|
|
||||||
|
|
||||||
// Add the row under the cursor to the `row`.
|
// Add the row under the cursor to the `row`.
|
||||||
void addRow(SortCursor & cursor);
|
void addRow(SortCursor & cursor);
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
class GeoDictionariesLoader
|
class GeoDictionariesLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::unique_ptr<RegionsHierarchies> reloadRegionsHierarchies(const Poco::Util::AbstractConfiguration & config);
|
static std::unique_ptr<RegionsHierarchies> reloadRegionsHierarchies(const Poco::Util::AbstractConfiguration & config);
|
||||||
|
static std::unique_ptr<RegionsNames> reloadRegionsNames(const Poco::Util::AbstractConfiguration & config);
|
||||||
std::unique_ptr<RegionsNames> reloadRegionsNames(const Poco::Util::AbstractConfiguration & config);
|
|
||||||
};
|
};
|
||||||
|
@ -34,6 +34,18 @@ namespace ErrorCodes
|
|||||||
extern const int NOT_IMPLEMENTED;
|
extern const int NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void validateKeyTypes(const DataTypes & key_types)
|
||||||
|
{
|
||||||
|
if (key_types.size() != 1)
|
||||||
|
throw Exception{"Expected a single IP address", ErrorCodes::TYPE_MISMATCH};
|
||||||
|
|
||||||
|
const auto & actual_type = key_types[0]->getName();
|
||||||
|
|
||||||
|
if (actual_type != "UInt32" && actual_type != "FixedString(16)")
|
||||||
|
throw Exception{"Key does not match, expected either UInt32 or FixedString(16)", ErrorCodes::TYPE_MISMATCH};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TrieDictionary::TrieDictionary(
|
TrieDictionary::TrieDictionary(
|
||||||
const std::string & database_,
|
const std::string & database_,
|
||||||
const std::string & name_,
|
const std::string & name_,
|
||||||
@ -416,17 +428,6 @@ void TrieDictionary::calculateBytesAllocated()
|
|||||||
bytes_allocated += btrie_allocated(trie);
|
bytes_allocated += btrie_allocated(trie);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrieDictionary::validateKeyTypes(const DataTypes & key_types) const
|
|
||||||
{
|
|
||||||
if (key_types.size() != 1)
|
|
||||||
throw Exception{"Expected a single IP address", ErrorCodes::TYPE_MISMATCH};
|
|
||||||
|
|
||||||
const auto & actual_type = key_types[0]->getName();
|
|
||||||
|
|
||||||
if (actual_type != "UInt32" && actual_type != "FixedString(16)")
|
|
||||||
throw Exception{"Key does not match, expected either UInt32 or FixedString(16)", ErrorCodes::TYPE_MISMATCH};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void TrieDictionary::createAttributeImpl(Attribute & attribute, const Field & null_value)
|
void TrieDictionary::createAttributeImpl(Attribute & attribute, const Field & null_value)
|
||||||
|
@ -207,8 +207,6 @@ private:
|
|||||||
|
|
||||||
void calculateBytesAllocated();
|
void calculateBytesAllocated();
|
||||||
|
|
||||||
void validateKeyTypes(const DataTypes & key_types) const;
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void createAttributeImpl(Attribute & attribute, const Field & null_value);
|
void createAttributeImpl(Attribute & attribute, const Field & null_value);
|
||||||
|
|
||||||
|
@ -34,6 +34,15 @@ namespace ErrorCodes
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
String getRandomName()
|
||||||
|
{
|
||||||
|
std::uniform_int_distribution<int> distribution('a', 'z');
|
||||||
|
String res(32, ' '); /// The number of bits of entropy should be not less than 128.
|
||||||
|
for (auto & c : res)
|
||||||
|
c = distribution(thread_local_rng);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Result, typename Error>
|
template <typename Result, typename Error>
|
||||||
void throwIfError(Aws::Utils::Outcome<Result, Error> && response)
|
void throwIfError(Aws::Utils::Outcome<Result, Error> && response)
|
||||||
{
|
{
|
||||||
@ -570,14 +579,6 @@ void DiskS3::removeRecursive(const String & path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String DiskS3::getRandomName() const
|
|
||||||
{
|
|
||||||
std::uniform_int_distribution<int> distribution('a', 'z');
|
|
||||||
String res(32, ' '); /// The number of bits of entropy should be not less than 128.
|
|
||||||
for (auto & c : res)
|
|
||||||
c = distribution(thread_local_rng);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DiskS3::tryReserve(UInt64 bytes)
|
bool DiskS3::tryReserve(UInt64 bytes)
|
||||||
{
|
{
|
||||||
|
@ -92,8 +92,6 @@ public:
|
|||||||
Poco::Timestamp getLastModified(const String & path) override;
|
Poco::Timestamp getLastModified(const String & path) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
String getRandomName() const;
|
|
||||||
|
|
||||||
bool tryReserve(UInt64 bytes);
|
bool tryReserve(UInt64 bytes);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <Functions/IFunctionImpl.h>
|
#include <Functions/IFunctionImpl.h>
|
||||||
#include <Functions/FunctionFactory.h>
|
#include <Functions/FunctionFactory.h>
|
||||||
#include <DataTypes/DataTypeString.h>
|
#include <DataTypes/DataTypeString.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Core/Field.h>
|
#include <Core/Field.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ public:
|
|||||||
void init(Block & /*block*/, const ColumnNumbers & /*arguments*/) {}
|
void init(Block & /*block*/, const ColumnNumbers & /*arguments*/) {}
|
||||||
|
|
||||||
/// Returns the position of the argument that is the column of rows
|
/// Returns the position of the argument that is the column of rows
|
||||||
size_t getStringsArgumentPosition()
|
static size_t getStringsArgumentPosition()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ public:
|
|||||||
void init(Block & /*block*/, const ColumnNumbers & /*arguments*/) {}
|
void init(Block & /*block*/, const ColumnNumbers & /*arguments*/) {}
|
||||||
|
|
||||||
/// Returns the position of the argument that is the column of rows
|
/// Returns the position of the argument that is the column of rows
|
||||||
size_t getStringsArgumentPosition()
|
static size_t getStringsArgumentPosition()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the position of the argument that is the column of rows
|
/// Returns the position of the argument that is the column of rows
|
||||||
size_t getStringsArgumentPosition()
|
static size_t getStringsArgumentPosition()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ public:
|
|||||||
void init(Block & /*block*/, const ColumnNumbers & /*arguments*/) {}
|
void init(Block & /*block*/, const ColumnNumbers & /*arguments*/) {}
|
||||||
|
|
||||||
/// Returns the position of the argument that is the column of rows
|
/// Returns the position of the argument that is the column of rows
|
||||||
size_t getStringsArgumentPosition()
|
static size_t getStringsArgumentPosition()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -62,21 +62,21 @@ private:
|
|||||||
static constexpr size_t INITIAL_SIZE_DEGREE = 9;
|
static constexpr size_t INITIAL_SIZE_DEGREE = 9;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool executeNumber(
|
static bool executeNumber(
|
||||||
const IColumn & src_data,
|
const IColumn & src_data,
|
||||||
const ColumnArray::Offsets & src_offsets,
|
const ColumnArray::Offsets & src_offsets,
|
||||||
IColumn & res_data_col,
|
IColumn & res_data_col,
|
||||||
ColumnArray::Offsets & res_offsets,
|
ColumnArray::Offsets & res_offsets,
|
||||||
const ColumnNullable * nullable_col);
|
const ColumnNullable * nullable_col);
|
||||||
|
|
||||||
bool executeString(
|
static bool executeString(
|
||||||
const IColumn & src_data,
|
const IColumn & src_data,
|
||||||
const ColumnArray::Offsets & src_offsets,
|
const ColumnArray::Offsets & src_offsets,
|
||||||
IColumn & res_data_col,
|
IColumn & res_data_col,
|
||||||
ColumnArray::Offsets & res_offsets,
|
ColumnArray::Offsets & res_offsets,
|
||||||
const ColumnNullable * nullable_col);
|
const ColumnNullable * nullable_col);
|
||||||
|
|
||||||
void executeHashed(
|
static void executeHashed(
|
||||||
const IColumn & src_data,
|
const IColumn & src_data,
|
||||||
const ColumnArray::Offsets & src_offsets,
|
const ColumnArray::Offsets & src_offsets,
|
||||||
IColumn & res_data_col,
|
IColumn & res_data_col,
|
||||||
|
@ -53,29 +53,29 @@ private:
|
|||||||
ArrayImpl::NullMapBuilder & builder, size_t input_rows_count);
|
ArrayImpl::NullMapBuilder & builder, size_t input_rows_count);
|
||||||
|
|
||||||
template <typename DataType>
|
template <typename DataType>
|
||||||
bool executeNumberConst(Block & block, const ColumnNumbers & arguments, size_t result, const Field & index,
|
static bool executeNumberConst(Block & block, const ColumnNumbers & arguments, size_t result, const Field & index,
|
||||||
ArrayImpl::NullMapBuilder & builder);
|
ArrayImpl::NullMapBuilder & builder);
|
||||||
|
|
||||||
template <typename IndexType, typename DataType>
|
template <typename IndexType, typename DataType>
|
||||||
bool executeNumber(Block & block, const ColumnNumbers & arguments, size_t result, const PaddedPODArray<IndexType> & indices,
|
static bool executeNumber(Block & block, const ColumnNumbers & arguments, size_t result, const PaddedPODArray<IndexType> & indices,
|
||||||
ArrayImpl::NullMapBuilder & builder);
|
ArrayImpl::NullMapBuilder & builder);
|
||||||
|
|
||||||
bool executeStringConst(Block & block, const ColumnNumbers & arguments, size_t result, const Field & index,
|
static bool executeStringConst(Block & block, const ColumnNumbers & arguments, size_t result, const Field & index,
|
||||||
ArrayImpl::NullMapBuilder & builder);
|
ArrayImpl::NullMapBuilder & builder);
|
||||||
|
|
||||||
template <typename IndexType>
|
template <typename IndexType>
|
||||||
bool executeString(Block & block, const ColumnNumbers & arguments, size_t result, const PaddedPODArray<IndexType> & indices,
|
static bool executeString(Block & block, const ColumnNumbers & arguments, size_t result, const PaddedPODArray<IndexType> & indices,
|
||||||
ArrayImpl::NullMapBuilder & builder);
|
ArrayImpl::NullMapBuilder & builder);
|
||||||
|
|
||||||
bool executeGenericConst(Block & block, const ColumnNumbers & arguments, size_t result, const Field & index,
|
static bool executeGenericConst(Block & block, const ColumnNumbers & arguments, size_t result, const Field & index,
|
||||||
ArrayImpl::NullMapBuilder & builder);
|
ArrayImpl::NullMapBuilder & builder);
|
||||||
|
|
||||||
template <typename IndexType>
|
template <typename IndexType>
|
||||||
bool executeGeneric(Block & block, const ColumnNumbers & arguments, size_t result, const PaddedPODArray<IndexType> & indices,
|
static bool executeGeneric(Block & block, const ColumnNumbers & arguments, size_t result, const PaddedPODArray<IndexType> & indices,
|
||||||
ArrayImpl::NullMapBuilder & builder);
|
ArrayImpl::NullMapBuilder & builder);
|
||||||
|
|
||||||
template <typename IndexType>
|
template <typename IndexType>
|
||||||
bool executeConst(Block & block, const ColumnNumbers & arguments, size_t result,
|
static bool executeConst(Block & block, const ColumnNumbers & arguments, size_t result,
|
||||||
const PaddedPODArray <IndexType> & indices, ArrayImpl::NullMapBuilder & builder,
|
const PaddedPODArray <IndexType> & indices, ArrayImpl::NullMapBuilder & builder,
|
||||||
size_t input_rows_count);
|
size_t input_rows_count);
|
||||||
|
|
||||||
|
@ -45,11 +45,11 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool executeNumber(const IColumn & src_data, const ColumnArray::Offsets & src_offsets, IColumn & res_data);
|
static bool executeNumber(const IColumn & src_data, const ColumnArray::Offsets & src_offsets, IColumn & res_data);
|
||||||
|
|
||||||
bool executeFixedString(const IColumn & src_data, const ColumnArray::Offsets & src_offsets, IColumn & res_data);
|
static bool executeFixedString(const IColumn & src_data, const ColumnArray::Offsets & src_offsets, IColumn & res_data);
|
||||||
bool executeString(const IColumn & src_data, const ColumnArray::Offsets & src_array_offsets, IColumn & res_data);
|
static bool executeString(const IColumn & src_data, const ColumnArray::Offsets & src_array_offsets, IColumn & res_data);
|
||||||
bool executeGeneric(const IColumn & src_data, const ColumnArray::Offsets & src_array_offsets, IColumn & res_data);
|
static bool executeGeneric(const IColumn & src_data, const ColumnArray::Offsets & src_array_offsets, IColumn & res_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
input_rows_count, size)->convertToFullColumnIfConst();
|
input_rows_count, size)->convertToFullColumnIfConst();
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt64 blockSerializedSizeOne(const ColumnWithTypeAndName & elem) const
|
static UInt64 blockSerializedSizeOne(const ColumnWithTypeAndName & elem)
|
||||||
{
|
{
|
||||||
ColumnPtr full_column = elem.column->convertToFullColumnIfConst();
|
ColumnPtr full_column = elem.column->convertToFullColumnIfConst();
|
||||||
|
|
||||||
|
@ -78,13 +78,13 @@ private:
|
|||||||
/// Separate converter is created for each thread.
|
/// Separate converter is created for each thread.
|
||||||
using Pool = ObjectPoolMap<Converter, String>;
|
using Pool = ObjectPoolMap<Converter, String>;
|
||||||
|
|
||||||
Pool::Pointer getConverter(const String & charset)
|
static Pool::Pointer getConverter(const String & charset)
|
||||||
{
|
{
|
||||||
static Pool pool;
|
static Pool pool;
|
||||||
return pool.get(charset, [&charset] { return new Converter(charset); });
|
return pool.get(charset, [&charset] { return new Converter(charset); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void convert(const String & from_charset, const String & to_charset,
|
static void convert(const String & from_charset, const String & to_charset,
|
||||||
const ColumnString::Chars & from_chars, const ColumnString::Offsets & from_offsets,
|
const ColumnString::Chars & from_chars, const ColumnString::Offsets & from_offsets,
|
||||||
ColumnString::Chars & to_chars, ColumnString::Offsets & to_offsets)
|
ColumnString::Chars & to_chars, ColumnString::Offsets & to_offsets)
|
||||||
{
|
{
|
||||||
|
@ -416,7 +416,7 @@ private:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool executeString(const ColumnUInt8 * cond_col, Block & block, const ColumnNumbers & arguments, size_t result)
|
static bool executeString(const ColumnUInt8 * cond_col, Block & block, const ColumnNumbers & arguments, size_t result)
|
||||||
{
|
{
|
||||||
const IColumn * col_then_untyped = block.getByPosition(arguments[1]).column.get();
|
const IColumn * col_then_untyped = block.getByPosition(arguments[1]).column.get();
|
||||||
const IColumn * col_else_untyped = block.getByPosition(arguments[2]).column.get();
|
const IColumn * col_else_untyped = block.getByPosition(arguments[2]).column.get();
|
||||||
@ -494,7 +494,7 @@ private:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool executeGenericArray(const ColumnUInt8 * cond_col, Block & block, const ColumnNumbers & arguments, size_t result)
|
static bool executeGenericArray(const ColumnUInt8 * cond_col, Block & block, const ColumnNumbers & arguments, size_t result)
|
||||||
{
|
{
|
||||||
/// For generic implementation, arrays must be of same type.
|
/// For generic implementation, arrays must be of same type.
|
||||||
if (!block.getByPosition(arguments[1]).type->equals(*block.getByPosition(arguments[2]).type))
|
if (!block.getByPosition(arguments[1]).type->equals(*block.getByPosition(arguments[2]).type))
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
throw Exception("Cannot reinterpret " + type.getName() + " as FixedString because it is not fixed size and contiguous in memory", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
|
throw Exception("Cannot reinterpret " + type.getName() + " as FixedString because it is not fixed size and contiguous in memory", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NO_INLINE executeToFixedString(const IColumn & src, ColumnFixedString & dst, size_t n)
|
static void NO_INLINE executeToFixedString(const IColumn & src, ColumnFixedString & dst, size_t n)
|
||||||
{
|
{
|
||||||
size_t rows = src.size();
|
size_t rows = src.size();
|
||||||
ColumnFixedString::Chars & data_to = dst.getChars();
|
ColumnFixedString::Chars & data_to = dst.getChars();
|
||||||
@ -54,7 +54,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NO_INLINE executeContiguousToFixedString(const IColumn & src, ColumnFixedString & dst, size_t n)
|
static void NO_INLINE executeContiguousToFixedString(const IColumn & src, ColumnFixedString & dst, size_t n)
|
||||||
{
|
{
|
||||||
size_t rows = src.size();
|
size_t rows = src.size();
|
||||||
ColumnFixedString::Chars & data_to = dst.getChars();
|
ColumnFixedString::Chars & data_to = dst.getChars();
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
throw Exception("Cannot reinterpret " + type.getName() + " as String because it is not contiguous in memory", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
|
throw Exception("Cannot reinterpret " + type.getName() + " as String because it is not contiguous in memory", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void executeToString(const IColumn & src, ColumnString & dst)
|
static void executeToString(const IColumn & src, ColumnString & dst)
|
||||||
{
|
{
|
||||||
size_t rows = src.size();
|
size_t rows = src.size();
|
||||||
ColumnString::Chars & data_to = dst.getChars();
|
ColumnString::Chars & data_to = dst.getChars();
|
||||||
|
@ -188,7 +188,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void executeConst(Block & block, const ColumnNumbers & arguments, const size_t result, size_t input_rows_count)
|
static void executeConst(Block & block, const ColumnNumbers & arguments, const size_t result, size_t input_rows_count)
|
||||||
{
|
{
|
||||||
/// Materialize the input column and compute the function as usual.
|
/// Materialize the input column and compute the function as usual.
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ namespace S3
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Aws::S3::S3Client> ClientFactory::create(
|
std::shared_ptr<Aws::S3::S3Client> ClientFactory::create( // NOLINT
|
||||||
const String & endpoint,
|
const String & endpoint,
|
||||||
const String & access_key_id,
|
const String & access_key_id,
|
||||||
const String & secret_access_key)
|
const String & secret_access_key)
|
||||||
|
@ -81,7 +81,7 @@ void WriteBufferValidUTF8::nextImpl()
|
|||||||
size_t len = length_of_utf8_sequence[static_cast<unsigned char>(*p)];
|
size_t len = length_of_utf8_sequence[static_cast<unsigned char>(*p)];
|
||||||
|
|
||||||
if (len > 4)
|
if (len > 4)
|
||||||
{
|
{ // NOLINT
|
||||||
/// Invalid start of sequence. Skip one byte.
|
/// Invalid start of sequence. Skip one byte.
|
||||||
putValid(valid_start, p - valid_start);
|
putValid(valid_start, p - valid_start);
|
||||||
putReplacement();
|
putReplacement();
|
||||||
|
@ -479,12 +479,12 @@ ReturnType parseDateTimeBestEffortImpl(time_t & res, ReadBuffer & in, const Date
|
|||||||
if (read_alpha_month(alpha))
|
if (read_alpha_month(alpha))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
else if (0 == strncasecmp(alpha, "UTC", 3)) has_time_zone_offset = true;
|
else if (0 == strncasecmp(alpha, "UTC", 3)) has_time_zone_offset = true; // NOLINT
|
||||||
else if (0 == strncasecmp(alpha, "GMT", 3)) has_time_zone_offset = true;
|
else if (0 == strncasecmp(alpha, "GMT", 3)) has_time_zone_offset = true;
|
||||||
else if (0 == strncasecmp(alpha, "MSK", 3)) { has_time_zone_offset = true; time_zone_offset_hour = 3; }
|
else if (0 == strncasecmp(alpha, "MSK", 3)) { has_time_zone_offset = true; time_zone_offset_hour = 3; }
|
||||||
else if (0 == strncasecmp(alpha, "MSD", 3)) { has_time_zone_offset = true; time_zone_offset_hour = 4; }
|
else if (0 == strncasecmp(alpha, "MSD", 3)) { has_time_zone_offset = true; time_zone_offset_hour = 4; }
|
||||||
|
|
||||||
else if (0 == strncasecmp(alpha, "Mon", 3)) has_day_of_week = true;
|
else if (0 == strncasecmp(alpha, "Mon", 3)) has_day_of_week = true; // NOLINT
|
||||||
else if (0 == strncasecmp(alpha, "Tue", 3)) has_day_of_week = true;
|
else if (0 == strncasecmp(alpha, "Tue", 3)) has_day_of_week = true;
|
||||||
else if (0 == strncasecmp(alpha, "Wed", 3)) has_day_of_week = true;
|
else if (0 == strncasecmp(alpha, "Wed", 3)) has_day_of_week = true;
|
||||||
else if (0 == strncasecmp(alpha, "Thu", 3)) has_day_of_week = true;
|
else if (0 == strncasecmp(alpha, "Thu", 3)) has_day_of_week = true;
|
||||||
|
@ -510,7 +510,7 @@ void NO_INLINE Aggregator::executeWithoutKeyImpl(
|
|||||||
AggregatedDataWithoutKey & res,
|
AggregatedDataWithoutKey & res,
|
||||||
size_t rows,
|
size_t rows,
|
||||||
AggregateFunctionInstruction * aggregate_instructions,
|
AggregateFunctionInstruction * aggregate_instructions,
|
||||||
Arena * arena) const
|
Arena * arena)
|
||||||
{
|
{
|
||||||
/// Adding values
|
/// Adding values
|
||||||
for (AggregateFunctionInstruction * inst = aggregate_instructions; inst->that; ++inst)
|
for (AggregateFunctionInstruction * inst = aggregate_instructions; inst->that; ++inst)
|
||||||
|
@ -1082,11 +1082,11 @@ protected:
|
|||||||
AggregateFunctionInstruction * aggregate_instructions) const;
|
AggregateFunctionInstruction * aggregate_instructions) const;
|
||||||
|
|
||||||
/// For case when there are no keys (all aggregate into one row).
|
/// For case when there are no keys (all aggregate into one row).
|
||||||
void executeWithoutKeyImpl(
|
static void executeWithoutKeyImpl(
|
||||||
AggregatedDataWithoutKey & res,
|
AggregatedDataWithoutKey & res,
|
||||||
size_t rows,
|
size_t rows,
|
||||||
AggregateFunctionInstruction * aggregate_instructions,
|
AggregateFunctionInstruction * aggregate_instructions,
|
||||||
Arena * arena) const;
|
Arena * arena);
|
||||||
|
|
||||||
template <typename Method>
|
template <typename Method>
|
||||||
void writeToTemporaryFileImpl(
|
void writeToTemporaryFileImpl(
|
||||||
|
@ -218,7 +218,7 @@ private:
|
|||||||
|
|
||||||
/// Buffer should be allocated with features_count * column->size() elements.
|
/// Buffer should be allocated with features_count * column->size() elements.
|
||||||
/// Place string pointers in positions buffer[0], buffer[features_count], ... , buffer[size * features_count]
|
/// Place string pointers in positions buffer[0], buffer[features_count], ... , buffer[size * features_count]
|
||||||
void placeStringColumn(const ColumnString & column, const char ** buffer, size_t features_count) const
|
static void placeStringColumn(const ColumnString & column, const char ** buffer, size_t features_count)
|
||||||
{
|
{
|
||||||
size_t size = column.size();
|
size_t size = column.size();
|
||||||
for (size_t i = 0; i < size; ++i)
|
for (size_t i = 0; i < size; ++i)
|
||||||
@ -231,8 +231,8 @@ private:
|
|||||||
/// Buffer should be allocated with features_count * column->size() elements.
|
/// Buffer should be allocated with features_count * column->size() elements.
|
||||||
/// Place string pointers in positions buffer[0], buffer[features_count], ... , buffer[size * features_count]
|
/// Place string pointers in positions buffer[0], buffer[features_count], ... , buffer[size * features_count]
|
||||||
/// Returns PODArray which holds data (because ColumnFixedString doesn't store terminating zero).
|
/// Returns PODArray which holds data (because ColumnFixedString doesn't store terminating zero).
|
||||||
PODArray<char> placeFixedStringColumn(
|
static PODArray<char> placeFixedStringColumn(
|
||||||
const ColumnFixedString & column, const char ** buffer, size_t features_count) const
|
const ColumnFixedString & column, const char ** buffer, size_t features_count)
|
||||||
{
|
{
|
||||||
size_t size = column.size();
|
size_t size = column.size();
|
||||||
size_t str_size = column.getN();
|
size_t str_size = column.getN();
|
||||||
@ -281,8 +281,8 @@ private:
|
|||||||
|
|
||||||
/// Place columns into buffer, returns data which was used for fixed string columns.
|
/// Place columns into buffer, returns data which was used for fixed string columns.
|
||||||
/// Buffer should contains column->size() values, each value contains size strings.
|
/// Buffer should contains column->size() values, each value contains size strings.
|
||||||
std::vector<PODArray<char>> placeStringColumns(
|
static std::vector<PODArray<char>> placeStringColumns(
|
||||||
const ColumnRawPtrs & columns, size_t offset, size_t size, const char ** buffer) const
|
const ColumnRawPtrs & columns, size_t offset, size_t size, const char ** buffer)
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
return {};
|
return {};
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <IO/ReadHelpers.h>
|
#include <IO/ReadHelpers.h>
|
||||||
#include <IO/WriteHelpers.h>
|
#include <IO/WriteHelpers.h>
|
||||||
#include <Core/Defines.h>
|
#include <Core/Defines.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/ClickHouseRevision.h>
|
#include <Common/ClickHouseRevision.h>
|
||||||
#include <Common/config_version.h>
|
#include <Common/config_version.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include <Access/AccessRightsElement.h>
|
#include <Access/AccessRightsElement.h>
|
||||||
#include <Common/DNSResolver.h>
|
#include <Common/DNSResolver.h>
|
||||||
#include <Common/Macros.h>
|
#include <Common/Macros.h>
|
||||||
#include <Common/getFQDNOrHostName.h>
|
#include <common/getFQDNOrHostName.h>
|
||||||
#include <Common/setThreadName.h>
|
#include <Common/setThreadName.h>
|
||||||
#include <Common/Stopwatch.h>
|
#include <Common/Stopwatch.h>
|
||||||
#include <Common/randomSeed.h>
|
#include <Common/randomSeed.h>
|
||||||
@ -668,7 +668,7 @@ void DDLWorker::processTask(DDLTask & task, const ZooKeeperPtr & zookeeper)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool DDLWorker::taskShouldBeExecutedOnLeader(const ASTPtr ast_ddl, const StoragePtr storage) const
|
bool DDLWorker::taskShouldBeExecutedOnLeader(const ASTPtr ast_ddl, const StoragePtr storage)
|
||||||
{
|
{
|
||||||
/// Pure DROP queries have to be executed on each node separately
|
/// Pure DROP queries have to be executed on each node separately
|
||||||
if (auto query = ast_ddl->as<ASTDropQuery>(); query && query->kind != ASTDropQuery::Kind::Truncate)
|
if (auto query = ast_ddl->as<ASTDropQuery>(); query && query->kind != ASTDropQuery::Kind::Truncate)
|
||||||
|
@ -59,7 +59,7 @@ private:
|
|||||||
void processTask(DDLTask & task, const ZooKeeperPtr & zookeeper);
|
void processTask(DDLTask & task, const ZooKeeperPtr & zookeeper);
|
||||||
|
|
||||||
/// Check that query should be executed on leader replica only
|
/// Check that query should be executed on leader replica only
|
||||||
bool taskShouldBeExecutedOnLeader(const ASTPtr ast_ddl, StoragePtr storage) const;
|
static bool taskShouldBeExecutedOnLeader(const ASTPtr ast_ddl, StoragePtr storage);
|
||||||
|
|
||||||
/// Check that shard has consistent config with table
|
/// Check that shard has consistent config with table
|
||||||
void checkShardConfig(const String & table, const DDLTask & task, StoragePtr storage) const;
|
void checkShardConfig(const String & table, const DDLTask & task, StoragePtr storage) const;
|
||||||
@ -84,7 +84,7 @@ private:
|
|||||||
void cleanupQueue(Int64 current_time_seconds, const ZooKeeperPtr & zookeeper);
|
void cleanupQueue(Int64 current_time_seconds, const ZooKeeperPtr & zookeeper);
|
||||||
|
|
||||||
/// Init task node
|
/// Init task node
|
||||||
void createStatusDirs(const std::string & node_path, const ZooKeeperPtr & zookeeper);
|
static void createStatusDirs(const std::string & node_path, const ZooKeeperPtr & zookeeper);
|
||||||
|
|
||||||
|
|
||||||
void runMainThread();
|
void runMainThread();
|
||||||
|
@ -868,7 +868,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cancelLoading(Info & info)
|
static void cancelLoading(Info & info)
|
||||||
{
|
{
|
||||||
if (!info.is_loading())
|
if (!info.is_loading())
|
||||||
return;
|
return;
|
||||||
|
@ -25,6 +25,12 @@ namespace ErrorCodes
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static DatabasePtr tryGetDatabase(const String & database_name, bool if_exists)
|
||||||
|
{
|
||||||
|
return if_exists ? DatabaseCatalog::instance().tryGetDatabase(database_name) : DatabaseCatalog::instance().getDatabase(database_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
InterpreterDropQuery::InterpreterDropQuery(const ASTPtr & query_ptr_, Context & context_) : query_ptr(query_ptr_), context(context_) {}
|
InterpreterDropQuery::InterpreterDropQuery(const ASTPtr & query_ptr_, Context & context_) : query_ptr(query_ptr_), context(context_) {}
|
||||||
|
|
||||||
|
|
||||||
@ -227,6 +233,7 @@ BlockIO InterpreterDropQuery::executeToTemporaryTable(const String & table_name,
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlockIO InterpreterDropQuery::executeToDatabase(const String & database_name, ASTDropQuery::Kind kind, bool if_exists)
|
BlockIO InterpreterDropQuery::executeToDatabase(const String & database_name, ASTDropQuery::Kind kind, bool if_exists)
|
||||||
{
|
{
|
||||||
auto ddl_guard = DatabaseCatalog::instance().getDDLGuard(database_name, "");
|
auto ddl_guard = DatabaseCatalog::instance().getDDLGuard(database_name, "");
|
||||||
@ -263,10 +270,6 @@ BlockIO InterpreterDropQuery::executeToDatabase(const String & database_name, AS
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabasePtr InterpreterDropQuery::tryGetDatabase(const String & database_name, bool if_exists)
|
|
||||||
{
|
|
||||||
return if_exists ? DatabaseCatalog::instance().tryGetDatabase(database_name) : DatabaseCatalog::instance().getDatabase(database_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
DatabaseAndTable InterpreterDropQuery::tryGetDatabaseAndTable(const String & database_name, const String & table_name, bool if_exists)
|
DatabaseAndTable InterpreterDropQuery::tryGetDatabaseAndTable(const String & database_name, const String & table_name, bool if_exists)
|
||||||
{
|
{
|
||||||
|
@ -34,8 +34,6 @@ private:
|
|||||||
|
|
||||||
BlockIO executeToDictionary(const String & database_name, const String & dictionary_name, ASTDropQuery::Kind kind, bool if_exists, bool is_temporary, bool no_ddl_lock);
|
BlockIO executeToDictionary(const String & database_name, const String & dictionary_name, ASTDropQuery::Kind kind, bool if_exists, bool is_temporary, bool no_ddl_lock);
|
||||||
|
|
||||||
DatabasePtr tryGetDatabase(const String & database_name, bool exists);
|
|
||||||
|
|
||||||
DatabaseAndTable tryGetDatabaseAndTable(const String & database_name, const String & table_name, bool if_exists);
|
DatabaseAndTable tryGetDatabaseAndTable(const String & database_name, const String & table_name, bool if_exists);
|
||||||
|
|
||||||
BlockIO executeToTemporaryTable(const String & table_name, ASTDropQuery::Kind kind);
|
BlockIO executeToTemporaryTable(const String & table_name, ASTDropQuery::Kind kind);
|
||||||
|
@ -168,7 +168,7 @@ private:
|
|||||||
void executeMergeAggregated(Pipeline & pipeline, bool overflow_row, bool final);
|
void executeMergeAggregated(Pipeline & pipeline, bool overflow_row, bool final);
|
||||||
void executeTotalsAndHaving(Pipeline & pipeline, bool has_having, const ExpressionActionsPtr & expression, bool overflow_row, bool final);
|
void executeTotalsAndHaving(Pipeline & pipeline, bool has_having, const ExpressionActionsPtr & expression, bool overflow_row, bool final);
|
||||||
void executeHaving(Pipeline & pipeline, const ExpressionActionsPtr & expression);
|
void executeHaving(Pipeline & pipeline, const ExpressionActionsPtr & expression);
|
||||||
void executeExpression(Pipeline & pipeline, const ExpressionActionsPtr & expression);
|
static void executeExpression(Pipeline & pipeline, const ExpressionActionsPtr & expression);
|
||||||
void executeOrder(Pipeline & pipeline, InputSortingInfoPtr sorting_info);
|
void executeOrder(Pipeline & pipeline, InputSortingInfoPtr sorting_info);
|
||||||
void executeWithFill(Pipeline & pipeline);
|
void executeWithFill(Pipeline & pipeline);
|
||||||
void executeMergeSorted(Pipeline & pipeline);
|
void executeMergeSorted(Pipeline & pipeline);
|
||||||
@ -176,7 +176,7 @@ private:
|
|||||||
void executeUnion(Pipeline & pipeline, Block header);
|
void executeUnion(Pipeline & pipeline, Block header);
|
||||||
void executeLimitBy(Pipeline & pipeline);
|
void executeLimitBy(Pipeline & pipeline);
|
||||||
void executeLimit(Pipeline & pipeline);
|
void executeLimit(Pipeline & pipeline);
|
||||||
void executeProjection(Pipeline & pipeline, const ExpressionActionsPtr & expression);
|
static void executeProjection(Pipeline & pipeline, const ExpressionActionsPtr & expression);
|
||||||
void executeDistinct(Pipeline & pipeline, bool before_order, Names columns);
|
void executeDistinct(Pipeline & pipeline, bool before_order, Names columns);
|
||||||
void executeExtremes(Pipeline & pipeline);
|
void executeExtremes(Pipeline & pipeline);
|
||||||
void executeSubqueriesInSetsAndJoins(Pipeline & pipeline, const std::unordered_map<String, SubqueryForSet> & subqueries_for_sets);
|
void executeSubqueriesInSetsAndJoins(Pipeline & pipeline, const std::unordered_map<String, SubqueryForSet> & subqueries_for_sets);
|
||||||
@ -187,14 +187,14 @@ private:
|
|||||||
void executeMergeAggregated(QueryPipeline & pipeline, bool overflow_row, bool final);
|
void executeMergeAggregated(QueryPipeline & pipeline, bool overflow_row, bool final);
|
||||||
void executeTotalsAndHaving(QueryPipeline & pipeline, bool has_having, const ExpressionActionsPtr & expression, bool overflow_row, bool final);
|
void executeTotalsAndHaving(QueryPipeline & pipeline, bool has_having, const ExpressionActionsPtr & expression, bool overflow_row, bool final);
|
||||||
void executeHaving(QueryPipeline & pipeline, const ExpressionActionsPtr & expression);
|
void executeHaving(QueryPipeline & pipeline, const ExpressionActionsPtr & expression);
|
||||||
void executeExpression(QueryPipeline & pipeline, const ExpressionActionsPtr & expression);
|
static void executeExpression(QueryPipeline & pipeline, const ExpressionActionsPtr & expression);
|
||||||
void executeOrder(QueryPipeline & pipeline, InputSortingInfoPtr sorting_info);
|
void executeOrder(QueryPipeline & pipeline, InputSortingInfoPtr sorting_info);
|
||||||
void executeWithFill(QueryPipeline & pipeline);
|
void executeWithFill(QueryPipeline & pipeline);
|
||||||
void executeMergeSorted(QueryPipeline & pipeline);
|
void executeMergeSorted(QueryPipeline & pipeline);
|
||||||
void executePreLimit(QueryPipeline & pipeline, bool do_not_skip_offset);
|
void executePreLimit(QueryPipeline & pipeline, bool do_not_skip_offset);
|
||||||
void executeLimitBy(QueryPipeline & pipeline);
|
void executeLimitBy(QueryPipeline & pipeline);
|
||||||
void executeLimit(QueryPipeline & pipeline);
|
void executeLimit(QueryPipeline & pipeline);
|
||||||
void executeProjection(QueryPipeline & pipeline, const ExpressionActionsPtr & expression);
|
static void executeProjection(QueryPipeline & pipeline, const ExpressionActionsPtr & expression);
|
||||||
void executeDistinct(QueryPipeline & pipeline, bool before_order, Names columns);
|
void executeDistinct(QueryPipeline & pipeline, bool before_order, Names columns);
|
||||||
void executeExtremes(QueryPipeline & pipeline);
|
void executeExtremes(QueryPipeline & pipeline);
|
||||||
void executeSubqueriesInSetsAndJoins(QueryPipeline & pipeline, const std::unordered_map<String, SubqueryForSet> & subqueries_for_sets);
|
void executeSubqueriesInSetsAndJoins(QueryPipeline & pipeline, const std::unordered_map<String, SubqueryForSet> & subqueries_for_sets);
|
||||||
|
@ -28,10 +28,6 @@ namespace ErrorCodes
|
|||||||
extern const int SUPPORT_IS_DISABLED;
|
extern const int SUPPORT_IS_DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockInputStreamPtr InterpreterWatchQuery::executeImpl()
|
|
||||||
{
|
|
||||||
return std::make_shared<OneBlockInputStream>(Block());
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockIO InterpreterWatchQuery::execute()
|
BlockIO InterpreterWatchQuery::execute()
|
||||||
{
|
{
|
||||||
|
@ -39,7 +39,6 @@ private:
|
|||||||
ASTPtr query_ptr;
|
ASTPtr query_ptr;
|
||||||
Context & context;
|
Context & context;
|
||||||
|
|
||||||
BlockInputStreamPtr executeImpl();
|
|
||||||
/// Table from where to read data, if not subquery.
|
/// Table from where to read data, if not subquery.
|
||||||
StoragePtr storage;
|
StoragePtr storage;
|
||||||
/// Streams of read data
|
/// Streams of read data
|
||||||
|
@ -81,7 +81,7 @@ private:
|
|||||||
bool mayOptimizeDisjunctiveEqualityChain(const DisjunctiveEqualityChain & chain) const;
|
bool mayOptimizeDisjunctiveEqualityChain(const DisjunctiveEqualityChain & chain) const;
|
||||||
|
|
||||||
/// Insert the IN expression into the OR chain.
|
/// Insert the IN expression into the OR chain.
|
||||||
void addInExpression(const DisjunctiveEqualityChain & chain);
|
static void addInExpression(const DisjunctiveEqualityChain & chain);
|
||||||
|
|
||||||
/// Delete the equalities that were replaced by the IN expressions.
|
/// Delete the equalities that were replaced by the IN expressions.
|
||||||
void cleanupOrExpressions();
|
void cleanupOrExpressions();
|
||||||
|
@ -45,9 +45,9 @@ struct SelectQueryOptions
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectQueryOptions & analyze(bool value = true)
|
SelectQueryOptions & analyze(bool dry_run = true)
|
||||||
{
|
{
|
||||||
only_analyze = value;
|
only_analyze = dry_run;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -887,7 +887,7 @@ SyntaxAnalyzerResultPtr SyntaxAnalyzer::analyze(ASTPtr & query, const NamesAndTy
|
|||||||
return std::make_shared<const SyntaxAnalyzerResult>(result);
|
return std::make_shared<const SyntaxAnalyzerResult>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyntaxAnalyzer::normalize(ASTPtr & query, Aliases & aliases, const Settings & settings) const
|
void SyntaxAnalyzer::normalize(ASTPtr & query, Aliases & aliases, const Settings & settings)
|
||||||
{
|
{
|
||||||
CustomizeFunctionsVisitor::Data data{settings.count_distinct_implementation};
|
CustomizeFunctionsVisitor::Data data{settings.count_distinct_implementation};
|
||||||
CustomizeFunctionsVisitor(data).visit(query);
|
CustomizeFunctionsVisitor(data).visit(query);
|
||||||
|
@ -99,7 +99,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
const Context & context;
|
const Context & context;
|
||||||
|
|
||||||
void normalize(ASTPtr & query, Aliases & aliases, const Settings & settings) const;
|
static void normalize(ASTPtr & query, Aliases & aliases, const Settings & settings);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ Block TraceLogElement::createBlock()
|
|||||||
{
|
{
|
||||||
{std::make_shared<DataTypeDate>(), "event_date"},
|
{std::make_shared<DataTypeDate>(), "event_date"},
|
||||||
{std::make_shared<DataTypeDateTime>(), "event_time"},
|
{std::make_shared<DataTypeDateTime>(), "event_time"},
|
||||||
|
{std::make_shared<DataTypeUInt64>(), "timestamp_ns"},
|
||||||
{std::make_shared<DataTypeUInt32>(), "revision"},
|
{std::make_shared<DataTypeUInt32>(), "revision"},
|
||||||
{std::make_shared<TraceDataType>(trace_values), "trace_type"},
|
{std::make_shared<TraceDataType>(trace_values), "trace_type"},
|
||||||
{std::make_shared<DataTypeUInt64>(), "thread_id"},
|
{std::make_shared<DataTypeUInt64>(), "thread_id"},
|
||||||
@ -41,6 +42,7 @@ void TraceLogElement::appendToBlock(Block & block) const
|
|||||||
|
|
||||||
columns[i++]->insert(DateLUT::instance().toDayNum(event_time));
|
columns[i++]->insert(DateLUT::instance().toDayNum(event_time));
|
||||||
columns[i++]->insert(event_time);
|
columns[i++]->insert(event_time);
|
||||||
|
columns[i++]->insert(timestamp_ns);
|
||||||
columns[i++]->insert(ClickHouseRevision::get());
|
columns[i++]->insert(ClickHouseRevision::get());
|
||||||
columns[i++]->insert(static_cast<UInt8>(trace_type));
|
columns[i++]->insert(static_cast<UInt8>(trace_type));
|
||||||
columns[i++]->insert(thread_id);
|
columns[i++]->insert(thread_id);
|
||||||
|
@ -15,6 +15,7 @@ struct TraceLogElement
|
|||||||
static const TraceDataType::Values trace_values;
|
static const TraceDataType::Values trace_values;
|
||||||
|
|
||||||
time_t event_time{};
|
time_t event_time{};
|
||||||
|
UInt64 timestamp_ns{};
|
||||||
TraceType trace_type{};
|
TraceType trace_type{};
|
||||||
UInt64 thread_id{};
|
UInt64 thread_id{};
|
||||||
String query_id{};
|
String query_id{};
|
||||||
|
@ -64,7 +64,7 @@ struct RestoreQualifiedNamesData
|
|||||||
{
|
{
|
||||||
using TypeToVisit = ASTIdentifier;
|
using TypeToVisit = ASTIdentifier;
|
||||||
|
|
||||||
void visit(ASTIdentifier & identifier, ASTPtr & ast);
|
static void visit(ASTIdentifier & identifier, ASTPtr & ast);
|
||||||
};
|
};
|
||||||
|
|
||||||
using RestoreQualifiedNamesMatcher = OneTypeMatcher<RestoreQualifiedNamesData>;
|
using RestoreQualifiedNamesMatcher = OneTypeMatcher<RestoreQualifiedNamesData>;
|
||||||
|
@ -277,7 +277,7 @@ struct Grower : public HashTableGrower<>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Set the buffer size by the number of elements in the hash table. Used when deserializing a hash table.
|
/// Set the buffer size by the number of elements in the hash table. Used when deserializing a hash table.
|
||||||
[[noreturn]] void set(size_t /*num_elems*/)
|
[[noreturn]] static void set(size_t /*num_elems*/)
|
||||||
{
|
{
|
||||||
throw Poco::Exception(__PRETTY_FUNCTION__);
|
throw Poco::Exception(__PRETTY_FUNCTION__);
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user