ClickHouse/clickhouse-c — минималистский клиент C, реализующий Native wire format over TCP. Библиотека состоит из одного основного заголовка плюс опциональные последующие заголовки для TCP, compression, codecs и I/O backends. Разработана для встраивания внутри расширений PostgreSQL, но не содержит кода PostgreSQL-специфического. Включение clickhouse.h alone предоставляет чистый декодер блоков для вызывающего chc_io, пригодный для чтения вывода FORMAT Native clickhouse-local из канала без TCP, compression, и зависимостей времени связывания, кроме libc.
Быстрый старт демонстрирует декодирование запроса clickhouse local без TCP или compression. Доступен исполняемый пример end-to-end в examples/minimal_decode.c. Требуемая настройка сервера output_format_native_encode_types_in_binary_format = 0; без неё сервер выдает бинарные типовые метки, и chc_block_read возвращает CHC_ERR_TYPE.
Интеграция следует моделью единичного трансляционного блока: ровно один трансляционный блок на потребителя определяет макрос CHC_IMPLEMENTATION и включает заголовки, а другие TU включают только публичные объявления. Помощь malloc/realloc/free stdlib доступна за CHC_PROVIDE_STDLIB_ALLOC. Для wiring palloc/repalloc/pfree внутри расширений PostgreSQL смотрите pg_clickhouse или pg_stat_ch.
Заголовочные файлы включают clickhouse.h (ядро), clickhouse-client.h (цикл пакетов TCP), clickhouse-async.h (клиент без i/o), clickhouse-compression.h (сжатые кадры, адаптеры LZ4 & ZSTD), clickhouse-posix-io.h (блокирующее чтение/запись), и clickhouse-openssl.h (поддержка SSL). Каждый последующий заголовок независим. Тесты используют test.sh с CFLAGS и LDFLAGS для конфигурации.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing