diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a7a389bac9..a926e5cdc4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,41 @@ +# ClickHouse release 1.1.54289 + +## New features: +* `SYSTEM` queries for server administration: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`. +* Added functions for working with arrays: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`. +* Added the `root` and `identity` parameters for the ZooKeeper configuration. This allows you to isolate individual users on the same ZooKeeper cluster. +* Added the aggregate functions `groupBitAnd`, `groupBitOr`, and `groupBitXor` (for compatibility, they can also be accessed with the names `BIT_AND`, `BIT_OR`, and `BIT_XOR`). +* External dictionaries can be loaded from MySQL by specifying a socket in the filesystem. +* External dictionaries can be loaded from MySQL over SSL (the `ssl_cert`, `ssl_key`, and `ssl_ca` parameters). +* Added the `max_network_bandwidth_for_user` setting to restrict the overall bandwidth use for queries per user. +* Support for `DROP TABLE` for temporary tables. +* Support for reading `DateTime` values in Unix timestamp format from the `CSV` and `JSONEachRow` formats. +* Lagging replicas in distributed queries are now excluded by default (the default threshold is 5 minutes). +* FIFO locking is used during ALTER: an ALTER query isn't blocked indefinitely for continuously running queries. +* Option to set `umask` in the config file. +* Improved performance for queries with `DISTINCT`. + +## Bug fixes: +* Improved the process for deleting old nodes in ZooKeeper. Previously, old nodes sometimes didn't get deleted if there were very frequent inserts, which caused the server to be slow to shut down, among other things. +* Fixed randomization when choosing hosts for the connection to ZooKeeper. +* Fixed the exclusion of lagging replicas in distributed queries if the replica is localhost. +* Fixed an error where a data part in a `ReplicatedMergeTree` table could be broken after running `ALTER MODIFY` on an element in a `Nested` structure. +* Fixed an error that could cause SELECT queries to "hang". +* Improvements to distributed DDL queries. +* Fixed the query `CREATE TABLE ... AS `. +* Resolved the deadlock in the `ALTER ... CLEAR COLUMN IN PARTITION` query for `Buffer` tables. +* Fixed the invalid default value for `Enum`s (0 instead of the minimum) when using the `JSONEachRow` and `TSKV` formats. +* Resolved the appearance of zombie processes when using a dictionary with an `executable` source. +* Fixed segfault for the HEAD query. + +## Improvements to development workflow and ClickHouse build: +* You can use `pbuilder` to build ClickHouse. +* You can use `libc++` instead of `libstdc++` for builds on Linux. +* Added instructions for using static code analysis tools: `Coverity`, `clang-tidy`, and `cppcheck`. + +## Please note when upgrading: +* There is now a higher default value for the MergeTree setting `max_bytes_to_merge_at_max_space_in_pool` (the maximum total size of data parts to merge, in bytes): it has increased from 100 GiB to 150 GiB. This might result in large merges running after the server upgrade, which could cause an increased load on the disk subsystem. If the free space available on the server is less than twice the total amount of the merges that are running, this will cause all other merges to stop running, including merges of small data parts. As a result, INSERT requests will fail with the message "Merges are processing significantly slower than inserts." Use the `SELECT * FROM system.merges` request to monitor the situation. You can also check the `DiskSpaceReservedForMerge` metric in the `system.metrics` table, or in Graphite. You don't need to do anything to fix this, since the issue will resolve itself once the large merges finish. If you find this unacceptable, you can restore the previous value for the `max_bytes_to_merge_at_max_space_in_pool` setting (to do this, go to the `` section in config.xml, set `107374182400` and restart the server). + # ClickHouse release 1.1.54284 * This is bugfix release for previous 1.1.54282 release. It fixes ZooKeeper nodes leak in `parts/` directory. diff --git a/CHANGELOG_RU.md b/CHANGELOG_RU.md index 6ac2620cbac..4003edde1fd 100644 --- a/CHANGELOG_RU.md +++ b/CHANGELOG_RU.md @@ -1,3 +1,41 @@ +# Релиз ClickHouse 1.1.54289 + +## Новые возможности: +* Запросы `SYSTEM` для административных действий с сервером: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`. +* Добавлены функции для работы с массивами: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`. +* Добавлены параметры `root` и `identity` для конфигурации ZooKeeper. Это позволяет изолировать разных пользователей одного ZooKeeper кластера. +* Добавлены агрегатные функции `groupBitAnd`, `groupBitOr`, `groupBitXor` (для совместимости доступны также под именами `BIT_AND`, `BIT_OR`, `BIT_XOR`). +* Возможность загрузки внешних словарей из MySQL с указанием сокета на файловой системе. +* Возможность загрузки внешних словарей из MySQL через SSL соединение (параметры `ssl_cert`, `ssl_key`, `ssl_ca`). +* Добавлена настройка `max_network_bandwidth_for_user` для ограничения общего потребления сети для всех запросов одного пользователя. +* Поддержка `DROP TABLE` для временных таблиц. +* Поддержка чтения значений типа `DateTime` в формате unix timestamp из форматов `CSV` и `JSONEachRow`. +* Включено по-умолчанию отключение отстающих реплик при распределённых запросах (по-умолчанию порог равен 5 минутам). +* Используются FIFO блокировки при ALTER: выполнение ALTER не будет неограниченно блокироваться при непрерывно выполняющихся запросах. +* Возможность задать `umask` в конфигурационном файле. +* Увеличена производительность запросов с `DISTINCT`. + +## Исправления ошибок: +* Более оптимальная процедура удаления старых нод в ZooKeeper. Ранее в случае очень частых вставок, старые ноды могли не успевать удаляться, что приводило, в том числе, к очень долгому завершению сервера. +* Исправлена рандомизация при выборе хостов для соединения с ZooKeeper. +* Исправлено отключение отстающей реплики при распределённых запросах, если реплика является localhost. +* Исправлена ошибка, в связи с которой кусок данных таблицы типа `ReplicatedMergeTree` мог становиться битым после выполнения `ALTER MODIFY` элемента `Nested` структуры. +* Исправлена ошибка приводящая к возможному зависанию SELECT запросов. +* Доработки распределённых DDL запросов. +* Исправлен запрос `CREATE TABLE ... AS `. +* Исправлен дедлок при запросе `ALTER ... CLEAR COLUMN IN PARTITION` для `Buffer` таблиц. +* Исправлено использование неправильного значения по-умолчанию для `Enum`-ов (0 вместо минимального) при использовании форматов `JSONEachRow` и `TSKV`. +* Исправлено появление zombie процессов при работе со словарём с источником `executable`. +* Исправлен segfault при запросе HEAD. + +## Улучшения процесса разработки и сборки ClickHouse: +* Возможность сборки с помощью `pbuilder`. +* Возможность сборки с использованием `libc++` вместо `libstdc++` под Linux. +* Добавлены инструкции для использования статических анализаторов кода `Coverity`, `clang-tidy`, `cppcheck`. + +## На что обратить внимание при обновлении: +* Увеличено значение по-умолчанию для настройки MergeTree `max_bytes_to_merge_at_max_space_in_pool` (максимальный суммарный размер кусков в байтах для мержа) со 100 GiB до 150 GiB. Это может привести к запуску больших мержей после обновления сервера, что может вызвать повышенную нагрузку на дисковую подсистему. Если же на серверах, где это происходит, количество свободного места менее чем в два раза больше суммарного объёма выполняющихся мержей, то в связи с этим перестанут выполняться какие-либо другие мержи, включая мержи мелких кусков. Это приведёт к тому, что INSERT-ы будут отклоняться с сообщением "Merges are processing significantly slower than inserts". Для наблюдения, используйте запрос `SELECT * FROM system.merges`. Вы также можете смотреть на метрику `DiskSpaceReservedForMerge` в таблице `system.metrics` или в Graphite. Для исправления этой ситуации можно ничего не делать, так как она нормализуется сама после завершения больших мержей. Если же вас это не устраивает, вы можете вернуть настройку `max_bytes_to_merge_at_max_space_in_pool` в старое значение, прописав в config.xml в секции `` `107374182400` и перезапустить сервер. + # Релиз ClickHouse 1.1.54284 * Релиз содержит изменения к предыдущему релизу 1.1.54282, которые исправляют утечку записей о кусках в ZooKeeper diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e0fe38e84a..a73871109ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,11 +71,16 @@ if (USE_STATIC_LIBRARIES) list(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES) endif () -option (GLIBC_COMPATIBILITY "Set to TRUE to enable compatibility with older glibc libraries. Note that it is not compatible with ASan." OFF) +if (CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") + option (USE_INTERNAL_MEMCPY "Use internal implementation of 'memcpy' function instead of provided by libc. Only for x86_64." ON) + + if (CMAKE_SYSTEM MATCHES "Linux") + option (GLIBC_COMPATIBILITY "Set to TRUE to enable compatibility with older glibc libraries. Only for x86_64, Linux. Implies USE_INTERNAL_MEMCPY." ON) + endif() +endif () if (GLIBC_COMPATIBILITY) - set (GLIBC_COMPATIBILITY_COMPILE_FLAGS "-include ${ClickHouse_SOURCE_DIR}/libs/libcommon/include/common/glibc_compatibility.h") - set (GLIBC_COMPATIBILITY_LINK_FLAGS "-Wl,--wrap=memcpy") + set (USE_INTERNAL_MEMCPY ON) endif () if (CXX11_ABI STREQUAL ENABLE) @@ -107,6 +112,11 @@ if (USE_LIBCXX) set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_LIBCPP_DEBUG=1") # More checks in debug build. endif () +# Special options for better optimized code with clang +#if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +# set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -Wno-unused-command-line-argument -mllvm -inline-threshold=10000") +#endif () + set (CMAKE_BUILD_COLOR_MAKEFILE ON) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS} -std=gnu++1z ${PLATFORM_EXTRA_CXX_FLAG} -fno-omit-frame-pointer ${COMMON_WARNING_FLAGS} ${CXX_WARNING_FLAGS} ${GLIBC_COMPATIBILITY_COMPILE_FLAGS}") #set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") @@ -192,7 +202,7 @@ if (UNBUNDLED) else () set(NOT_UNBUNDLED 1) endif () -# Using system libs can cause lot of warnings in includes. +# Using system libs can cause lot of warnings in includes. if (UNBUNDLED OR NOT (CMAKE_SYSTEM MATCHES "Linux" OR APPLE) OR ARCH_32) option (NO_WERROR "Disable -Werror compiler option" ON) endif () diff --git a/contrib/libboost/boost_1_65_0/libs/filesystem/src/operations.cpp b/contrib/libboost/boost_1_65_0/libs/filesystem/src/operations.cpp index 4114e02a1a3..fb4c8f60973 100644 --- a/contrib/libboost/boost_1_65_0/libs/filesystem/src/operations.cpp +++ b/contrib/libboost/boost_1_65_0/libs/filesystem/src/operations.cpp @@ -2394,7 +2394,12 @@ namespace detail && (filename.size()== 1 || (filename[1] == dot && filename.size()== 2))) - { it.increment(*ec); } + { + if (ec) + it.increment(*ec); + else + it.increment(); + } } } diff --git a/contrib/libzlib-ng/CMakeLists.txt b/contrib/libzlib-ng/CMakeLists.txt index 7054ab81115..cd2eeb97c55 100644 --- a/contrib/libzlib-ng/CMakeLists.txt +++ b/contrib/libzlib-ng/CMakeLists.txt @@ -489,39 +489,15 @@ if(MINGW OR MSYS) set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) endif(MINGW OR MSYS) -add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_GZFILE_SRCS} ${ZLIB_ARCH_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_GZFILE_SRCS} ${ZLIB_ARCH_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) -set_target_properties(zlib PROPERTIES SOVERSION 1) - -if(NOT CYGWIN) - # This property causes shared libraries on Linux to have the full version - # encoded into their final filename. We disable this on Cygwin because - # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll - # seems to be the default. - # - # This has no effect with MSVC, on that platform the version info for - # the DLL comes from the resource file win32/zlib1.rc - set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) -endif() - if(UNIX) # On unix-like platforms the library is almost always called libz - set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) - if(NOT APPLE) - set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") - endif() -elseif(MSYS) - # Suppress version number from shared library name - set(CMAKE_SHARED_LIBRARY_NAME_WITH_VERSION 0) -elseif(BUILD_SHARED_LIBS AND WIN32) - # Creates zlib1.dll when building shared library version - set_target_properties(zlib PROPERTIES SUFFIX "1.dll") + set_target_properties(zlibstatic PROPERTIES OUTPUT_NAME z) endif() if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) - install(TARGETS zlib zlibstatic + install(TARGETS zlibstatic RUNTIME DESTINATION "${INSTALL_BIN_DIR}" ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) @@ -529,35 +505,6 @@ endif() if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) - install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3") -endif() if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") endif() - -#============================================================================ -# Example binaries -#============================================================================ - -if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set (CMAKE_EXE_LINKER_FLAGS "") -endif () - -add_executable(example test/example.c) -target_link_libraries(example zlib) -add_test(example example) - -add_executable(minigzip test/minigzip.c) -target_link_libraries(minigzip zlib) - -if(HAVE_OFF64_T) - add_executable(example64 test/example.c) - target_link_libraries(example64 zlib) - set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - add_test(example64 example64) - - add_executable(minigzip64 test/minigzip.c) - target_link_libraries(minigzip64 zlib) - set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") -endif() diff --git a/copy_headers.sh b/copy_headers.sh index 69a1d366180..cafd6cc9baa 100755 --- a/copy_headers.sh +++ b/copy_headers.sh @@ -16,7 +16,8 @@ # sudo ./copy_headers.sh . /usr/share/clickhouse/headers/ SOURCE_PATH=${1:-.} -DST=${2:-$SOURCE_PATH/../headers}; +DST=${2:-$SOURCE_PATH/../headers} +BUILD_PATH=${3:-$SOURCE_PATH/build} PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:$PATH" @@ -24,14 +25,19 @@ if [[ -z $CLANG ]]; then CLANG="clang" fi +START_HEADERS=$(echo \ + $BUILD_PATH/dbms/src/Common/config_version.h \ + $SOURCE_PATH/dbms/src/Interpreters/SpecializedAggregator.h \ + $SOURCE_PATH/dbms/src/AggregateFunctions/AggregateFunction*.h) + # Опция -mcx16 для того, чтобы выбиралось больше заголовочных файлов (с запасом). -for src_file in $($CLANG -M -xc++ -std=gnu++1z -Wall -Werror -msse4 -mcx16 -mpopcnt -O3 -g -fPIC \ - $(cat "$SOURCE_PATH/build/include_directories.txt") \ - "$SOURCE_PATH/build/dbms/src/Common/config_version.h" \ - "$SOURCE_PATH/dbms/src/Interpreters/SpecializedAggregator.h" | +for src_file in $(echo | $CLANG -M -xc++ -std=gnu++1z -Wall -Werror -msse4 -mcx16 -mpopcnt -O3 -g -fPIC \ + $(cat "$BUILD_PATH/include_directories.txt") \ + $(echo $START_HEADERS | sed -r -e 's/[^ ]+/-include \0/g') \ + - | tr -d '\\' | - sed -r -e 's/^\w+\.o://'); + sed -r -e 's/^-\.o://'); do dst_file=$src_file; dst_file=$(echo $dst_file | sed -r -e 's/build\///') # for simplicity reasons, will put generated headers near the rest. diff --git a/dbms/src/AggregateFunctions/AggregateFunctionArgMinMax.h b/dbms/src/AggregateFunctions/AggregateFunctionArgMinMax.h index d893bae6ea2..1a1dfb8de4d 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionArgMinMax.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionArgMinMax.h @@ -69,6 +69,8 @@ public: { this->data(place).result.insertResultInto(to); } + + const char * getHeaderFilePath() const override { return __FILE__; } }; } diff --git a/dbms/src/AggregateFunctions/AggregateFunctionArray.h b/dbms/src/AggregateFunctions/AggregateFunctionArray.h index ab5f3a75baa..98dc4d18b7e 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionArray.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionArray.h @@ -132,6 +132,8 @@ public: } IAggregateFunction::AddFunc getAddressOfAddFunction() const override final { return &addFree; } + + const char * getHeaderFilePath() const override { return __FILE__; } }; } diff --git a/dbms/src/AggregateFunctions/AggregateFunctionAvg.h b/dbms/src/AggregateFunctions/AggregateFunctionAvg.h index a073b279583..44fee37959f 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionAvg.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionAvg.h @@ -70,6 +70,8 @@ public: static_cast(to).getData().push_back( static_cast(this->data(place).sum) / this->data(place).count); } + + const char * getHeaderFilePath() const override { return __FILE__; } }; diff --git a/dbms/src/AggregateFunctions/AggregateFunctionBitwise.h b/dbms/src/AggregateFunctions/AggregateFunctionBitwise.h index 281a7c122ea..ffb7b994e75 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionBitwise.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionBitwise.h @@ -81,6 +81,8 @@ public: { static_cast &>(to).getData().push_back(this->data(place).value); } + + const char * getHeaderFilePath() const override { return __FILE__; } }; diff --git a/dbms/src/AggregateFunctions/AggregateFunctionCount.h b/dbms/src/AggregateFunctions/AggregateFunctionCount.h index 1ebfb3c97cb..6e6729314c0 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionCount.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionCount.h @@ -70,6 +70,8 @@ public: { data(place).count += x; } + + const char * getHeaderFilePath() const override { return __FILE__; } }; @@ -114,6 +116,8 @@ public: { static_cast(to).getData().push_back(data(place).count); } + + const char * getHeaderFilePath() const override { return __FILE__; } }; @@ -183,6 +187,8 @@ public: static_cast(to).getData().push_back(data(place).count); } + const char * getHeaderFilePath() const override { return __FILE__; } + private: enum { MAX_ARGS = 8 }; size_t number_of_arguments = 0; diff --git a/dbms/src/AggregateFunctions/AggregateFunctionDebug.cpp b/dbms/src/AggregateFunctions/AggregateFunctionDebug.cpp deleted file mode 100644 index c17030b5115..00000000000 --- a/dbms/src/AggregateFunctions/AggregateFunctionDebug.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -#include -#include -#include -#include - - -namespace DB -{ - - -/** State management of aggregate functions is done in a non-trivial way: - * - the memory for them needs to be allocated in the pool, - * pointers to these states can be passed between different data structures, - * herewith, you can not make RAII wrappers for each individual state. - * For more information, see Aggregator.h. - * - * In this regard, there are difficult-debugging bugs. - * To simplify the playback of bugs, an aggregate `debug` function was written, - * and its source code is decided not to delete after debugging. - * - * This aggregate function takes zero arguments and does nothing. - * But it has a state that is non-trivially created and destroyed. - */ - - -struct AggregateFunctionDebugData -{ - std::unique_ptr ptr { new size_t(0xABCDEF01DEADBEEF) }; - AggregateFunctionDebugData() {} - ~AggregateFunctionDebugData() - { - if (*ptr != 0xABCDEF01DEADBEEF) - { - std::cerr << "Bug!"; - abort(); - } - - ptr.reset(); - } -}; - - -class AggregateFunctionDebug final : public INullaryAggregateFunction -{ -public: - String getName() const override { return "debug"; } - - DataTypePtr getReturnType() const override - { - return std::make_shared(); - } - - void addImpl(AggregateDataPtr place) const - { - } - - void merge(AggregateDataPtr place, ConstAggregateDataPtr rhs, Arena * arena) const override - { - } - - void serialize(ConstAggregateDataPtr place, WriteBuffer & buf) const override - { - writeBinary(UInt8(0), buf); - } - - void deserialize(AggregateDataPtr place, ReadBuffer & buf, Arena *) const override - { - UInt8 tmp; - readBinary(tmp, buf); - } - - void insertResultInto(ConstAggregateDataPtr place, IColumn & to) const override - { - static_cast(to).getData().push_back(0); - } -}; - - -AggregateFunctionPtr createAggregateFunctionDebug(const std::string & name, const DataTypes & argument_types, const Array & parameters) -{ - return std::make_shared(); -} - - -void registerAggregateFunctionDebug(AggregateFunctionFactory & factory) -{ - factory.registerFunction("debug", createAggregateFunctionDebug); -} - -} diff --git a/dbms/src/AggregateFunctions/AggregateFunctionForEach.h b/dbms/src/AggregateFunctions/AggregateFunctionForEach.h index ae5e984a580..0106ef09351 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionForEach.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionForEach.h @@ -245,6 +245,8 @@ public: } IAggregateFunction::AddFunc getAddressOfAddFunction() const override final { return &addFree; } + + const char * getHeaderFilePath() const override { return __FILE__; } }; diff --git a/dbms/src/AggregateFunctions/AggregateFunctionGroupArray.cpp b/dbms/src/AggregateFunctions/AggregateFunctionGroupArray.cpp index 6019cb3bf06..ead604e30ee 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionGroupArray.cpp +++ b/dbms/src/AggregateFunctions/AggregateFunctionGroupArray.cpp @@ -8,7 +8,7 @@ namespace DB namespace { -template