ClickHouse/clickhouse-c ist ein minimalistischer C-Client, der den Native wire format über TCP implementiert. Die Bibliothek besteht aus einem Core-Header plus optionalen Folgeheadern für TCP, compression, codecs und I/O Backends. Sie ist für die Einbettung in PostgreSQL-Erweiterungen konzipiert, enthält aber keinen PostgreSQL-spezifischen Code. Das Einbinden von clickhouse.h allein bietet einen reinen Block-Decoder für caller-supplied chc_io, verwendbar zum Lesen der FORMAT Native Ausgabe von clickhouse-local aus einem Pipe ohne TCP, compression, oder Link-Time-Abhängigkeiten jenseits von libc.
Das Quickstart-Beispiel demonstriert das Dekodieren einer clickhouse local-Abfrage ohne TCP oder Kompression. Ein ausführbares End-to-End-Beispiel steht in examples/minimal_decode.c zur Verfügung. Die erforderliche Server-Einstellung ist output_format_native_encode_types_in_binary_format = 0; ohne sie emittiert der Server binäre Typ-Tags und chc_block_read gibt CHC_ERR_TYPE zurück.
Die Integration folgt einem Single-Translation-Unit-Modell: genau ein Translation-Einheit pro Consumer definiert das CHC_IMPLEMENTATION-Makro und inkludiert Header, während andere TU nur öffentliche Deklarationen inkludieren. Ein stdlib malloc/realloc/free-Helfer steht hinter CHC_PROVIDE_STDLIB_ALLOC. Für palloc/repalloc/pfree-Verkabelung in PostgreSQL-Erweiterungen siehe pg_clickhouse oder pg_stat_ch.
Header umfassen clickhouse.h (Kern), clickhouse-client.h (TCP-Paket-Loop), clickhouse-async.h (ioless Client), clickhouse-compression.h (komprimierte Frames, LZ4 & ZSTD-Adapter), clickhouse-posix-io.h (blockierender Lesen/Schreiben), und clickhouse-openssl.h (SSL-Support). Jeder folgende Header ist unabhängig. Die Tests verwenden test.sh mit CFLAGS und LDFLAGS für Konfiguration.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing