From c739253252c532971dade72e355c5dc61b21bb5e Mon Sep 17 00:00:00 2001 From: BayoNet Date: Wed, 9 May 2018 14:12:15 +0300 Subject: [PATCH 01/11] Editing of external contributions in the documentation. --- docs/en/operations/settings/settings.md | 2 ++ docs/ru/interfaces/third-party_gui.md | 18 ++++++++++++++++-- docs/ru/operations/access_rights.md | 14 +++++++------- docs/ru/operations/quotas.md | 2 ++ docs/ru/operations/settings/settings.md | 2 ++ .../operations/settings/settings_profiles.md | 2 ++ 6 files changed, 31 insertions(+), 9 deletions(-) diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index 8768bf89b2f..79d84f2f9e8 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -339,6 +339,8 @@ It works for JSONEachRow and TSKV formats. If the value is true, integers appear in quotes when using JSON\* Int64 and UInt64 formats (for compatibility with most JavaScript implementations); otherwise, integers are output without the quotes. + + ## format_csv_delimiter The character to be considered as a delimiter in CSV data. By default, `,`. diff --git a/docs/ru/interfaces/third-party_gui.md b/docs/ru/interfaces/third-party_gui.md index 85b38412228..676b58a7ba0 100644 --- a/docs/ru/interfaces/third-party_gui.md +++ b/docs/ru/interfaces/third-party_gui.md @@ -4,7 +4,8 @@ Веб-интерфейс для ClickHouse в проекте [Tabix](https://github.com/tabixio/tabix). -Основные особенности: +Основные возможности: + - Работает с ClickHouse напрямую из браузера, без необходимости установки дополнительного ПО. - Редактор запросов с подсветкой синтаксиса. - Автодополнение команд. @@ -15,4 +16,17 @@ ## HouseOps -[HouseOps](https://github.com/HouseOps/HouseOps) is a unique Desktop ClickHouse Ops UI / IDE for OSX, Linux and Windows. +[HouseOps](https://github.com/HouseOps/HouseOps) — UI/IDE для OSX, Linux и Windows. + +Основные возможности: + +- Создание запросов. + +Планируется разработка следующих возможностей: + +- Управление базами. +- Управление пользователями. +- Управление кластером. +- Анализ данных в режиме реального времени. +- Мониторинг кластера. +- Мониторинг реплицированных и Kafka таблиц. diff --git a/docs/ru/operations/access_rights.md b/docs/ru/operations/access_rights.md index 54809b27ffe..2e5fac14200 100644 --- a/docs/ru/operations/access_rights.md +++ b/docs/ru/operations/access_rights.md @@ -2,7 +2,7 @@ Пользователи и права доступа настраиваются в конфиге пользователей. Обычно это `users.xml`. -Пользователи прописаны в секции users. Рассмотрим фрагмент файла `users.xml`: +Пользователи прописаны в секции `users`. Рассмотрим фрагмент файла `users.xml`: ```xml @@ -67,7 +67,7 @@ Пароль указывается либо в открытом виде (не рекомендуется), либо в виде SHA-256. Хэш не содержит соль. В связи с этим, не следует рассматривать такие пароли, как защиту от потенциального злоумышленника. Скорее, они нужны для защиты от сотрудников. -Указывается список сетей, из которых разрешён доступ. В этом примере, список сетей для обеих пользователей, загружается из отдельного файла (/etc/metrika.xml), содержащего подстановку networks. Вот его фрагмент: +Указывается список сетей, из которых разрешён доступ. В этом примере, список сетей для обеих пользователей, загружается из отдельного файла (`/etc/metrika.xml`), содержащего подстановку `networks`. Вот его фрагмент: ```xml @@ -81,17 +81,17 @@ ``` -Можно было бы указать этот список сетей непосредственно в users.xml, или в файле в директории users.d (подробнее смотрите раздел "Конфигурационные файлы"). +Можно было бы указать этот список сетей непосредственно в `users.xml`, или в файле в директории `users.d` (подробнее смотрите раздел "[Конфигурационные файлы](configuration_files.md#configuration_files)"). В конфиге приведён комментарий, указывающий, как можно открыть доступ отовсюду. -Для продакшен использования, указывайте только элементы вида ip (IP-адреса и их маски), так как использование host и host_regexp может вызывать лишние задержки. +Для продакшен использования, указывайте только элементы вида `ip` (IP-адреса и их маски), так как использование `host` и `host_regexp` может вызывать лишние задержки. -Далее указывается используемый профиль настроек пользователя (смотрите раздел "Профили настроек"). Вы можете указать профиль по умолчанию - `default`. Профиль может называться как угодно; один и тот же профиль может быть указан для разных пользователей. Наиболее важная вещь, которую вы можете прописать в профиле настроек - настройку readonly, равную 1, что обеспечивает доступ только на чтение. +Далее указывается используемый профиль настроек пользователя (смотрите раздел "[Профили настроек](settings/settings_profiles.md#settings_profiles)"). Вы можете указать профиль по умолчанию - `default`. Профиль может называться как угодно; один и тот же профиль может быть указан для разных пользователей. Наиболее важная вещь, которую вы можете прописать в профиле настроек `readonly=1`, что обеспечивает доступ только на чтение. -Затем указывается используемая квота (смотрите раздел "Квоты"). Вы можете указать квоту по умолчанию - `default`. Она настроена в конфиге по умолчанию так, что только считает использование ресурсов, но никак их не ограничивает. Квота может называться как угодно; одна и та же квота может быть указана для разных пользователей - в этом случае, подсчёт использования ресурсов делается для каждого пользователя по отдельности. +Затем указывается используемая квота (смотрите раздел "[Квоты](quotas.md#quotas)"). Вы можете указать квоту по умолчанию — `default`. Она настроена в конфиге по умолчанию так, что только считает использование ресурсов, но никак их не ограничивает. Квота может называться как угодно. Одна и та же квота может быть указана для разных пользователей, в этом случае подсчёт использования ресурсов делается для каждого пользователя по отдельности. -Также в необязательном разделе `` можно указать перечень баз, к которым у пользователя будет доступ. По умолчанию пользователю доступны все базы. Можно указать базу данных `default`, в этом случае пользователь получит доступ к базе данных по умолчанию. +Также, в необязательном разделе `` можно указать перечень баз, к которым у пользователя будет доступ. По умолчанию пользователю доступны все базы. Можно указать базу данных `default`, в этом случае пользователь получит доступ к базе данных по умолчанию. Доступ к БД `system` всегда считается разрешённым (так как эта БД используется для выполнения запросов). diff --git a/docs/ru/operations/quotas.md b/docs/ru/operations/quotas.md index a084017b2ca..1a56ff9fe62 100644 --- a/docs/ru/operations/quotas.md +++ b/docs/ru/operations/quotas.md @@ -1,3 +1,5 @@ + + # Квоты Квоты позволяют ограничить использование ресурсов за некоторый интервал времени, или просто подсчитывать использование ресурсов. diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 0e1752f49a7..69fd8ab3978 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -336,6 +336,8 @@ ClickHouse применяет настройку в том случае, ког Если значение истинно, то при использовании JSON\* форматов UInt64 и Int64 числа выводятся в кавычках (из соображений совместимости с большинством реализаций JavaScript), иначе - без кавычек. + + ## format_csv_delimiter Символ, интерпретируемый как разделитель в данных формата CSV. По умолчанию — `,`. diff --git a/docs/ru/operations/settings/settings_profiles.md b/docs/ru/operations/settings/settings_profiles.md index de41eb6666d..8e30d76107e 100644 --- a/docs/ru/operations/settings/settings_profiles.md +++ b/docs/ru/operations/settings/settings_profiles.md @@ -1,3 +1,5 @@ + + # Профили настроек Профили настроек - это множество настроек, сгруппированных под одним именем. Для каждого пользователя ClickHouse указывается некоторый профиль. From 42251fc9c0074f8eecfee2a444d9963ce751f706 Mon Sep 17 00:00:00 2001 From: BayoNet Date: Thu, 10 May 2018 19:51:45 +0300 Subject: [PATCH 02/11] Geo functions are added. --- docs/mkdocs_ru.yml | 3 +- docs/ru/functions/geo.md | 70 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 docs/ru/functions/geo.md diff --git a/docs/mkdocs_ru.yml b/docs/mkdocs_ru.yml index 2e8eae30640..0649821bce4 100644 --- a/docs/mkdocs_ru.yml +++ b/docs/mkdocs_ru.yml @@ -176,7 +176,7 @@ pages: - 'Операторы': 'operators/index.md' - 'Функции': - - 'Общее описание': 'functions/index.md' + - 'Введение': 'functions/index.md' - 'Арифметические функции': 'functions/arithmetic_functions.md' - 'Функции сравнения': 'functions/comparison_functions.md' - 'Логические функции': 'functions/logical_functions.md' @@ -203,6 +203,7 @@ pages: - 'Функции для работы со словарями Яндекс.Метрики': 'functions/ym_dict_functions.md' - 'Функции для реализации оператора IN.': 'functions/in_functions.md' - 'Функция arrayJoin': 'functions/array_join.md' + - 'Функции для работы с географическими координатами': 'functions/geo.md' - 'Агрегатные функции': - 'Введение': 'agg_functions/index.md' diff --git a/docs/ru/functions/geo.md b/docs/ru/functions/geo.md new file mode 100644 index 00000000000..be1a8f918b9 --- /dev/null +++ b/docs/ru/functions/geo.md @@ -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 │ +└─────────────────────────────────────────────────────────────────────┘ +``` From 7f783eed03f947449f3c4f3bb6a92732d4b83d5d Mon Sep 17 00:00:00 2001 From: BayoNet Date: Wed, 16 May 2018 18:16:46 +0300 Subject: [PATCH 03/11] Updated description of `File` table engine. --- docs/ru/formats/csv.md | 2 + docs/ru/formats/csvwithnames.md | 2 + docs/ru/formats/index.md | 26 ++++++ docs/ru/formats/json.md | 2 + docs/ru/formats/jsoncompact.md | 2 + docs/ru/formats/jsoneachrow.md | 2 + docs/ru/formats/native.md | 2 + docs/ru/formats/null.md | 2 + docs/ru/formats/pretty.md | 2 + docs/ru/formats/prettycompact.md | 2 + docs/ru/formats/prettycompactmonoblock.md | 4 +- docs/ru/formats/prettynoescapes.md | 2 + docs/ru/formats/prettyspace.md | 4 +- docs/ru/formats/rowbinary.md | 2 + docs/ru/formats/tabseparated.md | 2 + docs/ru/formats/tabseparatedraw.md | 2 + docs/ru/formats/tabseparatedwithnames.md | 2 + .../formats/tabseparatedwithnamesandtypes.md | 2 + docs/ru/formats/tskv.md | 2 + docs/ru/formats/values.md | 2 + docs/ru/formats/vertical.md | 2 + docs/ru/formats/verticalraw.md | 2 + docs/ru/formats/xml.md | 2 + docs/ru/query_language/queries.md | 10 ++- docs/ru/table_engines/file.md | 79 ++++++++++++++++++- 25 files changed, 156 insertions(+), 7 deletions(-) diff --git a/docs/ru/formats/csv.md b/docs/ru/formats/csv.md index 59edd09fbc6..a1d0dee45c9 100644 --- a/docs/ru/formats/csv.md +++ b/docs/ru/formats/csv.md @@ -1,3 +1,5 @@ + + # CSV Формат comma separated values ([RFC](https://tools.ietf.org/html/rfc4180)). diff --git a/docs/ru/formats/csvwithnames.md b/docs/ru/formats/csvwithnames.md index a9f08b826db..1755713ee6e 100644 --- a/docs/ru/formats/csvwithnames.md +++ b/docs/ru/formats/csvwithnames.md @@ -1,3 +1,5 @@ + + # CSVWithNames Выводит также заголовок, аналогично `TabSeparatedWithNames`. diff --git a/docs/ru/formats/index.md b/docs/ru/formats/index.md index e9ae4a583a1..84a3bbbad12 100644 --- a/docs/ru/formats/index.md +++ b/docs/ru/formats/index.md @@ -3,3 +3,29 @@ # Форматы Формат определяет, в каком виде данные отдаются вам (пишутся, форматируются сервером) при SELECT-е и в каком виде принимаются (читаются, парсятся сервером) при INSERT-е. + +Поддерживаемые форматы данных: + +- [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) diff --git a/docs/ru/formats/json.md b/docs/ru/formats/json.md index e3eae2bd63b..5664e54297f 100644 --- a/docs/ru/formats/json.md +++ b/docs/ru/formats/json.md @@ -1,3 +1,5 @@ + + # JSON Выводит данные в формате JSON. Кроме таблицы с данными, также выводятся имена и типы столбцов, и некоторая дополнительная информация - общее количество выведенных строк, а также количество строк, которое могло бы быть выведено, если бы не было LIMIT-а. Пример: diff --git a/docs/ru/formats/jsoncompact.md b/docs/ru/formats/jsoncompact.md index 10bbd530ffa..efadc42d6e7 100644 --- a/docs/ru/formats/jsoncompact.md +++ b/docs/ru/formats/jsoncompact.md @@ -1,3 +1,5 @@ + + # JSONCompact Отличается от JSON только тем, что строчки данных выводятся в массивах, а не в object-ах. diff --git a/docs/ru/formats/jsoneachrow.md b/docs/ru/formats/jsoneachrow.md index 6efd15936ff..8bf1797b2a3 100644 --- a/docs/ru/formats/jsoneachrow.md +++ b/docs/ru/formats/jsoneachrow.md @@ -1,3 +1,5 @@ + + # JSONEachRow Выводит данные в виде отдельных JSON объектов для каждой строки (newline delimited JSON). diff --git a/docs/ru/formats/native.md b/docs/ru/formats/native.md index e7aa5b323c4..0b047301fbd 100644 --- a/docs/ru/formats/native.md +++ b/docs/ru/formats/native.md @@ -1,3 +1,5 @@ + + # Native Самый эффективный формат. Данные пишутся и читаются блоками в бинарном виде. Для каждого блока пишется количество строк, количество столбцов, имена и типы столбцов, а затем кусочки столбцов этого блока, один за другим. То есть, этот формат является "столбцовым" - не преобразует столбцы в строки. Именно этот формат используется в родном интерфейсе - при межсерверном взаимодействии, при использовании клиента командной строки, при работе клиентов, написанных на C++. diff --git a/docs/ru/formats/null.md b/docs/ru/formats/null.md index ac699e493a7..eba69cf73f6 100644 --- a/docs/ru/formats/null.md +++ b/docs/ru/formats/null.md @@ -1,3 +1,5 @@ + + # Null Ничего не выводит. При этом, запрос обрабатывается, а при использовании клиента командной строки, данные ещё и передаются на клиент. Используется для тестов, в том числе, тестов производительности. diff --git a/docs/ru/formats/pretty.md b/docs/ru/formats/pretty.md index cac5b7ed1da..0f2434230f2 100644 --- a/docs/ru/formats/pretty.md +++ b/docs/ru/formats/pretty.md @@ -1,3 +1,5 @@ + + # Pretty Выводит данные в виде Unicode-art табличек, также используя ANSI-escape последовательности для установки цветов в терминале. diff --git a/docs/ru/formats/prettycompact.md b/docs/ru/formats/prettycompact.md index 5802dfbc1ef..2e10422d7bc 100644 --- a/docs/ru/formats/prettycompact.md +++ b/docs/ru/formats/prettycompact.md @@ -1,3 +1,5 @@ + + # PrettyCompact Отличается от `Pretty` тем, что не рисуется сетка между строками - результат более компактный. diff --git a/docs/ru/formats/prettycompactmonoblock.md b/docs/ru/formats/prettycompactmonoblock.md index 3ac6b4fcd76..8e5ea89aed8 100644 --- a/docs/ru/formats/prettycompactmonoblock.md +++ b/docs/ru/formats/prettycompactmonoblock.md @@ -1,3 +1,5 @@ + + # PrettyCompactMonoBlock -Отличается от `PrettyCompact` тем, что строки (до 10 000 штук) буферизуются и затем выводятся в виде одной таблицы, а не по блокам. +Отличается от [PrettyCompact](prettycompact.md#prettycompact) тем, что строки (до 10 000 штук) буферизуются и затем выводятся в виде одной таблицы, а не по блокам. diff --git a/docs/ru/formats/prettynoescapes.md b/docs/ru/formats/prettynoescapes.md index b33eebe2907..e4320358438 100644 --- a/docs/ru/formats/prettynoescapes.md +++ b/docs/ru/formats/prettynoescapes.md @@ -1,3 +1,5 @@ + + # PrettyNoEscapes Отличается от Pretty тем, что не используются ANSI-escape последовательности. Это нужно для отображения этого формата в браузере, а также при использовании утилиты командной строки watch. diff --git a/docs/ru/formats/prettyspace.md b/docs/ru/formats/prettyspace.md index 10ba36f6182..60c7bfbdd7e 100644 --- a/docs/ru/formats/prettyspace.md +++ b/docs/ru/formats/prettyspace.md @@ -1,3 +1,5 @@ + + # PrettySpace -Отличается от `PrettyCompact` тем, что вместо сетки используется пустое пространство (пробелы). +Отличается от [PrettyCompact](prettycompact.md#prettycompact) тем, что вместо сетки используется пустое пространство (пробелы). diff --git a/docs/ru/formats/rowbinary.md b/docs/ru/formats/rowbinary.md index 24b3c5c5005..d0d33c696c7 100644 --- a/docs/ru/formats/rowbinary.md +++ b/docs/ru/formats/rowbinary.md @@ -1,3 +1,5 @@ + + # RowBinary Форматирует и парсит данные по строкам, в бинарном виде. Строки и значения уложены подряд, без разделителей. diff --git a/docs/ru/formats/tabseparated.md b/docs/ru/formats/tabseparated.md index 4a2c7ea9abf..a38c418d10d 100644 --- a/docs/ru/formats/tabseparated.md +++ b/docs/ru/formats/tabseparated.md @@ -1,3 +1,5 @@ + + # TabSeparated В TabSeparated формате данные пишутся по строкам. Каждая строчка содержит значения, разделённые табами. После каждого значения идёт таб, кроме последнего значения в строке, после которого идёт перевод строки. Везде подразумеваются исключительно unix-переводы строк. Последняя строка также обязана содержать перевод строки на конце. Значения пишутся в текстовом виде, без обрамляющих кавычек, с экранированием служебных символов. diff --git a/docs/ru/formats/tabseparatedraw.md b/docs/ru/formats/tabseparatedraw.md index f05f5b64f01..a785e353b8b 100644 --- a/docs/ru/formats/tabseparatedraw.md +++ b/docs/ru/formats/tabseparatedraw.md @@ -1,3 +1,5 @@ + + # TabSeparatedRaw Отличается от формата `TabSeparated` тем, что строки выводятся без экранирования. diff --git a/docs/ru/formats/tabseparatedwithnames.md b/docs/ru/formats/tabseparatedwithnames.md index d69fef92d46..51413e3b3d8 100644 --- a/docs/ru/formats/tabseparatedwithnames.md +++ b/docs/ru/formats/tabseparatedwithnames.md @@ -1,3 +1,5 @@ + + # TabSeparatedWithNames Отличается от формата `TabSeparated` тем, что в первой строке пишутся имена столбцов. diff --git a/docs/ru/formats/tabseparatedwithnamesandtypes.md b/docs/ru/formats/tabseparatedwithnamesandtypes.md index 8e024e28259..8a5ded88ffc 100644 --- a/docs/ru/formats/tabseparatedwithnamesandtypes.md +++ b/docs/ru/formats/tabseparatedwithnamesandtypes.md @@ -1,3 +1,5 @@ + + # TabSeparatedWithNamesAndTypes Отличается от формата `TabSeparated` тем, что в первой строке пишутся имена столбцов, а во второй - типы столбцов. diff --git a/docs/ru/formats/tskv.md b/docs/ru/formats/tskv.md index 0f61cab26e8..50d95b928bc 100644 --- a/docs/ru/formats/tskv.md +++ b/docs/ru/formats/tskv.md @@ -1,3 +1,5 @@ + + # TSKV Похож на TabSeparated, но выводит значения в формате name=value. Имена экранируются так же, как строки в формате TabSeparated и, дополнительно, экранируется также символ =. diff --git a/docs/ru/formats/values.md b/docs/ru/formats/values.md index 9214b48b65b..a8037898a31 100644 --- a/docs/ru/formats/values.md +++ b/docs/ru/formats/values.md @@ -1,3 +1,5 @@ + + # Values Выводит каждую строку в скобках. Строки разделены запятыми. После последней строки запятой нет. Значения внутри скобок также разделены запятыми. Числа выводятся в десятичном виде без кавычек. Массивы выводятся в квадратных скобках. Строки, даты, даты-с-временем выводятся в кавычках. Правила экранирования и особенности парсинга аналогичны формату TabSeparated. При форматировании, лишние пробелы не ставятся, а при парсинге - допустимы и пропускаются (за исключением пробелов внутри значений типа массив, которые недопустимы). diff --git a/docs/ru/formats/vertical.md b/docs/ru/formats/vertical.md index 0496defb293..98da1a6686e 100644 --- a/docs/ru/formats/vertical.md +++ b/docs/ru/formats/vertical.md @@ -1,3 +1,5 @@ + + # Vertical Выводит каждое значение на отдельной строке, с указанием имени столбца. Формат удобно использовать для вывода одной-нескольких строк, если каждая строка состоит из большого количества столбцов. diff --git a/docs/ru/formats/verticalraw.md b/docs/ru/formats/verticalraw.md index fb497430fcd..62a62e9cc9d 100644 --- a/docs/ru/formats/verticalraw.md +++ b/docs/ru/formats/verticalraw.md @@ -1,3 +1,5 @@ + + # VerticalRaw Отличается от формата `Vertical` тем, что строки выводятся без экранирования. diff --git a/docs/ru/formats/xml.md b/docs/ru/formats/xml.md index 66535cf7d02..d13524bf417 100644 --- a/docs/ru/formats/xml.md +++ b/docs/ru/formats/xml.md @@ -1,3 +1,5 @@ + + # XML Формат XML подходит только для вывода данных, не для парсинга. Пример: diff --git a/docs/ru/query_language/queries.md b/docs/ru/query_language/queries.md index 8abe5d61b35..58bc73bc44a 100644 --- a/docs/ru/query_language/queries.md +++ b/docs/ru/query_language/queries.md @@ -157,13 +157,17 @@ SELECT a, b, c FROM (SELECT ...) Отсутствует отдельный запрос для удаления представлений. Чтобы удалить представление, следует использовать `DROP TABLE`. + + ## ATTACH -Запрос полностью аналогичен запросу `CREATE`, но +Запрос полностью аналогичен запросу `CREATE`, но: + - вместо слова `CREATE` используется слово `ATTACH`; - запрос не создаёт данные на диске, а предполагает, что данные уже лежат в соответствующих местах, и всего лишь добавляет информацию о таблице в сервер. -После выполнения запроса ATTACH, сервер будет знать о существовании таблицы. -Если таблица перед этим была отсоединена (``DETACH``), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры. +После выполнения `ATTACH`, сервер будет знать о существовании таблицы. + +Если таблица перед этим была отсоединена (`DETACH`), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры. ```sql ATTACH TABLE [IF NOT EXISTS] [db.]name diff --git a/docs/ru/table_engines/file.md b/docs/ru/table_engines/file.md index e9c221c56a5..8ea50eff6fd 100644 --- a/docs/ru/table_engines/file.md +++ b/docs/ru/table_engines/file.md @@ -1,3 +1,78 @@ -# File(InputFormat) + -Источником данных является файл, хранящий данные в одном из поддерживаемых форматов входных данных (TabSeparated, Native, и т. д.) ... +# File(Format) + +Управляет данными в одном файле на диске в указанном формате. + +Примеры применения: + +- Выгрузка данных из ClickHouse в файл. +- Преобразование данных из одного формата в другой. +- Обновление данных в ClickHouse редактированием файла на диске. + +## Использование движка в сервере ClickHouse + +``` +File(Format) +``` + +`Format` необходимо выбирать из тех, которые ClickHouse может и читать и писать. Полный список поддерживаемых форматов смотрите в разделе [Форматы](../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)) информацию о таблице, соответствующей имени каталога и прочитать из файла данные. + +
+Будьте аккуратны с этой функциональностью, поскольку сервер ClickHouse не отслеживает внешние изменения данных. Если в файл будет производиться запись одновременно со стороны сервера ClickHouse и с внешней стороны, то результат непредсказуем. +
+ +**Пример:** + +**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`; + - индексы; + - репликация. From 36188425795ed17299d34ed356434ec8914c0370 Mon Sep 17 00:00:00 2001 From: Alex Bocharov Date: Tue, 22 May 2018 12:23:07 +0100 Subject: [PATCH 04/11] Fix DateTime vs DateTime('UTC') inconsistency on data read. Original problem was described in PR #1650 and partially fixed by b5af4c95, however one place was forgotten and it was causing query exceptions when trying to read DateTime column across parts with different DateTime and DateTime('UTC') data type. --- dbms/src/Storages/ITableDeclaration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Storages/ITableDeclaration.cpp b/dbms/src/Storages/ITableDeclaration.cpp index 9a6ac0e2538..92762046f7f 100644 --- a/dbms/src/Storages/ITableDeclaration.cpp +++ b/dbms/src/Storages/ITableDeclaration.cpp @@ -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); From 40d5447b76ba4d12737941b762494aa57af8ca27 Mon Sep 17 00:00:00 2001 From: BayoNet Date: Thu, 24 May 2018 13:23:19 +0300 Subject: [PATCH 05/11] Updated introduction to Formats section --- docs/ru/formats/index.md | 56 ++++++++++++++++++---------------- docs/ru/table_engines/file.md | 4 +-- docs/ru/table_engines/index.md | 2 ++ 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/docs/ru/formats/index.md b/docs/ru/formats/index.md index 84a3bbbad12..a4d533db445 100644 --- a/docs/ru/formats/index.md +++ b/docs/ru/formats/index.md @@ -1,31 +1,35 @@ -# Форматы +# Форматы входных и выходных данных -Формат определяет, в каком виде данные отдаются вам (пишутся, форматируются сервером) при SELECT-е и в каком виде принимаются (читаются, парсятся сервером) при INSERT-е. +ClickHouse может принимать (`INSERT`) и отдавать (`SELECT`) данные в различных форматах. -Поддерживаемые форматы данных: +Для хранения данных [движки таблиц](../table_engines/index.md#table_engines) используют формат `Native`. Чтобы хранить данные в файлах другого формата используйте движок [File](../table_engines/file.md#table_engines-file). -- [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) +Поддерживаемые форматы и возможность использовать их в запросах `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) | ✔ | ✔ | diff --git a/docs/ru/table_engines/file.md b/docs/ru/table_engines/file.md index 8ea50eff6fd..2b4e934bfcc 100644 --- a/docs/ru/table_engines/file.md +++ b/docs/ru/table_engines/file.md @@ -1,4 +1,4 @@ - + # File(Format) @@ -16,7 +16,7 @@ File(Format) ``` -`Format` необходимо выбирать из тех, которые ClickHouse может и читать и писать. Полный список поддерживаемых форматов смотрите в разделе [Форматы](../formats/index.md#formats). +`Format` должен быть таким, который ClickHouse может использовать и в запросах `INSERT` и в запросах `SELECT`. Полный список поддерживаемых форматов смотрите в разделе [Форматы](../formats/index.md#formats). Сервер ClickHouse не позволяет указать путь к файлу, с которым будет работать `File`. Используется путь к хранилищу, определенный параметром [path](../operations/server_settings/settings.md#server_settings-path) в конфигурации сервера. diff --git a/docs/ru/table_engines/index.md b/docs/ru/table_engines/index.md index 811045a2581..90b14f70094 100644 --- a/docs/ru/table_engines/index.md +++ b/docs/ru/table_engines/index.md @@ -1,3 +1,5 @@ + + # Движки таблиц Движок таблицы (тип таблицы) определяет: From 8f279c9eb023618e39137541c8973d8cbb7b892e Mon Sep 17 00:00:00 2001 From: "Mikhail f. Shiryaev" Date: Fri, 25 May 2018 15:55:18 +0200 Subject: [PATCH 06/11] Add chown for config dir into systemd.service --- debian/clickhouse-server.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/debian/clickhouse-server.service b/debian/clickhouse-server.service index 64d2cbacf6e..b91de6f56eb 100644 --- a/debian/clickhouse-server.service +++ b/debian/clickhouse-server.service @@ -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 From 9eec14e9be8829c4a1f6facbb2c93443905c80b5 Mon Sep 17 00:00:00 2001 From: Amos Bird Date: Fri, 25 May 2018 23:38:57 +0800 Subject: [PATCH 07/11] Let's make it fancier (function try catch block). --- dbms/src/Interpreters/InterserverIOHandler.h | 34 ++++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dbms/src/Interpreters/InterserverIOHandler.h b/dbms/src/Interpreters/InterserverIOHandler.h index 41318024c23..e1321037d2c 100644 --- a/dbms/src/Interpreters/InterserverIOHandler.h +++ b/dbms/src/Interpreters/InterserverIOHandler.h @@ -85,25 +85,27 @@ public: void addEndpoint(const String & name, InterserverIOEndpointPtr endpoint) { std::lock_guard 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 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 lock(mutex); - if (!endpoint_map.count(name)) - throw Exception("No interserver IO endpoint named " + name, ErrorCodes::NO_SUCH_INTERSERVER_IO_ENDPOINT); - return endpoint_map[name]; + return endpoint_map.at(name); + } + catch (...) + { + throw Exception("No interserver IO endpoint named " + name, ErrorCodes::NO_SUCH_INTERSERVER_IO_ENDPOINT); } private: @@ -129,17 +131,15 @@ public: } ~InterserverIOEndpointHolder() + try { - try - { - handler.removeEndpoint(name); - /// After destroying the object, `endpoint` can still live, since its ownership is acquired during the processing of the request, - /// see InterserverIOHTTPHandler.cpp - } - catch (...) - { - tryLogCurrentException("~InterserverIOEndpointHolder"); - } + handler.removeEndpoint(name); + /// After destroying the object, `endpoint` can still live, since its ownership is acquired during the processing of the request, + /// see InterserverIOHTTPHandler.cpp + } + catch (...) + { + tryLogCurrentException("~InterserverIOEndpointHolder"); } ActionBlocker & getBlocker() { return endpoint->blocker; } From f1fdea74be6d2d09cdbf077043e8123d597942d7 Mon Sep 17 00:00:00 2001 From: proller Date: Fri, 25 May 2018 21:05:30 +0300 Subject: [PATCH 08/11] pbuilder: use random ports for testing (#2424) * Fix internal compiler includes with new clang * debug copy_headers.sh * Fix copy_headers.sh * Use copy-headers from cmake * Update rules * pbuildeR: use random ports for testing * critical fix --- dbms/tests/clickhouse-test | 7 +++- debian/pbuilder-hooks/B90test-server | 57 +++++++++++++++++++--------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/dbms/tests/clickhouse-test b/dbms/tests/clickhouse-test index dc64fd56e08..37e1b53c117 100755 --- a/dbms/tests/clickhouse-test +++ b/dbms/tests/clickhouse-test @@ -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) diff --git a/debian/pbuilder-hooks/B90test-server b/debian/pbuilder-hooks/B90test-server index b1c8abc1689..a6c91d67a7d 100755 --- a/debian/pbuilder-hooks/B90test-server +++ b/debian/pbuilder-hooks/B90test-server @@ -2,38 +2,61 @@ set -e set -x -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 +TEST_CONNECT=${TEST_CONNECT=1} +PACKAGE_INSTALL=${PACKAGE_INSTALL=1} +PORT_RANDOM=${PORT_RANDOM=1} -dpkg --auto-deconfigure -i /tmp/buildd/*.deb || true -apt install -y -f --allow-downgrades || true -dpkg -l | grep clickhouse || true +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 -# 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 + 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 +fi mkdir -p /etc/clickhouse-server/config.d /etc/clickhouse-client/config.d -TEST_CONNECT=${TEST_CONNECT=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:=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 "${CLICKHOUSE_PORT_HTTP}${CLICKHOUSE_PORT_TCP}${CLICKHOUSE_PORT_INTERSERVER}" > /etc/clickhouse-server/config.d/port.xml TEST_SSL=${TEST_SSL=1} if [ "${TEST_SSL}" ]; then - echo "84439440" > /etc/clickhouse-server/config.d/ssl.xml + [ "${PORT_RANDOM}" ] && echo "${CLICKHOUSE_PORT_HTTPS}${CLICKHOUSE_PORT_TCP_SECURE}" > /etc/clickhouse-server/config.d/ssl.xml echo "noneAcceptCertificateHandler" > /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} From 68ba523b23f4599c2caef0d5e2facab3986ae12d Mon Sep 17 00:00:00 2001 From: proller Date: Fri, 25 May 2018 21:13:48 +0300 Subject: [PATCH 09/11] Compile and doc fixes (#2410) * Try fix travis * fix * Fix clickhouse-local shared-split link * fix * fix * fix * Build fixes * Fix tinfo * fix * tinfo -> termcap * termcap fix * Better llvm version detect * fix * Debian postinst fix Tests: use /usr/local if exists * Compile and doc fixes * fix * fix * fix * macos fixes * fix * wip * Update demangle.h * Update demangle.cpp --- CMakeLists.txt | 6 ++--- contrib/CMakeLists.txt | 2 +- contrib/libcityhash/src/config.h | 7 ++++++ copy_headers.sh | 29 ++++++++++++++---------- dbms/CMakeLists.txt | 3 ++- dbms/tests/clickhouse-test-server | 4 ++-- dbms/tests/integration/README.md | 2 ++ docs/en/development/build_osx.md | 4 ++-- libs/libcommon/include/common/demangle.h | 1 + libs/libcommon/src/demangle.cpp | 16 +++++++++++-- libs/libcommon/src/shift10.cpp | 1 + utils/build/build_macos.sh | 2 +- 12 files changed, 53 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4056bd84cf0..e7b7f3ff6c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,14 +128,14 @@ endif () #endif () if (CMAKE_VERSION VERSION_LESS "3.8.0") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z") + 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) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 2966d5b26f8..98a7a9f6144 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -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) diff --git a/contrib/libcityhash/src/config.h b/contrib/libcityhash/src/config.h index 61c75fca818..cca744a35c0 100644 --- a/contrib/libcityhash/src/config.h +++ b/contrib/libcityhash/src/config.h @@ -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 + typedef SSIZE_T ssize_t; +#else + #include +#endif diff --git a/copy_headers.sh b/copy_headers.sh index fa2931ee457..eced943ea37 100755 --- a/copy_headers.sh +++ b/copy_headers.sh @@ -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 diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt index 0b1b9c462c1..62a982b6ca4 100644 --- a/dbms/CMakeLists.txt +++ b/dbms/CMakeLists.txt @@ -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} bash -x ${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) diff --git a/dbms/tests/clickhouse-test-server b/dbms/tests/clickhouse-test-server index 644d0288b8f..b120e9a583f 100755 --- a/dbms/tests/clickhouse-test-server +++ b/dbms/tests/clickhouse-test-server @@ -21,8 +21,8 @@ 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"} rm -rf $DATA_DIR diff --git a/dbms/tests/integration/README.md b/dbms/tests/integration/README.md index bf0d184f134..49426fe33ba 100644 --- a/dbms/tests/integration/README.md +++ b/dbms/tests/integration/README.md @@ -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`. diff --git a/docs/en/development/build_osx.md b/docs/en/development/build_osx.md index ca4b32a93c5..3355b21e3ee 100644 --- a/docs/en/development/build_osx.md +++ b/docs/en/development/build_osx.md @@ -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 .. ``` diff --git a/libs/libcommon/include/common/demangle.h b/libs/libcommon/include/common/demangle.h index 2ad24278764..87bba5bff92 100644 --- a/libs/libcommon/include/common/demangle.h +++ b/libs/libcommon/include/common/demangle.h @@ -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); diff --git a/libs/libcommon/src/demangle.cpp b/libs/libcommon/src/demangle.cpp index f6aa06e98b6..eab8a55abe0 100644 --- a/libs/libcommon/src/demangle.cpp +++ b/libs/libcommon/src/demangle.cpp @@ -1,7 +1,17 @@ #include -#include -#include +#if _MSC_VER + +std::string demangle(const char * name, int & status) +{ + status = 0; + return name; +} + +#else + +#include +#include std::string demangle(const char * name, int & status) { @@ -26,3 +36,5 @@ std::string demangle(const char * name, int & status) return res; } + +#endif diff --git a/libs/libcommon/src/shift10.cpp b/libs/libcommon/src/shift10.cpp index 9c3fcc20596..d837fb064fb 100644 --- a/libs/libcommon/src/shift10.cpp +++ b/libs/libcommon/src/shift10.cpp @@ -1,6 +1,7 @@ #include #include #include +#include template diff --git a/utils/build/build_macos.sh b/utils/build/build_macos.sh index 3d7d76f4f87..6f1edd9bdfb 100755 --- a/utils/build/build_macos.sh +++ b/utils/build/build_macos.sh @@ -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 From eed9da96df520b3b0bba5e6fc1497fe1dc4f5479 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Fri, 25 May 2018 23:30:08 +0300 Subject: [PATCH 10/11] Update index.md --- docs/ru/formats/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/ru/formats/index.md b/docs/ru/formats/index.md index a4d533db445..1646cce452b 100644 --- a/docs/ru/formats/index.md +++ b/docs/ru/formats/index.md @@ -4,8 +4,6 @@ ClickHouse может принимать (`INSERT`) и отдавать (`SELECT`) данные в различных форматах. -Для хранения данных [движки таблиц](../table_engines/index.md#table_engines) используют формат `Native`. Чтобы хранить данные в файлах другого формата используйте движок [File](../table_engines/file.md#table_engines-file). - Поддерживаемые форматы и возможность использовать их в запросах `INSERT` и `SELECT` перечислены в таблице ниже. Формат | INSERT | SELECT From ab3ab7f52df49882ac19341716f126d098648571 Mon Sep 17 00:00:00 2001 From: proller Date: Fri, 25 May 2018 23:52:20 +0300 Subject: [PATCH 11/11] clickhouse-test-server: use random ports (#2425) * Fix internal compiler includes with new clang * debug copy_headers.sh * Fix copy_headers.sh * Use copy-headers from cmake * Update rules * pbuildeR: use random ports for testing * critical fix * clickhouse-test-server: use random ports * fix * fix --- dbms/CMakeLists.txt | 2 +- dbms/tests/clickhouse-test-server | 23 ++++++++++++++++++++--- debian/pbuilder-hooks/B90test-server | 2 +- utils/travis/normal.sh | 2 ++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt index 62a982b6ca4..20774444a80 100644 --- a/dbms/CMakeLists.txt +++ b/dbms/CMakeLists.txt @@ -246,7 +246,7 @@ 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 BUILD_PATH=${ClickHouse_BINARY_DIR} DESTDIR=${ClickHouse_SOURCE_DIR} bash -x ${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 () diff --git a/dbms/tests/clickhouse-test-server b/dbms/tests/clickhouse-test-server index b120e9a583f..3caa0c123d1 100755 --- a/dbms/tests/clickhouse-test-server +++ b/dbms/tests/clickhouse-test-server @@ -25,6 +25,23 @@ export CLICKHOUSE_CONFIG=${CLICKHOUSE_CONFIG:=${CONFIG_SERVER_DIR}server-test.xm [ ! -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 diff --git a/debian/pbuilder-hooks/B90test-server b/debian/pbuilder-hooks/B90test-server index a6c91d67a7d..729b7f482e2 100755 --- a/debian/pbuilder-hooks/B90test-server +++ b/debian/pbuilder-hooks/B90test-server @@ -3,6 +3,7 @@ set -e set -x TEST_CONNECT=${TEST_CONNECT=1} +TEST_SSL=${TEST_SSL=1} PACKAGE_INSTALL=${PACKAGE_INSTALL=1} PORT_RANDOM=${PORT_RANDOM=1} @@ -42,7 +43,6 @@ export CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:=8443} if [ "${TEST_CONNECT}" ]; then [ "${PORT_RANDOM}" ] && echo "${CLICKHOUSE_PORT_HTTP}${CLICKHOUSE_PORT_TCP}${CLICKHOUSE_PORT_INTERSERVER}" > /etc/clickhouse-server/config.d/port.xml - TEST_SSL=${TEST_SSL=1} if [ "${TEST_SSL}" ]; then [ "${PORT_RANDOM}" ] && echo "${CLICKHOUSE_PORT_HTTPS}${CLICKHOUSE_PORT_TCP_SECURE}" > /etc/clickhouse-server/config.d/ssl.xml echo "noneAcceptCertificateHandler" > /etc/clickhouse-client/config.d/ssl.xml diff --git a/utils/travis/normal.sh b/utils/travis/normal.sh index ca205f6dd16..1e129ebdb06 100755 --- a/utils/travis/normal.sh +++ b/utils/travis/normal.sh @@ -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