From 088869b654f70f5f32d1edafac90bceeeafde5b7 Mon Sep 17 00:00:00 2001 From: SupunKavinda Date: Thu, 2 Mar 2023 01:47:00 +0100 Subject: [PATCH 01/11] adds hyvor/clickhouse-php to docs --- docs/en/interfaces/third-party/client-libraries.md | 1 + docs/ru/interfaces/third-party/client-libraries.md | 1 + docs/zh/interfaces/third-party/client-libraries.md | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/en/interfaces/third-party/client-libraries.md b/docs/en/interfaces/third-party/client-libraries.md index 4114e47e982..0e065cb7179 100644 --- a/docs/en/interfaces/third-party/client-libraries.md +++ b/docs/en/interfaces/third-party/client-libraries.md @@ -26,6 +26,7 @@ ClickHouse Inc does **not** maintain the libraries listed below and hasn’t don - [one-ck](https://github.com/lizhichao/one-ck) - [glushkovds/phpclickhouse-laravel](https://packagist.org/packages/glushkovds/phpclickhouse-laravel) - [kolya7k ClickHouse PHP extension](https://github.com//kolya7k/clickhouse-php) + - [hyvor/clickhouse-php](https://github.com/hyvor/clickhouse-php) - Go - [clickhouse](https://github.com/kshvakov/clickhouse/) - [go-clickhouse](https://github.com/roistat/go-clickhouse) diff --git a/docs/ru/interfaces/third-party/client-libraries.md b/docs/ru/interfaces/third-party/client-libraries.md index 6c63fb4c730..f55bbe2a47d 100644 --- a/docs/ru/interfaces/third-party/client-libraries.md +++ b/docs/ru/interfaces/third-party/client-libraries.md @@ -24,6 +24,7 @@ sidebar_label: "Клиентские библиотеки от сторонни - [SeasClick C++ client](https://github.com/SeasX/SeasClick) - [glushkovds/phpclickhouse-laravel](https://packagist.org/packages/glushkovds/phpclickhouse-laravel) - [kolya7k ClickHouse PHP extension](https://github.com//kolya7k/clickhouse-php) + - [hyvor/clickhouse-php](https://github.com/hyvor/clickhouse-php) - Go - [clickhouse](https://github.com/kshvakov/clickhouse/) - [go-clickhouse](https://github.com/roistat/go-clickhouse) diff --git a/docs/zh/interfaces/third-party/client-libraries.md b/docs/zh/interfaces/third-party/client-libraries.md index 1d46c19ce8b..4ee74f1d2c3 100644 --- a/docs/zh/interfaces/third-party/client-libraries.md +++ b/docs/zh/interfaces/third-party/client-libraries.md @@ -24,6 +24,7 @@ Yandex**没有**维护下面列出的库,也没有做过任何广泛的测试 - [SeasClick C++ client](https://github.com/SeasX/SeasClick) - [one-ck](https://github.com/lizhichao/one-ck) - [glushkovds/phpclickhouse-laravel](https://packagist.org/packages/glushkovds/phpclickhouse-laravel) + - [hyvor/clickhouse-php](https://github.com/hyvor/clickhouse-php) - Go - [clickhouse](https://github.com/kshvakov/clickhouse/) - [go-clickhouse](https://github.com/roistat/go-clickhouse) From f9e80b4d416e385e0135166f9a86bc756999b90a Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 16:36:35 +0400 Subject: [PATCH 02/11] Typo in the `/docs/ru/sql-reference/statements/select/group-by.md` --- docs/ru/sql-reference/statements/select/group-by.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/statements/select/group-by.md b/docs/ru/sql-reference/statements/select/group-by.md index 450543cb7a2..ea4f357d33c 100644 --- a/docs/ru/sql-reference/statements/select/group-by.md +++ b/docs/ru/sql-reference/statements/select/group-by.md @@ -108,7 +108,7 @@ SELECT year, month, day, count(*) FROM t GROUP BY year, month, day WITH ROLLUP; ## Модификатор WITH CUBE {#with-cube-modifier} -Модификатор `WITH CUBE` применятеся для расчета подытогов по всем комбинациям группировки ключевых выражений в списке `GROUP BY`. +Модификатор `WITH CUBE` применяется для расчета подытогов по всем комбинациям группировки ключевых выражений в списке `GROUP BY`. Строки с подытогами добавляются в конец результирующей таблицы. В колонках, по которым выполняется группировка, указывается значение `0` или пустая строка. From 6aee72391847c86ca6007443828b6b4000daf645 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 16:50:28 +0400 Subject: [PATCH 03/11] Typos in the page `/docs/ru/sql-reference/statements/select/join.md` --- docs/ru/sql-reference/statements/select/join.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/ru/sql-reference/statements/select/join.md b/docs/ru/sql-reference/statements/select/join.md index 6853a8c8c90..6be438f8c43 100644 --- a/docs/ru/sql-reference/statements/select/join.md +++ b/docs/ru/sql-reference/statements/select/join.md @@ -16,7 +16,7 @@ FROM (ON )|(USING ) ... ``` -Выражения из секции `ON` и столбцы из секции `USING` называется «ключами соединения». Если не указано иное, при присоединение создаётся [Декартово произведение](https://en.wikipedia.org/wiki/Cartesian_product) из строк с совпадающими значениями ключей соединения, что может привести к получению результатов с гораздо большим количеством строк, чем исходные таблицы. +Выражения из секции `ON` и столбцы из секции `USING` называются «ключами соединения». Если не указано иное, при присоединение создаётся [Декартово произведение](https://en.wikipedia.org/wiki/Cartesian_product) из строк с совпадающими значениями ключей соединения, что может привести к получению результатов с гораздо большим количеством строк, чем исходные таблицы. ## Поддерживаемые типы соединения {#select-join-types} @@ -28,7 +28,7 @@ FROM - `FULL OUTER JOIN`, не совпадающие строки из обеих таблиц возвращаются в дополнение к совпадающим строкам. - `CROSS JOIN`, производит декартово произведение таблиц целиком, ключи соединения не указываются. -Без указания типа `JOIN` подразумевается `INNER`. Ключевое слово `OUTER` можно опускать. Альтернативным синтаксисом для `CROSS JOIN` является ли указание нескольких таблиц, разделённых запятыми, в [секции FROM](from.md). +Без указания типа `JOIN` подразумевается `INNER`. Ключевое слово `OUTER` можно опускать. Альтернативным синтаксисом для `CROSS JOIN` является указание нескольких таблиц, разделённых запятыми, в [секции FROM](from.md). Дополнительные типы соединений, доступные в ClickHouse: @@ -62,7 +62,7 @@ FROM Строки объединяются только тогда, когда всё составное условие выполнено. Если оно не выполнено, то строки могут попасть в результат в зависимости от типа `JOIN`. Обратите внимание, что если то же самое условие поместить в секцию `WHERE`, то строки, для которых оно не выполняется, никогда не попаду в результат. -Оператор `OR` внутри секции `ON` работает, используя алгоритм хеш-соединения — на каждый агрумент `OR` с ключами соединений для `JOIN` создается отдельная хеш-таблица, поэтому потребление памяти и время выполнения запроса растет линейно при увеличении количества выражений `OR` секции `ON`. +Оператор `OR` внутри секции `ON` работает, используя алгоритм хеш-соединения — на каждый аргумент `OR` с ключами соединений для `JOIN` создается отдельная хеш-таблица, поэтому потребление памяти и время выполнения запроса растет линейно при увеличении количества выражений `OR` секции `ON`. :::note "Примечание" Если в условии использованы столбцы из разных таблиц, то пока поддерживается только оператор равенства (`=`). @@ -280,7 +280,7 @@ SELECT a, b, toTypeName(a), toTypeName(b) FROM t_1 FULL JOIN t_2 USING (a, b); Каждый раз для выполнения запроса с одинаковым `JOIN`, подзапрос выполняется заново — результат не кэшируется. Это можно избежать, используя специальный движок таблиц [Join](../../../engines/table-engines/special/join.md), представляющий собой подготовленное множество для соединения, которое всегда находится в оперативке. -В некоторых случаях это более эффективно использовать [IN](../../operators/in.md) вместо `JOIN`. +В некоторых случаях более эффективно использовать [IN](../../operators/in.md) вместо `JOIN`. Если `JOIN` необходим для соединения с таблицами измерений (dimension tables - сравнительно небольшие таблицы, которые содержат свойства измерений - например, имена для рекламных кампаний), то использование `JOIN` может быть не очень удобным из-за громоздкости синтаксиса, а также из-за того, что правая таблица читается заново при каждом запросе. Специально для таких случаев существует функциональность «Внешние словари», которую следует использовать вместо `JOIN`. Дополнительные сведения смотрите в разделе «Внешние словари». From 4a746f32a54a9f7b10bb029532c8b2369db9a5b0 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 17:12:15 +0400 Subject: [PATCH 04/11] Typos in the page `/docs/ru/sql-reference/statements/select/order-by.md` --- docs/ru/sql-reference/statements/select/order-by.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/ru/sql-reference/statements/select/order-by.md b/docs/ru/sql-reference/statements/select/order-by.md index 40efb862250..a3390501f2c 100644 --- a/docs/ru/sql-reference/statements/select/order-by.md +++ b/docs/ru/sql-reference/statements/select/order-by.md @@ -67,7 +67,7 @@ sidebar_label: ORDER BY ## Примеры с использованием сравнения {#collation-examples} -Пример с значениями типа [String](../../../sql-reference/data-types/string.md): +Пример со значениями типа [String](../../../sql-reference/data-types/string.md): Входная таблица: @@ -241,13 +241,13 @@ SELECT * FROM collate_test ORDER BY s ASC COLLATE 'en'; └───┴─────────┘ ``` -## Деталь реализации {#implementation-details} +## Детали реализации {#implementation-details} Если кроме `ORDER BY` указан также не слишком большой [LIMIT](limit.md), то расходуется меньше оперативки. Иначе расходуется количество памяти, пропорциональное количеству данных для сортировки. При распределённой обработке запроса, если отсутствует [GROUP BY](group-by.md), сортировка частично делается на удалённых серверах, а на сервере-инициаторе запроса производится слияние результатов. Таким образом, при распределённой сортировке, может сортироваться объём данных, превышающий размер памяти на одном сервере. Существует возможность выполнять сортировку во внешней памяти (с созданием временных файлов на диске), если оперативной памяти не хватает. Для этого предназначена настройка `max_bytes_before_external_sort`. Если она выставлена в 0 (по умолчанию), то внешняя сортировка выключена. Если она включена, то при достижении объёмом данных для сортировки указанного количества байт, накопленные данные будут отсортированы и сброшены во временный файл. После того, как все данные будут прочитаны, будет произведено слияние всех сортированных файлов и выдача результата. Файлы записываются в директорию `/var/lib/clickhouse/tmp/` (по умолчанию, может быть изменено с помощью параметра `tmp_path`) в конфиге. -На выполнение запроса может расходоваться больше памяти, чем `max_bytes_before_external_sort`. Поэтому, значение этой настройки должно быть существенно меньше, чем `max_memory_usage`. Для примера, если на вашем сервере 128 GB оперативки, и вам нужно выполнить один запрос, то выставите `max_memory_usage` в 100 GB, а `max_bytes_before_external_sort` в 80 GB. +На выполнение запроса может расходоваться больше памяти, чем `max_bytes_before_external_sort`. Поэтому значение этой настройки должно быть существенно меньше, чем `max_memory_usage`. Для примера, если на вашем сервере 128 GB оперативки, и вам нужно выполнить один запрос, то выставьте `max_memory_usage` в 100 GB, а `max_bytes_before_external_sort` в 80 GB. Внешняя сортировка работает существенно менее эффективно, чем сортировка в оперативке. @@ -366,9 +366,9 @@ ORDER BY └────────────┴────────────┴──────────┘ ``` -Поле `d1` не заполняется и использует значение по умолчанию. Поскольку у нас нет повторяющихся значений для `d2`, мы не можем правильно рассчитать последователность заполнения для `d1`. +Поле `d1` не заполняется и использует значение по умолчанию. Поскольку у нас нет повторяющихся значений для `d2`, мы не можем правильно рассчитать последовательность заполнения для `d1`. -Cледующий запрос (с измененым порядком в ORDER BY): +Cледующий запрос (с измененным порядком в ORDER BY): ```sql SELECT toDate((number * 10) * 86400) AS d1, From f57bb3d71ebe16ad542bc5e5ea6b6722cd873690 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 17:14:52 +0400 Subject: [PATCH 05/11] Typo in the page `/docs/ru/sql-reference/statements/select/prewhere.md` --- docs/ru/sql-reference/statements/select/prewhere.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/statements/select/prewhere.md b/docs/ru/sql-reference/statements/select/prewhere.md index e37aec814ec..092370d4b3a 100644 --- a/docs/ru/sql-reference/statements/select/prewhere.md +++ b/docs/ru/sql-reference/statements/select/prewhere.md @@ -13,7 +13,7 @@ Prewhere — это оптимизация для более эффективн `PREWHERE` имеет смысл использовать, если есть условия фильтрации, которые использует меньшинство столбцов из тех, что есть в запросе, но достаточно сильно фильтрует данные. Таким образом, сокращается количество читаемых данных. -В запросе может быть одновременно указаны и `PREWHERE`, и `WHERE`. В этом случае `PREWHERE` предшествует `WHERE`. +В запросе могут быть одновременно указаны и `PREWHERE`, и `WHERE`. В этом случае `PREWHERE` предшествует `WHERE`. Если значение параметра [optimize_move_to_prewhere](../../../operations/settings/settings.md#optimize_move_to_prewhere) равно 0, эвристика по автоматическому перемещению части выражений из `WHERE` к `PREWHERE` отключается. From 00d28893e8e7f1020f2fb08935db014b7f52da82 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 17:20:25 +0400 Subject: [PATCH 06/11] Typos in the page `/docs/ru/sql-reference/statements/select/sample.md` --- docs/ru/sql-reference/statements/select/sample.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/statements/select/sample.md b/docs/ru/sql-reference/statements/select/sample.md index e63479d6c27..decef52d06f 100644 --- a/docs/ru/sql-reference/statements/select/sample.md +++ b/docs/ru/sql-reference/statements/select/sample.md @@ -10,7 +10,7 @@ sidebar_label: SAMPLE Сэмплирование имеет смысл, когда: 1. Точность результата не важна, например, для оценочных расчетов. -2. Возможности аппаратной части не позволяют соответствовать строгим критериям. Например, время ответа должно быть \<100 мс. При этом точность расчета имеет более низкий приоритет. +2. Возможности аппаратной части не позволяют соответствовать строгим критериям. Например, время ответа должно быть <100 мс. При этом точность расчета имеет более низкий приоритет. 3. Точность результата участвует в бизнес-модели сервиса. Например, пользователи с бесплатной подпиской на сервис могут получать отчеты с меньшей точностью, чем пользователи с премиум подпиской. :::note "Внимание" From 39aff35ac3f77c8f99b279e5224911dbb9d6f861 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 17:23:02 +0400 Subject: [PATCH 07/11] Typos in the page `/docs/ru/sql-reference/statements/select/union.md` --- docs/ru/sql-reference/statements/select/union.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/statements/select/union.md b/docs/ru/sql-reference/statements/select/union.md index 4dad63c2c7c..05d20100452 100644 --- a/docs/ru/sql-reference/statements/select/union.md +++ b/docs/ru/sql-reference/statements/select/union.md @@ -26,7 +26,7 @@ SELECT CounterID, 2 AS table, sum(Sign) AS c Результирующие столбцы сопоставляются по их индексу (порядку внутри `SELECT`). Если имена столбцов не совпадают, то имена для конечного результата берутся из первого запроса. -При объединении выполняет приведение типов. Например, если два запроса имеют одно и то же поле с не-`Nullable` и `Nullable` совместимыми типами, полученные в результате `UNION` данные будут иметь `Nullable` тип. +При объединении выполняется приведение типов. Например, если два запроса имеют одно и то же поле с не-`Nullable` и `Nullable` совместимыми типами, полученные в результате `UNION` данные будут иметь `Nullable` тип. Запросы, которые являются частью `UNION`, могут быть заключены в круглые скобки. [ORDER BY](order-by.md) и [LIMIT](limit.md) применяются к отдельным запросам, а не к конечному результату. Если вам нужно применить преобразование к конечному результату, вы можете разместить все объединенные с помощью `UNION` запросы в подзапрос в секции [FROM](from.md). From d42a95a6c5ada969e69030c07e9ae1ee01b17e42 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 17:25:49 +0400 Subject: [PATCH 08/11] Type in the page `/docs/ru/sql-reference/statements/select/with.md` --- docs/ru/sql-reference/statements/select/with.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/statements/select/with.md b/docs/ru/sql-reference/statements/select/with.md index 58f380b0a85..c4121a6569a 100644 --- a/docs/ru/sql-reference/statements/select/with.md +++ b/docs/ru/sql-reference/statements/select/with.md @@ -5,7 +5,7 @@ sidebar_label: WITH # Секция WITH {#with-clause} -Clickhouse поддерживает [Общие табличные выражения](https://ru.wikipedia.org/wiki/Иерархические_и_рекурсивные_запросы_в_SQL), то есть позволяет использовать результаты выражений из секции `WITH` в остальной части `SELECT` запроса. Именованные подзапросы могут быть включены в текущий и дочерний контекст запроса в тех местах, где разрешены табличные объекты. Рекурсия предотвращается путем скрытия общего табличного выражения текущего уровня из выражения `WITH`. +ClickHouse поддерживает [Общие табличные выражения](https://ru.wikipedia.org/wiki/Иерархические_и_рекурсивные_запросы_в_SQL), то есть позволяет использовать результаты выражений из секции `WITH` в остальной части `SELECT` запроса. Именованные подзапросы могут быть включены в текущий и дочерний контекст запроса в тех местах, где разрешены табличные объекты. Рекурсия предотвращается путем скрытия общего табличного выражения текущего уровня из выражения `WITH`. ## Синтаксис From 740aeaba1fc18ad8667a0bbf7ffefca12b5fc9e4 Mon Sep 17 00:00:00 2001 From: Robert Schulze Date: Thu, 2 Mar 2023 13:36:47 +0000 Subject: [PATCH 09/11] Apply some CTAD --- src/Common/CancelToken.cpp | 8 +++---- src/Common/ConcurrentBoundedQueue.h | 14 ++++++------ src/Common/DateLUT.cpp | 2 +- src/Common/StatusInfo.h | 4 ++-- src/Common/TLDListsHolder.cpp | 4 ++-- src/Common/mysqlxx/Pool.cpp | 6 ++--- src/Common/mysqlxx/PoolFactory.cpp | 4 ++-- src/Common/mysqlxx/PoolWithFailover.cpp | 2 +- src/Coordination/InMemoryLogStore.cpp | 22 +++++++++---------- src/Coordination/KeeperStateMachine.cpp | 2 +- src/Coordination/SummingStateMachine.cpp | 10 ++++----- src/Databases/MySQL/DatabaseMySQL.cpp | 18 +++++++-------- .../PostgreSQL/DatabasePostgreSQL.cpp | 18 +++++++-------- src/Databases/SQLite/DatabaseSQLite.cpp | 10 ++++----- src/Interpreters/Context.cpp | 2 +- .../ExternalLoaderXMLConfigRepository.cpp | 4 ++-- src/Interpreters/GraceHashJoin.cpp | 2 +- src/Interpreters/JIT/CHJIT.cpp | 6 ++--- src/Loggers/OwnSplitChannel.cpp | 4 ++-- .../Impl/ParallelFormattingOutputFormat.cpp | 8 +++---- .../Formats/Impl/ParallelParsingInputFormat.h | 2 +- .../CreateSetAndFilterOnTheFlyStep.cpp | 2 +- src/Processors/Sources/ShellCommandSource.cpp | 4 ++-- src/Server/PrometheusMetricsWriter.cpp | 2 +- .../FileLog/FileLogDirectoryWatcher.cpp | 16 +++++++------- src/Storages/FileLog/StorageFileLog.cpp | 4 ++-- src/Storages/Hive/StorageHive.cpp | 4 ++-- .../MergeTree/ReplicatedMergeTreeQueue.cpp | 6 ++--- src/Storages/StorageDictionary.cpp | 8 +++---- src/Storages/StorageMergeTree.cpp | 4 ++-- 30 files changed, 101 insertions(+), 101 deletions(-) diff --git a/src/Common/CancelToken.cpp b/src/Common/CancelToken.cpp index 53f71fee144..077d60c7efa 100644 --- a/src/Common/CancelToken.cpp +++ b/src/Common/CancelToken.cpp @@ -35,26 +35,26 @@ namespace void CancelToken::Registry::insert(CancelToken * token) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); threads[token->thread_id] = token; } void CancelToken::Registry::remove(CancelToken * token) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); threads.erase(token->thread_id); } void CancelToken::Registry::signal(UInt64 tid) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); if (auto it = threads.find(tid); it != threads.end()) it->second->signalImpl(); } void CancelToken::Registry::signal(UInt64 tid, int code, const String & message) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); if (auto it = threads.find(tid); it != threads.end()) it->second->signalImpl(code, message); } diff --git a/src/Common/ConcurrentBoundedQueue.h b/src/Common/ConcurrentBoundedQueue.h index fd4a2d5790b..d3abf86c817 100644 --- a/src/Common/ConcurrentBoundedQueue.h +++ b/src/Common/ConcurrentBoundedQueue.h @@ -163,14 +163,14 @@ public: /// Returns size of queue size_t size() const { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); return queue.size(); } /// Returns if queue is empty bool empty() const { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); return queue.empty(); } @@ -184,7 +184,7 @@ public: bool was_finished_before = false; { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); if (is_finished) return true; @@ -202,14 +202,14 @@ public: /// Returns if queue is finished bool isFinished() const { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); return is_finished; } /// Returns if queue is finished and empty bool isFinishedAndEmpty() const { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); return is_finished && queue.empty(); } @@ -217,7 +217,7 @@ public: void clear() { { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); if (is_finished) return; @@ -233,7 +233,7 @@ public: void clearAndFinish() { { - std::lock_guard lock(queue_mutex); + std::lock_guard lock(queue_mutex); std::queue empty_queue; queue.swap(empty_queue); diff --git a/src/Common/DateLUT.cpp b/src/Common/DateLUT.cpp index ae6127670e5..a31ece00c0b 100644 --- a/src/Common/DateLUT.cpp +++ b/src/Common/DateLUT.cpp @@ -149,7 +149,7 @@ DateLUT::DateLUT() const DateLUTImpl & DateLUT::getImplementation(const std::string & time_zone) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); auto it = impls.emplace(time_zone, nullptr).first; if (!it->second) diff --git a/src/Common/StatusInfo.h b/src/Common/StatusInfo.h index 99d6a6f23f5..9aa185cd0c3 100644 --- a/src/Common/StatusInfo.h +++ b/src/Common/StatusInfo.h @@ -26,13 +26,13 @@ namespace CurrentStatusInfo inline void set(Status status, Key key, Int8 value) { - std::lock_guard lock(locks[status]); + std::lock_guard lock(locks[status]); values[status][key] = value; } inline void unset(Status status, Key key) { - std::lock_guard lock(locks[status]); + std::lock_guard lock(locks[status]); values[status].erase(key); } } diff --git a/src/Common/TLDListsHolder.cpp b/src/Common/TLDListsHolder.cpp index c493a88010b..623b88f83a5 100644 --- a/src/Common/TLDListsHolder.cpp +++ b/src/Common/TLDListsHolder.cpp @@ -109,14 +109,14 @@ size_t TLDListsHolder::parseAndAddTldList(const std::string & name, const std::s } size_t tld_list_size = tld_list.size(); - std::lock_guard lock(tld_lists_map_mutex); + std::lock_guard lock(tld_lists_map_mutex); tld_lists_map.insert(std::make_pair(name, std::move(tld_list))); return tld_list_size; } const TLDList & TLDListsHolder::getTldList(const std::string & name) { - std::lock_guard lock(tld_lists_map_mutex); + std::lock_guard lock(tld_lists_map_mutex); auto it = tld_lists_map.find(name); if (it == tld_lists_map.end()) throw Exception(ErrorCodes::TLD_LIST_NOT_FOUND, "TLD list {} does not exist", name); diff --git a/src/Common/mysqlxx/Pool.cpp b/src/Common/mysqlxx/Pool.cpp index bee62a0af2e..ba74700d4bc 100644 --- a/src/Common/mysqlxx/Pool.cpp +++ b/src/Common/mysqlxx/Pool.cpp @@ -130,7 +130,7 @@ Pool::Pool(const Poco::Util::AbstractConfiguration & cfg, const std::string & co Pool::~Pool() { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); for (auto & connection : connections) delete static_cast(connection); @@ -187,7 +187,7 @@ Pool::Entry Pool::get(uint64_t wait_timeout) Pool::Entry Pool::tryGet() { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); initialize(); @@ -229,7 +229,7 @@ void Pool::removeConnection(Connection* connection) { logger.trace("(%s): Removing connection.", getDescription()); - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); if (connection) { if (connection->ref_count > 0) diff --git a/src/Common/mysqlxx/PoolFactory.cpp b/src/Common/mysqlxx/PoolFactory.cpp index 1d2f9fc74c7..5fae934a400 100644 --- a/src/Common/mysqlxx/PoolFactory.cpp +++ b/src/Common/mysqlxx/PoolFactory.cpp @@ -76,7 +76,7 @@ PoolWithFailover PoolFactory::get(const Poco::Util::AbstractConfiguration & conf const std::string & config_name, unsigned default_connections, unsigned max_connections, size_t max_tries) { - std::lock_guard lock(impl->mutex); + std::lock_guard lock(impl->mutex); if (auto entry = impl->pools.find(config_name); entry != impl->pools.end()) { return *(entry->second); @@ -106,7 +106,7 @@ PoolWithFailover PoolFactory::get(const Poco::Util::AbstractConfiguration & conf void PoolFactory::reset() { - std::lock_guard lock(impl->mutex); + std::lock_guard lock(impl->mutex); impl->pools.clear(); impl->pools_by_ids.clear(); } diff --git a/src/Common/mysqlxx/PoolWithFailover.cpp b/src/Common/mysqlxx/PoolWithFailover.cpp index 0ed231cdf8d..cd9b9e6ec31 100644 --- a/src/Common/mysqlxx/PoolWithFailover.cpp +++ b/src/Common/mysqlxx/PoolWithFailover.cpp @@ -123,7 +123,7 @@ PoolWithFailover::PoolWithFailover(const PoolWithFailover & other) PoolWithFailover::Entry PoolWithFailover::get() { Poco::Util::Application & app = Poco::Util::Application::instance(); - std::lock_guard locker(mutex); + std::lock_guard locker(mutex); /// If we cannot connect to some replica due to pool overflow, than we will wait and connect. PoolPtr * full_pool = nullptr; diff --git a/src/Coordination/InMemoryLogStore.cpp b/src/Coordination/InMemoryLogStore.cpp index b7bccdf588e..ca240584a54 100644 --- a/src/Coordination/InMemoryLogStore.cpp +++ b/src/Coordination/InMemoryLogStore.cpp @@ -27,7 +27,7 @@ uint64_t InMemoryLogStore::start_index() const uint64_t InMemoryLogStore::next_slot() const { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); // Exclude the dummy entry. return start_idx + logs.size() - 1; } @@ -35,7 +35,7 @@ uint64_t InMemoryLogStore::next_slot() const nuraft::ptr InMemoryLogStore::last_entry() const { uint64_t next_idx = next_slot(); - std::lock_guard lock(logs_lock); + std::lock_guard lock(logs_lock); auto entry = logs.find(next_idx - 1); if (entry == logs.end()) entry = logs.find(0); @@ -47,7 +47,7 @@ uint64_t InMemoryLogStore::append(nuraft::ptr & entry) { ptr clone = makeClone(entry); - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); uint64_t idx = start_idx + logs.size() - 1; logs[idx] = clone; return idx; @@ -58,7 +58,7 @@ void InMemoryLogStore::write_at(uint64_t index, nuraft::ptr & nuraft::ptr clone = makeClone(entry); // Discard all logs equal to or greater than `index. - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); auto itr = logs.lower_bound(index); while (itr != logs.end()) itr = logs.erase(itr); @@ -76,7 +76,7 @@ nuraft::ptr>> InMemoryLogStore::log_e { nuraft::ptr src = nullptr; { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); auto entry = logs.find(i); if (entry == logs.end()) { @@ -94,7 +94,7 @@ nuraft::ptr InMemoryLogStore::entry_at(uint64_t index) { nuraft::ptr src = nullptr; { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); auto entry = logs.find(index); if (entry == logs.end()) entry = logs.find(0); @@ -107,7 +107,7 @@ uint64_t InMemoryLogStore::term_at(uint64_t index) { uint64_t term = 0; { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); auto entry = logs.find(index); if (entry == logs.end()) entry = logs.find(0); @@ -125,7 +125,7 @@ nuraft::ptr InMemoryLogStore::pack(uint64_t index, Int32 cnt) { ptr le = nullptr; { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); le = logs[ii]; } assert(le.get()); @@ -162,13 +162,13 @@ void InMemoryLogStore::apply_pack(uint64_t index, nuraft::buffer & pack) nuraft::ptr le = nuraft::log_entry::deserialize(*buf_local); { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); logs[cur_idx] = le; } } { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); auto entry = logs.upper_bound(0); if (entry != logs.end()) start_idx = entry->first; @@ -179,7 +179,7 @@ void InMemoryLogStore::apply_pack(uint64_t index, nuraft::buffer & pack) bool InMemoryLogStore::compact(uint64_t last_log_index) { - std::lock_guard l(logs_lock); + std::lock_guard l(logs_lock); for (uint64_t ii = start_idx; ii <= last_log_index; ++ii) { auto entry = logs.find(ii); diff --git a/src/Coordination/KeeperStateMachine.cpp b/src/Coordination/KeeperStateMachine.cpp index 68f6cfde01e..ccee058ba5c 100644 --- a/src/Coordination/KeeperStateMachine.cpp +++ b/src/Coordination/KeeperStateMachine.cpp @@ -341,7 +341,7 @@ void KeeperStateMachine::rollbackRequest(const KeeperStorage::RequestForSession nuraft::ptr KeeperStateMachine::last_snapshot() { /// Just return the latest snapshot. - std::lock_guard lock(snapshots_lock); + std::lock_guard lock(snapshots_lock); return latest_snapshot_meta; } diff --git a/src/Coordination/SummingStateMachine.cpp b/src/Coordination/SummingStateMachine.cpp index 4151b727744..4c21f1d8658 100644 --- a/src/Coordination/SummingStateMachine.cpp +++ b/src/Coordination/SummingStateMachine.cpp @@ -37,7 +37,7 @@ nuraft::ptr SummingStateMachine::commit(const uint64_t log_idx, bool SummingStateMachine::apply_snapshot(nuraft::snapshot & s) { - std::lock_guard ll(snapshots_lock); + std::lock_guard ll(snapshots_lock); auto entry = snapshots.find(s.get_last_log_idx()); if (entry == snapshots.end()) return false; @@ -50,7 +50,7 @@ bool SummingStateMachine::apply_snapshot(nuraft::snapshot & s) nuraft::ptr SummingStateMachine::last_snapshot() { // Just return the latest snapshot. - std::lock_guard ll(snapshots_lock); + std::lock_guard ll(snapshots_lock); auto entry = snapshots.rbegin(); if (entry == snapshots.rend()) return nullptr; @@ -100,7 +100,7 @@ void SummingStateMachine::save_logical_snp_obj( nuraft::buffer_serializer bs(data); int64_t local_value = static_cast(bs.get_u64()); - std::lock_guard ll(snapshots_lock); + std::lock_guard ll(snapshots_lock); auto entry = snapshots.find(s.get_last_log_idx()); assert(entry != snapshots.end()); entry->second->value = local_value; @@ -118,7 +118,7 @@ int SummingStateMachine::read_logical_snp_obj( { nuraft::ptr ctx = nullptr; { - std::lock_guard ll(snapshots_lock); + std::lock_guard ll(snapshots_lock); auto entry = snapshots.find(s.get_last_log_idx()); if (entry == snapshots.end()) { @@ -155,7 +155,7 @@ void SummingStateMachine::create_snapshot( nuraft::async_result::handler_type & when_done) { { - std::lock_guard ll(snapshots_lock); + std::lock_guard ll(snapshots_lock); createSnapshotInternal(s); } nuraft::ptr except(nullptr); diff --git a/src/Databases/MySQL/DatabaseMySQL.cpp b/src/Databases/MySQL/DatabaseMySQL.cpp index 85944319999..cfb64ba6959 100644 --- a/src/Databases/MySQL/DatabaseMySQL.cpp +++ b/src/Databases/MySQL/DatabaseMySQL.cpp @@ -82,7 +82,7 @@ DatabaseMySQL::DatabaseMySQL( bool DatabaseMySQL::empty() const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); fetchTablesIntoLocalCache(getContext()); @@ -99,7 +99,7 @@ bool DatabaseMySQL::empty() const DatabaseTablesIteratorPtr DatabaseMySQL::getTablesIterator(ContextPtr local_context, const FilterByNameFunction & filter_by_table_name) const { Tables tables; - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); fetchTablesIntoLocalCache(local_context); @@ -117,7 +117,7 @@ bool DatabaseMySQL::isTableExist(const String & name, ContextPtr local_context) StoragePtr DatabaseMySQL::tryGetTable(const String & mysql_table_name, ContextPtr local_context) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); fetchTablesIntoLocalCache(local_context); @@ -129,7 +129,7 @@ StoragePtr DatabaseMySQL::tryGetTable(const String & mysql_table_name, ContextPt ASTPtr DatabaseMySQL::getCreateTableQueryImpl(const String & table_name, ContextPtr local_context, bool throw_on_error) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); fetchTablesIntoLocalCache(local_context); @@ -175,7 +175,7 @@ ASTPtr DatabaseMySQL::getCreateTableQueryImpl(const String & table_name, Context time_t DatabaseMySQL::getObjectMetadataModificationTime(const String & table_name) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); fetchTablesIntoLocalCache(getContext()); @@ -360,7 +360,7 @@ void DatabaseMySQL::cleanOutdatedTables() void DatabaseMySQL::attachTable(ContextPtr /* context_ */, const String & table_name, const StoragePtr & storage, const String &) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; if (!local_tables_cache.contains(table_name)) throw Exception(ErrorCodes::UNKNOWN_TABLE, "Cannot attach table {}.{} because it does not exist.", @@ -383,7 +383,7 @@ void DatabaseMySQL::attachTable(ContextPtr /* context_ */, const String & table_ StoragePtr DatabaseMySQL::detachTable(ContextPtr /* context */, const String & table_name) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; if (remove_or_detach_tables.contains(table_name)) throw Exception(ErrorCodes::TABLE_IS_DROPPED, "Table {}.{} is dropped", @@ -405,7 +405,7 @@ String DatabaseMySQL::getMetadataPath() const void DatabaseMySQL::loadStoredObjects(ContextMutablePtr, LoadingStrictnessLevel /*mode*/, bool /* skip_startup_tables */) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; fs::directory_iterator iter(getMetadataPath()); for (fs::directory_iterator end; iter != end; ++iter) @@ -421,7 +421,7 @@ void DatabaseMySQL::loadStoredObjects(ContextMutablePtr, LoadingStrictnessLevel void DatabaseMySQL::detachTablePermanently(ContextPtr, const String & table_name) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; fs::path remove_flag = fs::path(getMetadataPath()) / (escapeForFileName(table_name) + suffix); diff --git a/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp b/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp index f2d57968baa..8c267ea929b 100644 --- a/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp +++ b/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp @@ -76,7 +76,7 @@ String DatabasePostgreSQL::formatTableName(const String & table_name, bool quote bool DatabasePostgreSQL::empty() const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); auto connection_holder = pool->get(); auto tables_list = fetchPostgreSQLTablesList(connection_holder->get(), configuration.schema); @@ -91,7 +91,7 @@ bool DatabasePostgreSQL::empty() const DatabaseTablesIteratorPtr DatabasePostgreSQL::getTablesIterator(ContextPtr local_context, const FilterByNameFunction & /* filter_by_table_name */) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); Tables tables; /// Do not allow to throw here, because this might be, for example, a query to system.tables. @@ -154,7 +154,7 @@ bool DatabasePostgreSQL::checkPostgresTable(const String & table_name) const bool DatabasePostgreSQL::isTableExist(const String & table_name, ContextPtr /* context */) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); if (detached_or_dropped.contains(table_name)) return false; @@ -165,7 +165,7 @@ bool DatabasePostgreSQL::isTableExist(const String & table_name, ContextPtr /* c StoragePtr DatabasePostgreSQL::tryGetTable(const String & table_name, ContextPtr local_context) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); if (!detached_or_dropped.contains(table_name)) return fetchTable(table_name, local_context, false); @@ -210,7 +210,7 @@ StoragePtr DatabasePostgreSQL::fetchTable(const String & table_name, ContextPtr, void DatabasePostgreSQL::attachTable(ContextPtr /* context_ */, const String & table_name, const StoragePtr & storage, const String &) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; if (!checkPostgresTable(table_name)) throw Exception(ErrorCodes::UNKNOWN_TABLE, @@ -235,7 +235,7 @@ void DatabasePostgreSQL::attachTable(ContextPtr /* context_ */, const String & t StoragePtr DatabasePostgreSQL::detachTable(ContextPtr /* context_ */, const String & table_name) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; if (detached_or_dropped.contains(table_name)) throw Exception(ErrorCodes::TABLE_IS_DROPPED, "Cannot detach table {}. It is already dropped/detached", getTableNameForLogs(table_name)); @@ -266,7 +266,7 @@ void DatabasePostgreSQL::createTable(ContextPtr local_context, const String & ta void DatabasePostgreSQL::dropTable(ContextPtr, const String & table_name, bool /* sync */) { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; if (!checkPostgresTable(table_name)) throw Exception(ErrorCodes::UNKNOWN_TABLE, "Cannot drop table {} because it does not exist", getTableNameForLogs(table_name)); @@ -293,7 +293,7 @@ void DatabasePostgreSQL::drop(ContextPtr /*context*/) void DatabasePostgreSQL::loadStoredObjects(ContextMutablePtr /* context */, LoadingStrictnessLevel /*mode*/, bool /* skip_startup_tables */) { { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; fs::directory_iterator iter(getMetadataPath()); /// Check for previously dropped tables @@ -314,7 +314,7 @@ void DatabasePostgreSQL::loadStoredObjects(ContextMutablePtr /* context */, Load void DatabasePostgreSQL::removeOutdatedTables() { - std::lock_guard lock{mutex}; + std::lock_guard lock{mutex}; auto connection_holder = pool->get(); auto actual_tables = fetchPostgreSQLTablesList(connection_holder->get(), configuration.schema); diff --git a/src/Databases/SQLite/DatabaseSQLite.cpp b/src/Databases/SQLite/DatabaseSQLite.cpp index 653e22487f0..1cba9d1dc26 100644 --- a/src/Databases/SQLite/DatabaseSQLite.cpp +++ b/src/Databases/SQLite/DatabaseSQLite.cpp @@ -40,14 +40,14 @@ DatabaseSQLite::DatabaseSQLite( bool DatabaseSQLite::empty() const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); return fetchTablesList().empty(); } DatabaseTablesIteratorPtr DatabaseSQLite::getTablesIterator(ContextPtr local_context, const IDatabase::FilterByNameFunction &) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); Tables tables; auto table_names = fetchTablesList(); @@ -120,14 +120,14 @@ bool DatabaseSQLite::checkSQLiteTable(const String & table_name) const bool DatabaseSQLite::isTableExist(const String & table_name, ContextPtr) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); return checkSQLiteTable(table_name); } StoragePtr DatabaseSQLite::tryGetTable(const String & table_name, ContextPtr local_context) const { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); return fetchTable(table_name, local_context, false); } @@ -175,7 +175,7 @@ ASTPtr DatabaseSQLite::getCreateTableQueryImpl(const String & table_name, Contex { StoragePtr storage; { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); storage = fetchTable(table_name, local_context, false); } if (!storage) diff --git a/src/Interpreters/Context.cpp b/src/Interpreters/Context.cpp index 33505e41789..d1b09707bca 100644 --- a/src/Interpreters/Context.cpp +++ b/src/Interpreters/Context.cpp @@ -1289,7 +1289,7 @@ void Context::addQueryAccessInfo( if (isGlobalContext()) throw Exception(ErrorCodes::LOGICAL_ERROR, "Global context cannot have query access info"); - std::lock_guard lock(query_access_info.mutex); + std::lock_guard lock(query_access_info.mutex); query_access_info.databases.emplace(quoted_database_name); query_access_info.tables.emplace(full_quoted_table_name); for (const auto & column_name : column_names) diff --git a/src/Interpreters/ExternalLoaderXMLConfigRepository.cpp b/src/Interpreters/ExternalLoaderXMLConfigRepository.cpp index ba4d9beffe3..8b9584f1242 100644 --- a/src/Interpreters/ExternalLoaderXMLConfigRepository.cpp +++ b/src/Interpreters/ExternalLoaderXMLConfigRepository.cpp @@ -34,7 +34,7 @@ std::set ExternalLoaderXMLConfigRepository::getAllLoadablesDefiniti std::unordered_set patterns_copy; { - std::lock_guard lock(patterns_mutex); + std::lock_guard lock(patterns_mutex); patterns_copy = patterns; } @@ -71,7 +71,7 @@ std::set ExternalLoaderXMLConfigRepository::getAllLoadablesDefiniti void ExternalLoaderXMLConfigRepository::updatePatterns(const std::unordered_set & patterns_) { - std::lock_guard lock(patterns_mutex); + std::lock_guard lock(patterns_mutex); if (patterns == patterns_) return; diff --git a/src/Interpreters/GraceHashJoin.cpp b/src/Interpreters/GraceHashJoin.cpp index 51d4c7d1f4b..79a825a752f 100644 --- a/src/Interpreters/GraceHashJoin.cpp +++ b/src/Interpreters/GraceHashJoin.cpp @@ -52,7 +52,7 @@ namespace Block read() { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); if (eof) return {}; diff --git a/src/Interpreters/JIT/CHJIT.cpp b/src/Interpreters/JIT/CHJIT.cpp index 96c02ad539e..63fe4f44f5f 100644 --- a/src/Interpreters/JIT/CHJIT.cpp +++ b/src/Interpreters/JIT/CHJIT.cpp @@ -352,7 +352,7 @@ CHJIT::~CHJIT() = default; CHJIT::CompiledModule CHJIT::compileModule(std::function compile_function) { - std::lock_guard lock(jit_lock); + std::lock_guard lock(jit_lock); auto module = createModuleForCompilation(); compile_function(*module); @@ -426,7 +426,7 @@ CHJIT::CompiledModule CHJIT::compileModule(std::unique_ptr module) void CHJIT::deleteCompiledModule(const CHJIT::CompiledModule & module) { - std::lock_guard lock(jit_lock); + std::lock_guard lock(jit_lock); auto module_it = module_identifier_to_memory_manager.find(module.identifier); if (module_it == module_identifier_to_memory_manager.end()) @@ -438,7 +438,7 @@ void CHJIT::deleteCompiledModule(const CHJIT::CompiledModule & module) void CHJIT::registerExternalSymbol(const std::string & symbol_name, void * address) { - std::lock_guard lock(jit_lock); + std::lock_guard lock(jit_lock); symbol_resolver->registerSymbol(symbol_name, address); } diff --git a/src/Loggers/OwnSplitChannel.cpp b/src/Loggers/OwnSplitChannel.cpp index 7974d5212e1..047f6caffcd 100644 --- a/src/Loggers/OwnSplitChannel.cpp +++ b/src/Loggers/OwnSplitChannel.cpp @@ -137,7 +137,7 @@ void OwnSplitChannel::logSplit(const Poco::Message & msg) std::shared_ptr text_log_locked{}; { - std::lock_guard lock(text_log_mutex); + std::lock_guard lock(text_log_mutex); text_log_locked = text_log.lock(); } if (text_log_locked) @@ -155,7 +155,7 @@ void OwnSplitChannel::addChannel(Poco::AutoPtr channel, const std #ifndef WITHOUT_TEXT_LOG void OwnSplitChannel::addTextLog(std::shared_ptr log, int max_priority) { - std::lock_guard lock(text_log_mutex); + std::lock_guard lock(text_log_mutex); text_log = log; text_log_max_priority.store(max_priority, std::memory_order_relaxed); } diff --git a/src/Processors/Formats/Impl/ParallelFormattingOutputFormat.cpp b/src/Processors/Formats/Impl/ParallelFormattingOutputFormat.cpp index db4bb422cb1..35d4dd9ddcd 100644 --- a/src/Processors/Formats/Impl/ParallelFormattingOutputFormat.cpp +++ b/src/Processors/Formats/Impl/ParallelFormattingOutputFormat.cpp @@ -15,7 +15,7 @@ namespace DB collector_finished.wait(); { - std::lock_guard lock(collector_thread_mutex); + std::lock_guard lock(collector_thread_mutex); if (collector_thread.joinable()) collector_thread.join(); } @@ -80,7 +80,7 @@ namespace DB } { - std::lock_guard lock(collector_thread_mutex); + std::lock_guard lock(collector_thread_mutex); if (collector_thread.joinable()) collector_thread.join(); } @@ -137,7 +137,7 @@ namespace DB { /// Notify other threads. - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); unit.status = READY_TO_INSERT; writer_condvar.notify_all(); } @@ -227,7 +227,7 @@ namespace DB unit.actual_memory_size = out_buffer.getActualSize(); { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); unit.status = READY_TO_READ; collector_condvar.notify_all(); } diff --git a/src/Processors/Formats/Impl/ParallelParsingInputFormat.h b/src/Processors/Formats/Impl/ParallelParsingInputFormat.h index 252b6ec3f81..03fb2d650dc 100644 --- a/src/Processors/Formats/Impl/ParallelParsingInputFormat.h +++ b/src/Processors/Formats/Impl/ParallelParsingInputFormat.h @@ -292,7 +292,7 @@ private: { /// Additionally notify condvars - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); segmentator_condvar.notify_all(); reader_condvar.notify_all(); } diff --git a/src/Processors/QueryPlan/CreateSetAndFilterOnTheFlyStep.cpp b/src/Processors/QueryPlan/CreateSetAndFilterOnTheFlyStep.cpp index 86b64d1519c..53dcec9ef0a 100644 --- a/src/Processors/QueryPlan/CreateSetAndFilterOnTheFlyStep.cpp +++ b/src/Processors/QueryPlan/CreateSetAndFilterOnTheFlyStep.cpp @@ -62,7 +62,7 @@ public: { assert(!rhs_ports.first->isConnected() && !rhs_ports.second->isConnected()); - std::lock_guard lock(mux); + std::lock_guard lock(mux); if (input_port || output_port) { assert(input_port && output_port); diff --git a/src/Processors/Sources/ShellCommandSource.cpp b/src/Processors/Sources/ShellCommandSource.cpp index 4983fa047dc..ed8f9b41e78 100644 --- a/src/Processors/Sources/ShellCommandSource.cpp +++ b/src/Processors/Sources/ShellCommandSource.cpp @@ -274,7 +274,7 @@ namespace } catch (...) { - std::lock_guard lock(send_data_lock); + std::lock_guard lock(send_data_lock); exception_during_send_data = std::current_exception(); } }); @@ -387,7 +387,7 @@ namespace void rethrowExceptionDuringSendDataIfNeeded() { - std::lock_guard lock(send_data_lock); + std::lock_guard lock(send_data_lock); if (exception_during_send_data) { command_is_invalid = true; diff --git a/src/Server/PrometheusMetricsWriter.cpp b/src/Server/PrometheusMetricsWriter.cpp index 843d1e64463..abf2a2c0b6b 100644 --- a/src/Server/PrometheusMetricsWriter.cpp +++ b/src/Server/PrometheusMetricsWriter.cpp @@ -125,7 +125,7 @@ void PrometheusMetricsWriter::write(WriteBuffer & wb) const { for (size_t i = 0, end = CurrentStatusInfo::end(); i < end; ++i) { - std::lock_guard lock(CurrentStatusInfo::locks[static_cast(i)]); + std::lock_guard lock(CurrentStatusInfo::locks[static_cast(i)]); std::string metric_name{CurrentStatusInfo::getName(static_cast(i))}; std::string metric_doc{CurrentStatusInfo::getDocumentation(static_cast(i))}; diff --git a/src/Storages/FileLog/FileLogDirectoryWatcher.cpp b/src/Storages/FileLog/FileLogDirectoryWatcher.cpp index 192721f9f3c..3c5342a1e83 100644 --- a/src/Storages/FileLog/FileLogDirectoryWatcher.cpp +++ b/src/Storages/FileLog/FileLogDirectoryWatcher.cpp @@ -12,7 +12,7 @@ FileLogDirectoryWatcher::FileLogDirectoryWatcher(const std::string & path_, Stor FileLogDirectoryWatcher::Events FileLogDirectoryWatcher::getEventsAndReset() { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); Events res; res.swap(events); return res; @@ -20,7 +20,7 @@ FileLogDirectoryWatcher::Events FileLogDirectoryWatcher::getEventsAndReset() FileLogDirectoryWatcher::Error FileLogDirectoryWatcher::getErrorAndReset() { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); Error old_error = error; error = {}; return old_error; @@ -33,7 +33,7 @@ const std::string & FileLogDirectoryWatcher::getPath() const void FileLogDirectoryWatcher::onItemAdded(DirectoryWatcherBase::DirectoryEvent ev) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); EventInfo info{ev.event, "onItemAdded"}; std::string event_path = ev.path; @@ -51,7 +51,7 @@ void FileLogDirectoryWatcher::onItemAdded(DirectoryWatcherBase::DirectoryEvent e void FileLogDirectoryWatcher::onItemRemoved(DirectoryWatcherBase::DirectoryEvent ev) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); EventInfo info{ev.event, "onItemRemoved"}; std::string event_path = ev.path; @@ -74,7 +74,7 @@ void FileLogDirectoryWatcher::onItemRemoved(DirectoryWatcherBase::DirectoryEvent /// because it is equal to just record and handle one MODIY event void FileLogDirectoryWatcher::onItemModified(DirectoryWatcherBase::DirectoryEvent ev) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); auto event_path = ev.path; EventInfo info{ev.event, "onItemModified"}; @@ -97,7 +97,7 @@ void FileLogDirectoryWatcher::onItemModified(DirectoryWatcherBase::DirectoryEven void FileLogDirectoryWatcher::onItemMovedFrom(DirectoryWatcherBase::DirectoryEvent ev) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); EventInfo info{ev.event, "onItemMovedFrom"}; std::string event_path = ev.path; @@ -114,7 +114,7 @@ void FileLogDirectoryWatcher::onItemMovedFrom(DirectoryWatcherBase::DirectoryEve void FileLogDirectoryWatcher::onItemMovedTo(DirectoryWatcherBase::DirectoryEvent ev) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); EventInfo info{ev.event, "onItemMovedTo"}; std::string event_path = ev.path; @@ -131,7 +131,7 @@ void FileLogDirectoryWatcher::onItemMovedTo(DirectoryWatcherBase::DirectoryEvent void FileLogDirectoryWatcher::onError(Exception e) { - std::lock_guard lock(mutex); + std::lock_guard lock(mutex); LOG_ERROR(log, "Error happened during watching directory: {}", error.error_msg); error.has_error = true; error.error_msg = e.message(); diff --git a/src/Storages/FileLog/StorageFileLog.cpp b/src/Storages/FileLog/StorageFileLog.cpp index 7838db881e9..dae6f6a7ca9 100644 --- a/src/Storages/FileLog/StorageFileLog.cpp +++ b/src/Storages/FileLog/StorageFileLog.cpp @@ -312,7 +312,7 @@ Pipe StorageFileLog::read( if (mv_attached) throw Exception(ErrorCodes::QUERY_NOT_ALLOWED, "Cannot read from StorageFileLog with attached materialized views"); - std::lock_guard lock(file_infos_mutex); + std::lock_guard lock(file_infos_mutex); if (running_streams) { throw Exception(ErrorCodes::CANNOT_SELECT, "Another select query is running on this table, need to wait it finish."); @@ -659,7 +659,7 @@ void StorageFileLog::threadFunc() bool StorageFileLog::streamToViews() { - std::lock_guard lock(file_infos_mutex); + std::lock_guard lock(file_infos_mutex); if (running_streams) { LOG_INFO(log, "Another select query is running on this table, need to wait it finish."); diff --git a/src/Storages/Hive/StorageHive.cpp b/src/Storages/Hive/StorageHive.cpp index 13477a46bb5..85e6341eb5a 100644 --- a/src/Storages/Hive/StorageHive.cpp +++ b/src/Storages/Hive/StorageHive.cpp @@ -856,7 +856,7 @@ HiveFiles StorageHive::collectHiveFiles( = collectHiveFilesFromPartition(partition, query_info, hive_table_metadata, fs, context_, prune_level); if (!hive_files_in_partition.empty()) { - std::lock_guard lock(hive_files_mutex); + std::lock_guard lock(hive_files_mutex); hit_parttions_num += 1; if (hive_max_query_partitions > 0 && hit_parttions_num > hive_max_query_partitions) { @@ -882,7 +882,7 @@ HiveFiles StorageHive::collectHiveFiles( auto hive_file = getHiveFileIfNeeded(file_info, {}, query_info, hive_table_metadata, context_, prune_level); if (hive_file) { - std::lock_guard lock(hive_files_mutex); + std::lock_guard lock(hive_files_mutex); hive_files.push_back(hive_file); } }); diff --git a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp b/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp index 125529e7b94..20dbaa73812 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp +++ b/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp @@ -2316,7 +2316,7 @@ bool ReplicatedMergeTreeMergePredicate::canMergeSinglePart( return false; } - std::lock_guard lock(queue.state_mutex); + std::lock_guard lock(queue.state_mutex); /// We look for containing parts in queue.virtual_parts (and not in prev_virtual_parts) because queue.virtual_parts is newer /// and it is guaranteed that it will contain all merges assigned before this object is constructed. @@ -2334,7 +2334,7 @@ bool ReplicatedMergeTreeMergePredicate::canMergeSinglePart( bool ReplicatedMergeTreeMergePredicate::partParticipatesInReplaceRange(const MergeTreeData::DataPartPtr & part, String * out_reason) const { - std::lock_guard lock(queue.state_mutex); + std::lock_guard lock(queue.state_mutex); for (const auto & entry : queue.queue) { if (entry->type != ReplicatedMergeTreeLogEntry::REPLACE_RANGE) @@ -2457,7 +2457,7 @@ bool ReplicatedMergeTreeMergePredicate::isGoingToBeDropped(const MergeTreePartIn String ReplicatedMergeTreeMergePredicate::getCoveringVirtualPart(const String & part_name) const { - std::lock_guard lock(queue.state_mutex); + std::lock_guard lock(queue.state_mutex); return queue.virtual_parts.getContainingPart(MergeTreePartInfo::fromPartName(part_name, queue.format_version)); } diff --git a/src/Storages/StorageDictionary.cpp b/src/Storages/StorageDictionary.cpp index 5d1f08771be..b0b8aba38c7 100644 --- a/src/Storages/StorageDictionary.cpp +++ b/src/Storages/StorageDictionary.cpp @@ -208,13 +208,13 @@ void StorageDictionary::removeDictionaryConfigurationFromRepository() Poco::Timestamp StorageDictionary::getUpdateTime() const { - std::lock_guard lock(dictionary_config_mutex); + std::lock_guard lock(dictionary_config_mutex); return update_time; } LoadablesConfigurationPtr StorageDictionary::getConfiguration() const { - std::lock_guard lock(dictionary_config_mutex); + std::lock_guard lock(dictionary_config_mutex); return configuration; } @@ -234,7 +234,7 @@ void StorageDictionary::renameInMemory(const StorageID & new_table_id) assert(old_table_id.uuid == new_table_id.uuid || move_to_atomic || move_to_ordinary); { - std::lock_guard lock(dictionary_config_mutex); + std::lock_guard lock(dictionary_config_mutex); configuration->setString("dictionary.database", new_table_id.database_name); configuration->setString("dictionary.name", new_table_id.table_name); @@ -301,7 +301,7 @@ void StorageDictionary::alter(const AlterCommands & params, ContextPtr alter_con dictionary_non_const->setDictionaryComment(new_comment); } - std::lock_guard lock(dictionary_config_mutex); + std::lock_guard lock(dictionary_config_mutex); configuration->setString("dictionary.comment", new_comment); } diff --git a/src/Storages/StorageMergeTree.cpp b/src/Storages/StorageMergeTree.cpp index 8210ef93172..aadd7b8c20a 100644 --- a/src/Storages/StorageMergeTree.cpp +++ b/src/Storages/StorageMergeTree.cpp @@ -732,7 +732,7 @@ CancellationCode StorageMergeTree::killMutation(const String & mutation_id) to_kill->removeFile(); LOG_TRACE(log, "Cancelled part mutations and removed mutation file {}", mutation_id); { - std::lock_guard lock(mutation_wait_mutex); + std::lock_guard lock(mutation_wait_mutex); mutation_wait_event.notify_all(); } @@ -1306,7 +1306,7 @@ size_t StorageMergeTree::clearOldMutations(bool truncate) std::vector mutations_to_delete; { - std::lock_guard lock(currently_processing_in_background_mutex); + std::lock_guard lock(currently_processing_in_background_mutex); if (current_mutations_by_version.size() <= finished_mutations_to_keep) return 0; From 29f0f4e74517e43eb2d9d8b1d76be08efaa0ba6a Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 2 Mar 2023 17:54:16 +0400 Subject: [PATCH 10/11] Typos in the page `/docs/ru/sql-reference/statements/create/table.md` --- docs/ru/sql-reference/statements/create/table.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/ru/sql-reference/statements/create/table.md b/docs/ru/sql-reference/statements/create/table.md index c29d575cac1..7a930b529ed 100644 --- a/docs/ru/sql-reference/statements/create/table.md +++ b/docs/ru/sql-reference/statements/create/table.md @@ -301,7 +301,7 @@ ClickHouse поддерживает временные таблицы со сл - Временные таблицы исчезают после завершения сессии, в том числе при обрыве соединения. - Временная таблица использует только модуль памяти. - Невозможно указать базу данных для временной таблицы. Она создается вне баз данных. -- Невозможно создать временную таблицу распределнным DDL запросом на всех серверах кластера (с опцией `ON CLUSTER`): такая таблица существует только в рамках существующей сессии. +- Невозможно создать временную таблицу распределённым DDL запросом на всех серверах кластера (с опцией `ON CLUSTER`): такая таблица существует только в рамках существующей сессии. - Если временная таблица имеет то же имя, что и некоторая другая, то, при упоминании в запросе без указания БД, будет использована временная таблица. - При распределённой обработке запроса, используемые в запросе временные таблицы, передаются на удалённые серверы. @@ -344,7 +344,9 @@ REPLACE TABLE myOldTable SELECT * FROM myOldTable WHERE CounterID <12345; ### Синтаксис +```sql {CREATE [OR REPLACE]|REPLACE} TABLE [db.]table_name +``` Для данного запроса можно использовать любые варианты синтаксиса запроса `CREATE`. Запрос `REPLACE` для несуществующей таблицы вызовет ошибку. From d378ae9c7698685cb187deff8e7e490058d5ccd5 Mon Sep 17 00:00:00 2001 From: Robert Schulze Date: Thu, 2 Mar 2023 17:05:11 +0000 Subject: [PATCH 11/11] Docs: Switch two rows for consistency --- docs/en/sql-reference/functions/date-time-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/sql-reference/functions/date-time-functions.md b/docs/en/sql-reference/functions/date-time-functions.md index f6af8abcbaf..49b0bc25edd 100644 --- a/docs/en/sql-reference/functions/date-time-functions.md +++ b/docs/en/sql-reference/functions/date-time-functions.md @@ -1231,8 +1231,8 @@ Using replacement fields, you can define a pattern for the resulting string. “ | %e | day of the month, space-padded (1-31) |   2 | | %f | fractional second from the fractional part of DateTime64 | 1234560 | | %F | short YYYY-MM-DD date, equivalent to %Y-%m-%d | 2018-01-02 | -| %G | four-digit year format for ISO week number, calculated from the week-based year [defined by the ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Week_dates) standard, normally useful only with %V | 2018 | | %g | two-digit year format, aligned to ISO 8601, abbreviated from four-digit notation | 18 | +| %G | four-digit year format for ISO week number, calculated from the week-based year [defined by the ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Week_dates) standard, normally useful only with %V | 2018 | | %h | hour in 12h format (01-12) | 09 | | %H | hour in 24h format (00-23) | 22 | | %i | minute (00-59) | 33 |