Используемые сторонние библиотеки
Список сторонних библиотек:
| Библиотека | Тип лицензии | 
|---|---|
| abseil-cpp | Apache | 
| AMQP-CPP | Apache | 
| arrow | Apache | 
| avro | Apache | 
| aws | Apache | 
| aws-c-common | Apache | 
| aws-c-event-stream | Apache | 
| aws-checksums | Apache | 
| base64 | BSD 2-clause | 
| boost | Boost | 
| boringssl | BSD | 
| brotli | MIT | 
| capnproto | MIT | 
| cassandra | Apache | 
| cctz | Apache | 
| cityhash102 | MIT | 
| cppkafka | BSD 2-clause | 
| croaring | Apache | 
| curl | Apache | 
| cyrus-sasl | BSD 2-clause | 
| double-conversion | BSD 3-clause | 
| dragonbox | Apache | 
| fast_float | Apache | 
| fastops | MIT | 
| flatbuffers | Apache | 
| fmtlib | Unknown | 
| gcem | Apache | 
| googletest | BSD 3-clause | 
| grpc | Apache | 
| h3 | Apache | 
| hyperscan | Boost | 
| icu | Public Domain | 
| icudata | Public Domain | 
| jemalloc | BSD 2-clause | 
| krb5 | MIT | 
| libc-headers | LGPL | 
| libcpuid | BSD 2-clause | 
| libcxx | Apache | 
| libcxxabi | Apache | 
| libdivide | zLib | 
| libfarmhash | MIT | 
| libgsasl | LGPL | 
| libhdfs3 | Apache | 
| libmetrohash | Apache | 
| libpq | Unknown | 
| libpqxx | BSD 3-clause | 
| librdkafka | MIT | 
| libunwind | Apache | 
| libuv | BSD | 
| llvm | Apache | 
| lz4 | BSD | 
| mariadb-connector-c | LGPL | 
| miniselect | Boost | 
| msgpack-c | Boost | 
| murmurhash | Public Domain | 
| NuRaft | Apache | 
| openldap | Unknown | 
| orc | Apache | 
| poco | Boost | 
| protobuf | BSD 3-clause | 
| rapidjson | MIT | 
| re2 | BSD 3-clause | 
| replxx | BSD 3-clause | 
| rocksdb | BSD 3-clause | 
| s2geometry | Apache | 
| sentry-native | MIT | 
| simdjson | Apache | 
| snappy | Public Domain | 
| sparsehash-c11 | BSD 3-clause | 
| stats | Apache | 
| thrift | Apache | 
| unixodbc | LGPL | 
| xz | Public Domain | 
| zlib-ng | zLib | 
| zstd | BSD | 
Список всех сторонних библиотек можно получить с помощью запроса:
SELECT library_name, license_type, license_path FROM system.licenses ORDER BY library_name COLLATE 'en';
Рекомендации по добавлению сторонних библиотек и поддержанию в них пользовательских изменений
- Весь внешний сторонний код должен находиться в отдельных папках внутри папки contribрепозитория ClickHouse. По возможности, используйте сабмодули Git.
- Клонируйте официальный репозиторий Clickhouse-extras. Используйте официальные репозитории GitHub, если они доступны.
- Создавайте новую ветку на основе той ветки, которую вы хотите интегрировать: например, master->clickhouse/masterилиrelease/vX.Y.Z->clickhouse/release/vX.Y.Z.
- Все копии Clickhouse-extras можно автоматически синхронизировать с удаленными репозиториями. Ветки clickhouse/...останутся незатронутыми, поскольку скорее всего никто не будет использовать этот шаблон именования в своих репозиториях.
- Добавьте сабмодули в папку contribрепозитория ClickHouse, на который ссылаются клонированные репозитории. Настройте сабмодули для отслеживания изменений в соответствующих веткахclickhouse/....
- Каждый раз, когда необходимо внести изменения в код библиотеки, следует создавать отдельную ветку, например clickhouse/my-fix. Затем эта ветка должна быть слита (merge) в ветку, отслеживаемую сабмодулем, например, вclickhouse/masterилиclickhouse/release/vX.Y.Z.
- Не добавляйте код в клоны репозитория Clickhouse-extras, если имя ветки не соответствует шаблону clickhouse/....
- Всегда вносите изменения с учетом того, что они попадут в официальный репозиторий. После того как PR будет влит из (ветки разработки/исправлений) вашего личного клона репозитория в Clickhouse-extras, и сабмодуль будет добавлен в репозиторий ClickHouse, рекомендуется сделать еще один PR из (ветки разработки/исправлений) репозитория Clickhouse-extras в официальный репозиторий библиотеки. Таким образом будут решены следующие задачи: 1) публикуемый код может быть использован многократно и будет иметь более высокую ценность; 2) другие пользователи также смогут использовать его в своих целях; 3) поддержкой кода будут заниматься не только разработчики ClickHouse.
- Чтобы сабмодуль начал использовать новый код из исходной ветки (например, master), сначала следует аккуратно выполнить слияние (master->clickhouse/master), и только после этого изменения могут быть добавлены в основной репозиторий ClickHouse. Это связано с тем, что в отслеживаемую ветку (например,clickhouse/master) могут быть внесены изменения, и поэтому ветка может отличаться от первоисточника (master).