Merge branch 'master' of github.com:ClickHouse/ClickHouse into clickhouse-copier

This commit is contained in:
Nikita Mikhaylov 2020-03-18 22:04:42 +03:00
commit eed5ee4ec7
248 changed files with 4898 additions and 4375 deletions

View File

@ -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
View File

@ -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
View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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")

View File

@ -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.

View File

@ -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)

View File

@ -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>

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include <Poco/Util/Application.h> #include <Poco/Util/Application.h>
namespace Poco::Util namespace Poco::Util

View File

@ -4,4 +4,3 @@
#cmakedefine01 USE_JEMALLOC #cmakedefine01 USE_JEMALLOC
#cmakedefine01 UNBUNDLED #cmakedefine01 UNBUNDLED
#cmakedefine01 WITH_COVERAGE

View File

@ -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
} }

View File

@ -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
View File

@ -0,0 +1,12 @@
LIBRARY()
PEERDIR(
contrib/libs/poco/Util
)
SRCS(
argsToConfig.cpp
coverage.cpp
)
END()

View File

@ -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()
{ {

View File

@ -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();
}; };

View File

@ -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>

View File

@ -1 +1,3 @@
RECURSE(
common
)

View File

@ -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()

View File

@ -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)

View File

@ -0,0 +1 @@
../../avro/lang/c++/api

View File

@ -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;
} }

View File

@ -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);

View File

@ -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);

View File

@ -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>

View File

@ -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"

View File

@ -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;

View File

@ -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

View File

@ -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)
{ {

View File

@ -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;
}; };

View File

@ -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;

View File

@ -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;
}; };
} }

View File

@ -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>

View File

@ -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);
}; };
} }

View File

@ -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"

View File

@ -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>

View File

@ -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>

View File

@ -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_);
}

View File

@ -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;
} }

View File

@ -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),

View File

@ -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;

View File

@ -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>

View File

@ -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())
{ {
} }

View File

@ -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_);

View File

@ -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;

View File

@ -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))

View File

@ -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,

View File

@ -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; }
}; };

View File

@ -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);
} }
} }

View File

@ -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:

View File

@ -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;
} }
} }

View File

@ -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);

View File

@ -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;

View File

@ -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();
}; };

View File

@ -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;
}
} }

View File

@ -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;
}; };
} }

View File

@ -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)

View File

@ -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);
}; };

View File

@ -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);
}; };

View File

@ -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)

View File

@ -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);

View File

@ -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)
{ {

View File

@ -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:

View File

@ -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>

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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,

View File

@ -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);

View File

@ -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);
}; };

View File

@ -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();

View File

@ -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)
{ {

View File

@ -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))

View File

@ -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();

View File

@ -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();

View File

@ -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.

View File

@ -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)

View File

@ -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();

View File

@ -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;

View File

@ -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)

View File

@ -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(

View File

@ -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 {};

View File

@ -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>

View File

@ -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)

View File

@ -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();

View File

@ -868,7 +868,7 @@ private:
} }
} }
void cancelLoading(Info & info) static void cancelLoading(Info & info)
{ {
if (!info.is_loading()) if (!info.is_loading())
return; return;

View File

@ -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)
{ {

View File

@ -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);

View File

@ -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);

View File

@ -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()
{ {

View File

@ -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

View File

@ -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();

View File

@ -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;
} }

View File

@ -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);

View File

@ -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);
}; };
} }

View File

@ -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);

View File

@ -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{};

View File

@ -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>;

View File

@ -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