Используемые сторонние библиотеки
Список сторонних библиотек:
Библиотека | Тип лицензии |
---|---|
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
).