mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Merge branch 'master' of github.com:yandex/ClickHouse
This commit is contained in:
commit
24b071e017
@ -128,14 +128,14 @@ endif ()
|
||||
#endif ()
|
||||
|
||||
if (CMAKE_VERSION VERSION_LESS "3.8.0")
|
||||
if (NOT MSVC)
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z")
|
||||
endif ()
|
||||
else ()
|
||||
set (CMAKE_CXX_STANDARD 17)
|
||||
set (CMAKE_CXX_EXTENSIONS 0) # https://cmake.org/cmake/help/latest/prop_tgt/CXX_EXTENSIONS.html#prop_tgt:CXX_EXTENSIONS
|
||||
set (CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set (CXX_FLAGS_INTERNAL_COMPILER "-std=c++1z")
|
||||
# This needs to propagate to vendored projects in contrib
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
||||
endif ()
|
||||
|
||||
set (CMAKE_BUILD_COLOR_MAKEFILE ON)
|
||||
|
2
contrib/CMakeLists.txt
vendored
2
contrib/CMakeLists.txt
vendored
@ -1,5 +1,5 @@
|
||||
if (NOT MSVC)
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-old-style-cast")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-old-style-cast -std=c++1z")
|
||||
endif ()
|
||||
|
||||
if (USE_INTERNAL_BOOST_LIBRARY)
|
||||
|
@ -116,3 +116,10 @@
|
||||
/* Define to the type of an unsigned integer type of width exactly 8 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
/* #undef uint8_t */
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <basetsd.h>
|
||||
typedef SSIZE_T ssize_t;
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
SOURCE_PATH=${1:-.}
|
||||
DST=${2:-$SOURCE_PATH/../headers}
|
||||
BUILD_PATH=${3:-$SOURCE_PATH/build}
|
||||
BUILD_PATH=${BUILD_PATH=${3:-$SOURCE_PATH/build}}
|
||||
|
||||
PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:$PATH"
|
||||
|
||||
@ -30,24 +30,29 @@ START_HEADERS=$(echo \
|
||||
$SOURCE_PATH/dbms/src/Interpreters/SpecializedAggregator.h \
|
||||
$SOURCE_PATH/dbms/src/AggregateFunctions/AggregateFunction*.h)
|
||||
|
||||
for header in $START_HEADERS; do
|
||||
START_HEADERS_INCLUDE+="-include $header "
|
||||
done
|
||||
|
||||
# Опция -mcx16 для того, чтобы выбиралось больше заголовочных файлов (с запасом).
|
||||
# The latter options are the same that are added while building packages.
|
||||
|
||||
# TODO: Does not work on macos:
|
||||
GCC_ROOT=`$CLANG -v 2>&1 | grep "Selected GCC installation"| sed -n -e 's/^.*: //p'`
|
||||
|
||||
for src_file in $(echo | $CLANG -M -xc++ -std=c++1z -Wall -Werror -msse4 -mcx16 -mpopcnt -O3 -g -fPIC -fstack-protector -D_FORTIFY_SOURCE=2 \
|
||||
-I $GCC_ROOT/include \
|
||||
-I $GCC_ROOT/include-fixed \
|
||||
$(cat "$BUILD_PATH/include_directories.txt") \
|
||||
$(echo $START_HEADERS | sed -r -e 's/[^ ]+/-include \0/g') \
|
||||
$START_HEADERS_INCLUDE \
|
||||
- |
|
||||
tr -d '\\' |
|
||||
sed -r -e 's/^-\.o://');
|
||||
sed -E -e 's/^-\.o://');
|
||||
do
|
||||
dst_file=$src_file;
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -r -e "s!^$DESTDIR!!")
|
||||
dst_file=$(echo $dst_file | sed -r -e 's/build\///') # for simplicity reasons, will put generated headers near the rest.
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -r -e 's/\/[^/]*$/\//')";
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -E -e "s!^$DESTDIR!!")
|
||||
dst_file=$(echo $dst_file | sed -E -e 's/build\///') # for simplicity reasons, will put generated headers near the rest.
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -E -e 's/\/[^/]*$/\//')";
|
||||
cp "$src_file" "$DST/$dst_file";
|
||||
done
|
||||
|
||||
@ -58,8 +63,8 @@ done
|
||||
for src_file in $(ls -1 $($CLANG -v -xc++ - <<<'' 2>&1 | grep '^ /' | grep 'include' | grep -E '/lib/clang/|/include/clang/')/*.h | grep -vE 'arm|altivec|Intrin');
|
||||
do
|
||||
dst_file=$src_file;
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -r -e "s!^$DESTDIR!!")
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -r -e 's/\/[^/]*$/\//')";
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -E -e "s!^$DESTDIR!!")
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -E -e 's/\/[^/]*$/\//')";
|
||||
cp "$src_file" "$DST/$dst_file";
|
||||
done
|
||||
|
||||
@ -67,15 +72,15 @@ done
|
||||
for src_file in $(ls -1 $SOURCE_PATH/contrib/boost/libs/smart_ptr/include/boost/smart_ptr/detail/*);
|
||||
do
|
||||
dst_file=$src_file;
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -r -e "s!^$DESTDIR!!")
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -r -e 's/\/[^/]*$/\//')";
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -E -e "s!^$DESTDIR!!")
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -E -e 's/\/[^/]*$/\//')";
|
||||
cp "$src_file" "$DST/$dst_file";
|
||||
done
|
||||
|
||||
for src_file in $(ls -1 $SOURCE_PATH/contrib/boost/boost/smart_ptr/detail/*);
|
||||
do
|
||||
dst_file=$src_file;
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -r -e "s!^$DESTDIR!!")
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -r -e 's/\/[^/]*$/\//')";
|
||||
[ -n $DESTDIR ] && dst_file=$(echo $dst_file | sed -E -e "s!^$DESTDIR!!")
|
||||
mkdir -p "$DST/$(echo $dst_file | sed -E -e 's/\/[^/]*$/\//')";
|
||||
cp "$src_file" "$DST/$dst_file";
|
||||
done
|
||||
|
@ -246,8 +246,9 @@ target_include_directories (clickhouse_common_io BEFORE PUBLIC ${DOUBLE_CONVERSI
|
||||
target_include_directories (clickhouse_common_io BEFORE PRIVATE ${COMMON_INCLUDE_DIR})
|
||||
|
||||
if (USE_EMBEDDED_COMPILER)
|
||||
add_custom_target(copy-headers ALL env CLANG=${CMAKE_CURRENT_BINARY_DIR}/src/Server/clickhouse-clang DESTDIR=${ClickHouse_SOURCE_DIR} ${ClickHouse_SOURCE_DIR}/copy_headers.sh ${ClickHouse_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/headers DEPENDS clickhouse-clang WORKING_DIRECTORY ${ClickHouse_SOURCE_DIR} SOURCES ${ClickHouse_SOURCE_DIR}/copy_headers.sh)
|
||||
add_custom_target(copy-headers ALL env CLANG=${CMAKE_CURRENT_BINARY_DIR}/src/Server/clickhouse-clang BUILD_PATH=${ClickHouse_BINARY_DIR} DESTDIR=${ClickHouse_SOURCE_DIR} ${ClickHouse_SOURCE_DIR}/copy_headers.sh ${ClickHouse_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/headers DEPENDS clickhouse-clang WORKING_DIRECTORY ${ClickHouse_SOURCE_DIR} SOURCES ${ClickHouse_SOURCE_DIR}/copy_headers.sh)
|
||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/headers DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/clickhouse COMPONENT clickhouse)
|
||||
add_dependencies(clickhouse-bundle copy-headers)
|
||||
endif ()
|
||||
|
||||
add_subdirectory (tests)
|
||||
|
@ -85,25 +85,27 @@ public:
|
||||
void addEndpoint(const String & name, InterserverIOEndpointPtr endpoint)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
if (endpoint_map.count(name))
|
||||
bool inserted = endpoint_map.try_emplace(name, std::move(endpoint)).second;
|
||||
if (!inserted)
|
||||
throw Exception("Duplicate interserver IO endpoint: " + name, ErrorCodes::DUPLICATE_INTERSERVER_IO_ENDPOINT);
|
||||
endpoint_map[name] = std::move(endpoint);
|
||||
}
|
||||
|
||||
void removeEndpoint(const String & name)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
if (!endpoint_map.count(name))
|
||||
if (!endpoint_map.erase(name))
|
||||
throw Exception("No interserver IO endpoint named " + name, ErrorCodes::NO_SUCH_INTERSERVER_IO_ENDPOINT);
|
||||
endpoint_map.erase(name);
|
||||
}
|
||||
|
||||
InterserverIOEndpointPtr getEndpoint(const String & name)
|
||||
try
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
if (!endpoint_map.count(name))
|
||||
return endpoint_map.at(name);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw Exception("No interserver IO endpoint named " + name, ErrorCodes::NO_SUCH_INTERSERVER_IO_ENDPOINT);
|
||||
return endpoint_map[name];
|
||||
}
|
||||
|
||||
private:
|
||||
@ -129,7 +131,6 @@ public:
|
||||
}
|
||||
|
||||
~InterserverIOEndpointHolder()
|
||||
{
|
||||
try
|
||||
{
|
||||
handler.removeEndpoint(name);
|
||||
@ -140,7 +141,6 @@ public:
|
||||
{
|
||||
tryLogCurrentException("~InterserverIOEndpointHolder");
|
||||
}
|
||||
}
|
||||
|
||||
ActionBlocker & getBlocker() { return endpoint->blocker; }
|
||||
|
||||
|
@ -198,7 +198,7 @@ void ITableDeclaration::check(const NamesAndTypesList & provided_columns, const
|
||||
throw Exception("There is no column with name " + name + ". There are columns: "
|
||||
+ listOfColumns(available_columns), ErrorCodes::NO_SUCH_COLUMN_IN_TABLE);
|
||||
|
||||
if (it->second->getName() != jt->second->getName())
|
||||
if (!it->second->equals(*jt->second))
|
||||
throw Exception("Type mismatch for column " + name + ". Column has type "
|
||||
+ jt->second->getName() + ", got type " + it->second->getName(), ErrorCodes::TYPE_MISMATCH);
|
||||
|
||||
|
@ -359,5 +359,10 @@ if __name__ == '__main__':
|
||||
if args.client is None:
|
||||
args.client = args.binary + '-client'
|
||||
if args.configclient:
|
||||
args.client += ' -c' + args.configclient
|
||||
args.client += ' --config-file=' + args.configclient
|
||||
if os.getenv("CLICKHOUSE_HOST"):
|
||||
args.client += ' --host=' + os.getenv("CLICKHOUSE_HOST")
|
||||
if os.getenv("CLICKHOUSE_PORT_TCP"):
|
||||
args.client += ' --port=' + os.getenv("CLICKHOUSE_PORT_TCP")
|
||||
|
||||
main(args)
|
||||
|
@ -21,10 +21,27 @@ CONFIG_CLIENT=${CONFIG_CLIENT:=${CONFIG_CLIENT_DIR}client-test.xml}
|
||||
export CLICKHOUSE_CONFIG=${CLICKHOUSE_CONFIG:=${CONFIG_SERVER_DIR}server-test.xml}
|
||||
[ -x "$CUR_DIR/clickhouse-test" ] && TEST_DIR=${TEST_DIR=$CUR_DIR/}
|
||||
[ -d "$CUR_DIR/queries" ] && QUERIES_DIR=${QUERIES_DIR=$CUR_DIR/queries}
|
||||
[ ! -d "$QUERIES_DIR" ] && QUERIES_DIR=${QUERIES_DIR=/usr/local/share/clickhouse-test/queries}
|
||||
[ ! -d "$QUERIES_DIR" ] && QUERIES_DIR=${QUERIES_DIR=/usr/share/clickhouse-test/queries}
|
||||
[ ! -d "$QUERIES_DIR" ] && [ -d "/usr/local/share/clickhouse-test/queries" ] && QUERIES_DIR=${QUERIES_DIR=/usr/local/share/clickhouse-test/queries}
|
||||
[ ! -d "$QUERIES_DIR" ] && [ -d "/usr/share/clickhouse-test/queries" ] && QUERIES_DIR=${QUERIES_DIR=/usr/share/clickhouse-test/queries}
|
||||
CLICKHOUSE_EXTRACT_CONFIG=${CLICKHOUSE_EXTRACT_CONFIG:="${BIN_DIR}${CLICKHOUSE_BINARY}-extract-from-config --config=$CLICKHOUSE_CONFIG"}
|
||||
|
||||
PORT_RANDOM=${PORT_RANDOM=1}
|
||||
if [ "${PORT_RANDOM}" ]; then
|
||||
CLICKHOUSE_PORT_BASE=${CLICKHOUSE_PORT_BASE:=$(( ( RANDOM % 50000 ) + 10000 ))}
|
||||
CLICKHOUSE_PORT_TCP=${CLICKHOUSE_PORT_TCP:=$(($CLICKHOUSE_PORT_BASE + 1))}
|
||||
CLICKHOUSE_PORT_HTTP=${CLICKHOUSE_PORT_HTTP:=$(($CLICKHOUSE_PORT_BASE + 2))}
|
||||
CLICKHOUSE_PORT_INTERSERVER=${CLICKHOUSE_PORT_INTERSERVER:=$(($CLICKHOUSE_PORT_BASE + 3))}
|
||||
CLICKHOUSE_PORT_TCP_SECURE=${CLICKHOUSE_PORT_TCP_SECURE:=$(($CLICKHOUSE_PORT_BASE + 4))}
|
||||
CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:=$(($CLICKHOUSE_PORT_BASE + 5))}
|
||||
fi
|
||||
|
||||
export CLICKHOUSE_PORT_TCP=${CLICKHOUSE_PORT_TCP:=`$CLICKHOUSE_EXTRACT_CONFIG --key=tcp_port`}
|
||||
export CLICKHOUSE_PORT_HTTP=${CLICKHOUSE_PORT_HTTP:=`$CLICKHOUSE_EXTRACT_CONFIG --key=http_port`}
|
||||
export CLICKHOUSE_PORT_INTERSERVER=${CLICKHOUSE_PORT_INTERSERVER:=`$CLICKHOUSE_EXTRACT_CONFIG --key=interserver_http_port`}
|
||||
export CLICKHOUSE_PORT_TCP_SECURE=${CLICKHOUSE_PORT_TCP_SECURE:=`$CLICKHOUSE_EXTRACT_CONFIG --key=tcp_port_secure`}
|
||||
export CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:=`$CLICKHOUSE_EXTRACT_CONFIG --key=https_port`}
|
||||
|
||||
|
||||
rm -rf $DATA_DIR
|
||||
mkdir -p $LOG_DIR
|
||||
|
||||
@ -42,7 +59,7 @@ fi
|
||||
|
||||
# Start a local clickhouse server which will be used to run tests
|
||||
#PATH=$PATH:$BIN_DIR \
|
||||
$GDB ${BIN_DIR}clickhouse-server --config-file=$CLICKHOUSE_CONFIG > $LOG_DIR/stdout 2>&1 &
|
||||
$GDB ${BIN_DIR}clickhouse-server --config-file=$CLICKHOUSE_CONFIG -- --http_port=$CLICKHOUSE_PORT_HTTP --tcp_port=$CLICKHOUSE_PORT_TCP --https_port=$CLICKHOUSE_PORT_HTTPS --tcp_port_secure=$CLICKHOUSE_PORT_TCP_SECURE --interserver_http_port=$CLICKHOUSE_PORT_INTERSERVER > $LOG_DIR/stdout 2>&1 &
|
||||
CH_PID=$!
|
||||
sleep 3
|
||||
|
||||
@ -71,7 +88,7 @@ if [ -n "$*" ]; then
|
||||
else
|
||||
TEST_RUN=${TEST_RUN=1}
|
||||
TEST_PERF=${TEST_PERF=1}
|
||||
${BIN_DIR}clickhouse-client --config ${CONFIG_CLIENT} -q 'SELECT * from system.build_options;'
|
||||
${BIN_DIR}clickhouse-client --config ${CONFIG_CLIENT} --port $CLICKHOUSE_PORT_TCP -q 'SELECT * from system.build_options;'
|
||||
[ "$TEST_RUN" ] && env PATH=$PATH:$BIN_DIR ${TEST_DIR}clickhouse-test --binary ${BIN_DIR}clickhouse --configclient $CONFIG_CLIENT --configserver $CLICKHOUSE_CONFIG --tmp $DATA_DIR/tmp --queries $QUERIES_DIR $TEST_OPT0 $TEST_OPT
|
||||
( [ "$TEST_PERF" ] && ${BIN_DIR}clickhouse-performance-test --port `$CLICKHOUSE_EXTRACT_CONFIG --key=tcp_port` --r $CUR_DIR/performance --skip-tags=long $* ) || true
|
||||
( [ "$TEST_PERF" ] && ${BIN_DIR}clickhouse-performance-test --port $CLICKHOUSE_PORT_TCP --r $CUR_DIR/performance --skip-tags=long $* ) || true
|
||||
fi
|
||||
|
@ -16,6 +16,8 @@ Don't use Docker from your system repository.
|
||||
* [py.test](https://docs.pytest.org/) testing framework. To install: `sudo -H pip install pytest`
|
||||
* [docker-compose](https://docs.docker.com/compose/) and additional python libraries. To install: `sudo -H pip install docker-compose docker dicttoxml kazoo PyMySQL`
|
||||
|
||||
If you want install on modern debian/ubuntu: `sudo apt install -y docker docker-compose python-pytest python-dicttoxml python-docker python-pymysql python-kazoo`
|
||||
|
||||
If you want to run the tests under a non-privileged user, you must add this user to `docker` group: `sudo usermod -aG docker $USER` and re-login.
|
||||
(You must close all your sessions (for example, restart your computer))
|
||||
To check, that you have access to Docker, run `docker ps`.
|
||||
|
2
debian/clickhouse-server.service
vendored
2
debian/clickhouse-server.service
vendored
@ -5,8 +5,10 @@ Description=ClickHouse Server (analytic DBMS for big data)
|
||||
Type=simple
|
||||
User=clickhouse
|
||||
Group=clickhouse
|
||||
PermissionsStartOnly=true
|
||||
Restart=always
|
||||
RestartSec=30
|
||||
ExecStartPre=/usr/bin/chown clickhouse:clickhouse -R /etc/clickhouse-server
|
||||
ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml
|
||||
LimitCORE=infinity
|
||||
LimitNOFILE=500000
|
||||
|
57
debian/pbuilder-hooks/B90test-server
vendored
57
debian/pbuilder-hooks/B90test-server
vendored
@ -2,38 +2,61 @@
|
||||
set -e
|
||||
set -x
|
||||
|
||||
for PKG in $(ls /tmp/buildd/*.deb | sed -e's,.*/,,;s,_.*,,' ); do
|
||||
TEST_CONNECT=${TEST_CONNECT=1}
|
||||
TEST_SSL=${TEST_SSL=1}
|
||||
PACKAGE_INSTALL=${PACKAGE_INSTALL=1}
|
||||
PORT_RANDOM=${PORT_RANDOM=1}
|
||||
|
||||
if [ "${PACKAGE_INSTALL}" ]; then
|
||||
for PKG in $(ls /tmp/buildd/*.deb | sed -e's,.*/,,;s,_.*,,' ); do
|
||||
apt-get install -y --force-yes "$PKG" || true
|
||||
apt-get remove -y "$PKG" || true
|
||||
done
|
||||
done
|
||||
|
||||
dpkg --auto-deconfigure -i /tmp/buildd/*.deb || true
|
||||
apt install -y -f --allow-downgrades || true
|
||||
dpkg -l | grep clickhouse || true
|
||||
dpkg --auto-deconfigure -i /tmp/buildd/*.deb || true
|
||||
apt install -y -f --allow-downgrades || true
|
||||
dpkg -l | grep clickhouse || true
|
||||
|
||||
# Some test references uses specific timezone
|
||||
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
|
||||
echo 'Europe/Moscow' > /etc/timezone
|
||||
dpkg-reconfigure -f noninteractive tzdata
|
||||
# Some test references uses specific timezone
|
||||
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
|
||||
echo 'Europe/Moscow' > /etc/timezone
|
||||
dpkg-reconfigure -f noninteractive tzdata
|
||||
fi
|
||||
|
||||
mkdir -p /etc/clickhouse-server/config.d /etc/clickhouse-client/config.d
|
||||
|
||||
TEST_CONNECT=${TEST_CONNECT=1}
|
||||
if [ "${TEST_CONNECT}" ]; then
|
||||
if [ "${PORT_RANDOM}" ]; then
|
||||
CLICKHOUSE_PORT_BASE=${CLICKHOUSE_PORT_BASE:=$(( ( RANDOM % 50000 ) + 10000 ))}
|
||||
CLICKHOUSE_PORT_TCP=${CLICKHOUSE_PORT_TCP:=$(($CLICKHOUSE_PORT_BASE + 1))}
|
||||
CLICKHOUSE_PORT_HTTP=${CLICKHOUSE_PORT_HTTP:=$(($CLICKHOUSE_PORT_BASE + 2))}
|
||||
CLICKHOUSE_PORT_INTERSERVER=${CLICKHOUSE_PORT_INTERSERVER:=$(($CLICKHOUSE_PORT_BASE + 3))}
|
||||
CLICKHOUSE_PORT_TCP_SECURE=${CLICKHOUSE_PORT_TCP_SECURE:=$(($CLICKHOUSE_PORT_BASE + 4))}
|
||||
CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:=$(($CLICKHOUSE_PORT_BASE + 5))}
|
||||
fi
|
||||
|
||||
export CLICKHOUSE_PORT_TCP=${CLICKHOUSE_PORT_TCP:=9000}
|
||||
export CLICKHOUSE_PORT_HTTP=${CLICKHOUSE_PORT_HTTP:=8123}
|
||||
export CLICKHOUSE_PORT_INTERSERVER=${CLICKHOUSE_PORT_INTERSERVER:=9009}
|
||||
export CLICKHOUSE_PORT_TCP_SECURE=${CLICKHOUSE_PORT_TCP_SECURE:=9440}
|
||||
export CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:=8443}
|
||||
|
||||
if [ "${TEST_CONNECT}" ]; then
|
||||
[ "${PORT_RANDOM}" ] && echo "<yandex><http_port>${CLICKHOUSE_PORT_HTTP}</http_port><tcp_port>${CLICKHOUSE_PORT_TCP}</tcp_port><interserver_http_port>${CLICKHOUSE_PORT_INTERSERVER}</interserver_http_port></yandex>" > /etc/clickhouse-server/config.d/port.xml
|
||||
|
||||
TEST_SSL=${TEST_SSL=1}
|
||||
if [ "${TEST_SSL}" ]; then
|
||||
echo "<yandex><https_port>8443</https_port><tcp_port_secure>9440</tcp_port_secure></yandex>" > /etc/clickhouse-server/config.d/ssl.xml
|
||||
[ "${PORT_RANDOM}" ] && echo "<yandex><https_port>${CLICKHOUSE_PORT_HTTPS}</https_port><tcp_port_secure>${CLICKHOUSE_PORT_TCP_SECURE}</tcp_port_secure></yandex>" > /etc/clickhouse-server/config.d/ssl.xml
|
||||
echo "<yandex><openSSL><client><verificationMode>none</verificationMode><invalidCertificateHandler><name>AcceptCertificateHandler</name></invalidCertificateHandler></client></openSSL></yandex>" > /etc/clickhouse-client/config.d/ssl.xml
|
||||
openssl dhparam -out /etc/clickhouse-server/dhparam.pem 256
|
||||
openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt
|
||||
chmod a+r /etc/clickhouse-server/*
|
||||
CLIENT_ADD="--secure"
|
||||
CLIENT_ADD+="--secure --port $CLICKHOUSE_PORT_TCP_SECURE"
|
||||
else
|
||||
CLIENT_ADD+="--port $CLICKHOUSE_PORT_TCP"
|
||||
fi
|
||||
|
||||
function finish {
|
||||
service clickhouse-server stop
|
||||
tail -n 100 /var/log/clickhouse-server/*
|
||||
tail -n 100 /var/log/clickhouse-server/*.log /var/log/stderr
|
||||
sleep 1
|
||||
killall -9 clickhouse-server || true
|
||||
}
|
||||
@ -43,9 +66,9 @@ if [ "${TEST_CONNECT}" ]; then
|
||||
sleep 3
|
||||
|
||||
# TODO: remove me or make only on error:
|
||||
tail -n100 /var/log/clickhouse-server/*
|
||||
tail -n100 /var/log/clickhouse-server/*.log /var/log/stderr
|
||||
|
||||
clickhouse-client -q "SELECT * from system.build_options;"
|
||||
clickhouse-client --port $CLICKHOUSE_PORT_TCP -q "SELECT * from system.build_options;"
|
||||
clickhouse-client ${CLIENT_ADD} -q "SELECT toDateTime(1);"
|
||||
|
||||
( [ "${TEST_RUN}" ] && clickhouse-test --queries /usr/share/clickhouse-test/queries --tmp /tmp/clickhouse-test/ ${TEST_OPT} ) || ${TEST_TRUE:=true}
|
||||
|
@ -12,7 +12,7 @@ With appropriate changes, it should also work on any other Linux distribution.
|
||||
## Install required compilers, tools, and libraries
|
||||
|
||||
```bash
|
||||
brew install cmake gcc icu4c mysql openssl unixodbc libtool gettext zlib readline boost --cc=gcc-7
|
||||
brew install cmake gcc icu4c mysql openssl unixodbc libtool gettext readline
|
||||
```
|
||||
|
||||
## Checkout ClickHouse sources
|
||||
@ -34,7 +34,7 @@ For the latest release candidate, switch to the `testing` branch.
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_CXX_COMPILER=`which g++-7` -DCMAKE_C_COMPILER=`which gcc-7`
|
||||
cmake .. -DCMAKE_CXX_COMPILER=`which g++-8` -DCMAKE_C_COMPILER=`which gcc-8`
|
||||
make -j `sysctl -n hw.ncpu`
|
||||
cd ..
|
||||
```
|
||||
|
@ -177,7 +177,7 @@ pages:
|
||||
- 'Операторы': 'operators/index.md'
|
||||
|
||||
- 'Функции':
|
||||
- 'Общее описание': 'functions/index.md'
|
||||
- 'Введение': 'functions/index.md'
|
||||
- 'Арифметические функции': 'functions/arithmetic_functions.md'
|
||||
- 'Функции сравнения': 'functions/comparison_functions.md'
|
||||
- 'Логические функции': 'functions/logical_functions.md'
|
||||
@ -204,6 +204,7 @@ pages:
|
||||
- 'Функции для работы со словарями Яндекс.Метрики': 'functions/ym_dict_functions.md'
|
||||
- 'Функции для реализации оператора IN.': 'functions/in_functions.md'
|
||||
- 'Функция arrayJoin': 'functions/array_join.md'
|
||||
- 'Функции для работы с географическими координатами': 'functions/geo.md'
|
||||
|
||||
- 'Агрегатные функции':
|
||||
- 'Введение': 'agg_functions/index.md'
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="csv"></a>
|
||||
|
||||
# CSV
|
||||
|
||||
Формат comma separated values ([RFC](https://tools.ietf.org/html/rfc4180)).
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="csvwithnames"></a>
|
||||
|
||||
# CSVWithNames
|
||||
|
||||
Выводит также заголовок, аналогично `TabSeparatedWithNames`.
|
||||
|
@ -1,5 +1,33 @@
|
||||
<a name="formats"></a>
|
||||
|
||||
# Форматы
|
||||
# Форматы входных и выходных данных
|
||||
|
||||
Формат определяет, в каком виде данные отдаются вам (пишутся, форматируются сервером) при SELECT-е и в каком виде принимаются (читаются, парсятся сервером) при INSERT-е.
|
||||
ClickHouse может принимать (`INSERT`) и отдавать (`SELECT`) данные в различных форматах.
|
||||
|
||||
Поддерживаемые форматы и возможность использовать их в запросах `INSERT` и `SELECT` перечислены в таблице ниже.
|
||||
|
||||
Формат | INSERT | SELECT
|
||||
-------|--------|--------
|
||||
[TabSeparated](tabseparated.md#tabseparated) | ✔ | ✔ |
|
||||
[TabSeparatedRaw](tabseparatedraw.md#tabseparatedraw) | ✗ | ✔ |
|
||||
[TabSeparatedWithNames](tabseparatedwithnames.md#tabseparatedwithnames) | ✔ | ✔ |
|
||||
[TabSeparatedWithNamesAndTypes](tabseparatedwithnamesandtypes.md#tabseparatedwithnamesandtypes) | ✔ | ✔ |
|
||||
[CSV](csv.md#csv) | ✔ | ✔ |
|
||||
[CSVWithNames](csvwithnames.md#csvwithnames) | ✔ | ✔ |
|
||||
[Values](values.md#values) | ✔ | ✔ |
|
||||
[Vertical](vertical.md#vertical) | ✗ | ✔ |
|
||||
[VerticalRaw](verticalraw.md#verticalraw) | ✗ | ✔ |
|
||||
[JSON](json.md#json) | ✗ | ✔ |
|
||||
[JSONCompact](jsoncompact.md#jsoncompact) | ✗ | ✔ |
|
||||
[JSONEachRow](jsoneachrow.md#jsoneachrow) | ✔ | ✔ |
|
||||
[TSKV](tskv.md#tskv) | ✔ | ✔ |
|
||||
[Pretty](pretty.md#pretty) | ✗ | ✔ |
|
||||
[PrettyCompact](prettycompact.md#prettycompact) | ✗ | ✔ |
|
||||
[PrettyCompactMonoBlock](prettycompactmonoblock.md#prettycompactmonoblock) | ✗ | ✔ |
|
||||
[PrettyNoEscapes](prettynoescapes.md#prettynoescapes) | ✗ | ✔ |
|
||||
[PrettySpace](prettyspace.md#prettyspace) | ✗ | ✔ |
|
||||
[RowBinary](rowbinary.md#rowbinary) | ✔ | ✔ |
|
||||
[Native](native.md#native) | ✔ | ✔ |
|
||||
[Null](null.md#null) | ✗ | ✔ |
|
||||
[XML](xml.md#xml) | ✗ | ✔ |
|
||||
[CapnProto](capnproto.md#capnproto) | ✔ | ✔ |
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="json"></a>
|
||||
|
||||
# JSON
|
||||
|
||||
Выводит данные в формате JSON. Кроме таблицы с данными, также выводятся имена и типы столбцов, и некоторая дополнительная информация - общее количество выведенных строк, а также количество строк, которое могло бы быть выведено, если бы не было LIMIT-а. Пример:
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="jsoncompact"></a>
|
||||
|
||||
# JSONCompact
|
||||
|
||||
Отличается от JSON только тем, что строчки данных выводятся в массивах, а не в object-ах.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="jsoneachrow"></a>
|
||||
|
||||
# JSONEachRow
|
||||
|
||||
Выводит данные в виде отдельных JSON объектов для каждой строки (newline delimited JSON).
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="native"></a>
|
||||
|
||||
# Native
|
||||
|
||||
Самый эффективный формат. Данные пишутся и читаются блоками в бинарном виде. Для каждого блока пишется количество строк, количество столбцов, имена и типы столбцов, а затем кусочки столбцов этого блока, один за другим. То есть, этот формат является "столбцовым" - не преобразует столбцы в строки. Именно этот формат используется в родном интерфейсе - при межсерверном взаимодействии, при использовании клиента командной строки, при работе клиентов, написанных на C++.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="null"></a>
|
||||
|
||||
# Null
|
||||
|
||||
Ничего не выводит. При этом, запрос обрабатывается, а при использовании клиента командной строки, данные ещё и передаются на клиент. Используется для тестов, в том числе, тестов производительности.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="pretty"></a>
|
||||
|
||||
# Pretty
|
||||
|
||||
Выводит данные в виде Unicode-art табличек, также используя ANSI-escape последовательности для установки цветов в терминале.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="prettycompact"></a>
|
||||
|
||||
# PrettyCompact
|
||||
|
||||
Отличается от `Pretty` тем, что не рисуется сетка между строками - результат более компактный.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="prettycompactmonoblock"></a>
|
||||
|
||||
# PrettyCompactMonoBlock
|
||||
|
||||
Отличается от `PrettyCompact` тем, что строки (до 10 000 штук) буферизуются и затем выводятся в виде одной таблицы, а не по блокам.
|
||||
Отличается от [PrettyCompact](prettycompact.md#prettycompact) тем, что строки (до 10 000 штук) буферизуются и затем выводятся в виде одной таблицы, а не по блокам.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="prettynoescapes"></a>
|
||||
|
||||
# PrettyNoEscapes
|
||||
|
||||
Отличается от Pretty тем, что не используются ANSI-escape последовательности. Это нужно для отображения этого формата в браузере, а также при использовании утилиты командной строки watch.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="prettyspace"></a>
|
||||
|
||||
# PrettySpace
|
||||
|
||||
Отличается от `PrettyCompact` тем, что вместо сетки используется пустое пространство (пробелы).
|
||||
Отличается от [PrettyCompact](prettycompact.md#prettycompact) тем, что вместо сетки используется пустое пространство (пробелы).
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="rowbinary"></a>
|
||||
|
||||
# RowBinary
|
||||
|
||||
Форматирует и парсит данные по строкам, в бинарном виде. Строки и значения уложены подряд, без разделителей.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="tabseparated"></a>
|
||||
|
||||
# TabSeparated
|
||||
|
||||
В TabSeparated формате данные пишутся по строкам. Каждая строчка содержит значения, разделённые табами. После каждого значения идёт таб, кроме последнего значения в строке, после которого идёт перевод строки. Везде подразумеваются исключительно unix-переводы строк. Последняя строка также обязана содержать перевод строки на конце. Значения пишутся в текстовом виде, без обрамляющих кавычек, с экранированием служебных символов.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="tabseparatedraw"></a>
|
||||
|
||||
# TabSeparatedRaw
|
||||
|
||||
Отличается от формата `TabSeparated` тем, что строки выводятся без экранирования.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="tabseparatedwithnames"></a>
|
||||
|
||||
# TabSeparatedWithNames
|
||||
|
||||
Отличается от формата `TabSeparated` тем, что в первой строке пишутся имена столбцов.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="tabseparatedwithnamesandtypes"></a>
|
||||
|
||||
# TabSeparatedWithNamesAndTypes
|
||||
|
||||
Отличается от формата `TabSeparated` тем, что в первой строке пишутся имена столбцов, а во второй - типы столбцов.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="tskv"></a>
|
||||
|
||||
# TSKV
|
||||
|
||||
Похож на TabSeparated, но выводит значения в формате name=value. Имена экранируются так же, как строки в формате TabSeparated и, дополнительно, экранируется также символ =.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="values"></a>
|
||||
|
||||
# Values
|
||||
|
||||
Выводит каждую строку в скобках. Строки разделены запятыми. После последней строки запятой нет. Значения внутри скобок также разделены запятыми. Числа выводятся в десятичном виде без кавычек. Массивы выводятся в квадратных скобках. Строки, даты, даты-с-временем выводятся в кавычках. Правила экранирования и особенности парсинга аналогичны формату TabSeparated. При форматировании, лишние пробелы не ставятся, а при парсинге - допустимы и пропускаются (за исключением пробелов внутри значений типа массив, которые недопустимы).
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="vertical"></a>
|
||||
|
||||
# Vertical
|
||||
|
||||
Выводит каждое значение на отдельной строке, с указанием имени столбца. Формат удобно использовать для вывода одной-нескольких строк, если каждая строка состоит из большого количества столбцов.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="verticalraw"></a>
|
||||
|
||||
# VerticalRaw
|
||||
|
||||
Отличается от формата `Vertical` тем, что строки выводятся без экранирования.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="xml"></a>
|
||||
|
||||
# XML
|
||||
|
||||
Формат XML подходит только для вывода данных, не для парсинга. Пример:
|
||||
|
70
docs/ru/functions/geo.md
Normal file
70
docs/ru/functions/geo.md
Normal file
@ -0,0 +1,70 @@
|
||||
# Функции для работы с географическими координатами
|
||||
|
||||
## greatCircleDistance
|
||||
|
||||
Вычисляет расстояние между двумя точками на поверхности Земли по [формуле большого круга](https://en.wikipedia.org/wiki/Great-circle_distance).
|
||||
|
||||
```
|
||||
greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
|
||||
```
|
||||
|
||||
**Входные параметры**
|
||||
|
||||
- `lon1Deg` — широта первой точки в градусах. Диапазон — `[-90°, 90°]`.
|
||||
- `lat1Deg` — долгота первой точки в градусах. Диапазон — `[-180°, 180°]`.
|
||||
- `lon2Deg` — широта второй точки в градусах. Диапазон — `[-90°, 90°]`.
|
||||
- `lat2Deg` — долгота второй точки в градусах. Диапазон — `[-180°, 180°]`.
|
||||
|
||||
Положительные значения соответствуют северной широте и восточной долготе, отрицательные — южной широте и западной долготе.
|
||||
|
||||
**Возвращаемое значение**
|
||||
|
||||
Расстояние между двумя точками на поверхности Земли в метрах.
|
||||
|
||||
Генерирует исключение, когда значения входных параметров выходят за границы диапазонов.
|
||||
|
||||
**Пример**
|
||||
|
||||
```sql
|
||||
SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)
|
||||
```
|
||||
|
||||
```text
|
||||
┌─greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)─┐
|
||||
│ 14132374.194975413 │
|
||||
└───────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## pointInEllipses
|
||||
|
||||
Проверяет, принадлежит ли точка хотя бы одному из эллипсов.
|
||||
|
||||
```
|
||||
pointInEllipses(x, y, x₀, y₀, a₀, b₀,...,xₙ, yₙ, aₙ, bₙ)
|
||||
```
|
||||
|
||||
**Входные параметры**
|
||||
|
||||
- `x` — широта точки.
|
||||
- `y` — долгота точки.
|
||||
- `xᵢ, yᵢ` — координаты центра `i`-го эллипса.
|
||||
- `aᵢ, bᵢ` — полуоси `i`-го эллипса в метрах.
|
||||
|
||||
Входных параметров должно быть `2+4⋅n`, где `n` — количество эллипсов.
|
||||
|
||||
**Возвращаемые значения**
|
||||
|
||||
`1`, если точка внутри хотя бы одного из эллипсов, `0`, если нет.
|
||||
|
||||
|
||||
**Примеры**
|
||||
|
||||
```sql
|
||||
SELECT pointInEllipses(55.755831, 37.617673, 55.755831, 37.617673, 1.0, 2.0)
|
||||
```
|
||||
|
||||
```text
|
||||
┌─pointInEllipses(55.755831, 37.617673, 55.755831, 37.617673, 1., 2.)─┐
|
||||
│ 1 │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
@ -157,13 +157,17 @@ SELECT a, b, c FROM (SELECT ...)
|
||||
|
||||
Отсутствует отдельный запрос для удаления представлений. Чтобы удалить представление, следует использовать `DROP TABLE`.
|
||||
|
||||
<a name="queries-attach"></a>
|
||||
|
||||
## ATTACH
|
||||
Запрос полностью аналогичен запросу `CREATE`, но
|
||||
Запрос полностью аналогичен запросу `CREATE`, но:
|
||||
|
||||
- вместо слова `CREATE` используется слово `ATTACH`;
|
||||
- запрос не создаёт данные на диске, а предполагает, что данные уже лежат в соответствующих местах, и всего лишь добавляет информацию о таблице в сервер.
|
||||
После выполнения запроса ATTACH, сервер будет знать о существовании таблицы.
|
||||
|
||||
Если таблица перед этим была отсоединена (``DETACH``), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры.
|
||||
После выполнения `ATTACH`, сервер будет знать о существовании таблицы.
|
||||
|
||||
Если таблица перед этим была отсоединена (`DETACH`), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры.
|
||||
|
||||
```sql
|
||||
ATTACH TABLE [IF NOT EXISTS] [db.]name
|
||||
|
@ -1,3 +1,78 @@
|
||||
# File(InputFormat)
|
||||
<a name="table_engines-file"></a>
|
||||
|
||||
Источником данных является файл, хранящий данные в одном из поддерживаемых форматов входных данных (TabSeparated, Native, и т. д.) ...
|
||||
# File(Format)
|
||||
|
||||
Управляет данными в одном файле на диске в указанном формате.
|
||||
|
||||
Примеры применения:
|
||||
|
||||
- Выгрузка данных из ClickHouse в файл.
|
||||
- Преобразование данных из одного формата в другой.
|
||||
- Обновление данных в ClickHouse редактированием файла на диске.
|
||||
|
||||
## Использование движка в сервере ClickHouse
|
||||
|
||||
```
|
||||
File(Format)
|
||||
```
|
||||
|
||||
`Format` должен быть таким, который ClickHouse может использовать и в запросах `INSERT` и в запросах `SELECT`. Полный список поддерживаемых форматов смотрите в разделе [Форматы](../formats/index.md#formats).
|
||||
|
||||
Сервер ClickHouse не позволяет указать путь к файлу, с которым будет работать `File`. Используется путь к хранилищу, определенный параметром [path](../operations/server_settings/settings.md#server_settings-path) в конфигурации сервера.
|
||||
|
||||
При создании таблицы с помощью `File(Format)` сервер ClickHouse создает в хранилище каталог с именем таблицы, а после добавления в таблицу данных помещает туда файл `data.Format`.
|
||||
|
||||
Можно вручную создать в хранилище каталог таблицы, поместить туда файл, затем на сервере ClickHouse добавить ([ATTACH](../query_language/queries.md#queries-attach)) информацию о таблице, соответствующей имени каталога и прочитать из файла данные.
|
||||
|
||||
<div class="admonition warning">
|
||||
Будьте аккуратны с этой функциональностью, поскольку сервер ClickHouse не отслеживает внешние изменения данных. Если в файл будет производиться запись одновременно со стороны сервера ClickHouse и с внешней стороны, то результат непредсказуем.
|
||||
</div>
|
||||
|
||||
**Пример:**
|
||||
|
||||
**1.** Создадим на сервере таблицу `file_engine_table`:
|
||||
|
||||
```sql
|
||||
CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated)
|
||||
```
|
||||
|
||||
В конфигурации по умолчанию сервер ClickHouse создаст каталог `/var/lib/clickhouse/data/default/file_engine_table`.
|
||||
|
||||
**2.** Вручную создадим файл `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` с содержимым:
|
||||
|
||||
```bash
|
||||
$cat data.TabSeparated
|
||||
one 1
|
||||
two 2
|
||||
```
|
||||
|
||||
**3.** Запросим данные:
|
||||
|
||||
```sql
|
||||
SELECT * FROM file_engine_table
|
||||
```
|
||||
|
||||
```text
|
||||
┌─name─┬─value─┐
|
||||
│ one │ 1 │
|
||||
│ two │ 2 │
|
||||
└──────┴───────┘
|
||||
```
|
||||
|
||||
## Использование движка в clickhouse-local
|
||||
|
||||
В [clickhouse-local](../utils/clickhouse-local.md#utils-clickhouse-local) движок в качестве параметра принимает не только формат, но и путь к файлу. В том числе можно указать стандартные потоки ввода/вывода цифровым или буквенным обозначением `0` или `stdin`, `1` или `stdout`.
|
||||
|
||||
**Пример:**
|
||||
|
||||
```bash
|
||||
$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table"
|
||||
```
|
||||
|
||||
## Особенности использования
|
||||
|
||||
- Поддерживается многопоточное чтение и однопоточная запись.
|
||||
- Не поддерживается:
|
||||
- использование операций `ALTER` и `SELECT...SAMPLE`;
|
||||
- индексы;
|
||||
- репликация.
|
||||
|
@ -1,3 +1,5 @@
|
||||
<a name="table_engines"></a>
|
||||
|
||||
# Движки таблиц
|
||||
|
||||
Движок таблицы (тип таблицы) определяет:
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
/** Demangles C++ symbol name.
|
||||
* When demangling fails, returns the original name and sets status to non-zero.
|
||||
* TODO: Write msvc version (now returns the same string)
|
||||
*/
|
||||
std::string demangle(const char * name, int & status);
|
||||
|
||||
|
@ -1,7 +1,17 @@
|
||||
#include <common/demangle.h>
|
||||
#include <cxxabi.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if _MSC_VER
|
||||
|
||||
std::string demangle(const char * name, int & status)
|
||||
{
|
||||
status = 0;
|
||||
return name;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <cxxabi.h>
|
||||
|
||||
std::string demangle(const char * name, int & status)
|
||||
{
|
||||
@ -26,3 +36,5 @@ std::string demangle(const char * name, int & status)
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <common/shift10.h>
|
||||
#include <common/likely.h>
|
||||
#include <limits>
|
||||
#include <port/ssize_t.h>
|
||||
|
||||
|
||||
template <typename T>
|
||||
|
@ -12,7 +12,7 @@ fi
|
||||
|
||||
## Install required compilers, tools, libraries
|
||||
|
||||
brew install cmake gcc icu4c mysql openssl unixodbc libtool gettext zlib readline boost --cc=gcc-7
|
||||
brew install cmake gcc icu4c mysql openssl unixodbc libtool gettext readline
|
||||
|
||||
## Checkout ClickHouse sources
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
# env CXX=clang++-5.0 CC=clang-5.0 utils/travis/normal.sh
|
||||
|
||||
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
CXX=${CXX=g++}
|
||||
CC=${CC=gcc}
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
Loading…
Reference in New Issue
Block a user