HeadlinesBriefing HeadlinesBriefing.com

GitHub ClickHouse/clickhouse-c: Client C Header-Only

Hacker News •
×

ClickHouse/clickhouse-c est un client C minimaliste mettant en œuvre le format natif wire over TCP. La bibliothèque se compose d'un en-tête principal plus des en-têtes suivants optionnels pour TCP, compression, codecs et backends E/S. Elle est conçue pour être intégrée dans des extensions PostgreSQL mais ne contient aucun code spécifique à PostgreSQL. L'inclusion de clickhouse.h seul fournit un décodeur de blocs pur sur chc_io fourni par l'appelant, utilisable pour lire la sortie FORMAT Native de clickhouse-local à partir d'un pipe sans TCP, compression, ou dépendances de liaison au-delà de libc.

La démonstration rapide montre le décodage d'une requête clickhouse local sans TCP ni compression. Une version end-to-end exécutable est disponible dans examples/minimal_decode.c. La configuration serveur requise est output_format_native_encode_types_in_binary_format = 0 ; sans elle, le serveur émet des étiquettes de type binaire et chc_block_read renvoie CHC_ERR_TYPE.

L'intégration suit un modèle d'unité de traduction unique : exactement une unité de traduction par consommateur définit la macro CHC_IMPLEMENTATION et inclut les en-têtes, tandis que les autres TU n'incluent que des déclarations publiques. Un helper malloc/realloc/free de la stdlib est disponible derrière CHC_PROVIDE_STDLIB_ALLOC. Pour le wiring palloc/repalloc/pfree dans les extensions PostgreSQL, voir pg_clickhouse ou pg_stat_ch.

Les en-têtes incluent clickhouse.h (noyau), clickhouse-client.h (boucle de paquets TCP), clickhouse-async.h (client sans i/o), clickhouse-compression.h (cadres compressés, adaptateurs LZ4 & ZSTD), clickhouse-posix-io.h (lecture/écriture bloquante), et clickhouse-openssl.h (support SSL). Chaque en-tête suivant est indépendant. Les tests utilisent test.sh avec CFLAGS et LDFLAGS pour la configuration.

Source: Hacker News · Résumé par HeadlinesBriefing