What's Changed
- Bump version in Directory.Packages.Props by @alex-clickhouse in #394
- Bump actions/cache from 5 to 6 by @dependabot[bot] in #389
- Add a UseFormDataParameters property to ClickHouseConnectionStringBuilder by @Skyuzii in #392
- Add StressHouse benchmark-compare workflow by @alex-clickhouse in #396
- Fix StressHouse benchmark workflow: grant pull-requests: write by @alex-clickhouse in #397
- Optimize Variant GetMatchingType with O(1) type lookup (#493) by @alex-clickhouse in #420
- Add Code of Conduct by @laeg in #425
- docs(AGENTS): test isolation, determinism & parametrization conventions by @polyglotAI-bot in #429
- Add pluggable system for bulk insert compression, with gzip and brotli compressors by @alex-clickhouse in #427
- Reduce allocations in DecimalType.WriteBigInteger by @alex-clickhouse in #432
- Avoid boxing in the POCO binary-insert Write path by @alex-clickhouse in #434
- Bump actions/setup-dotnet from 5 to 6 by @dependabot[bot] in #450
- perf(read): cache stateless type singletons in BinaryTypeDecoder.FromByteCode by @alex-clickhouse in #453
- Remove per-batch StreamWriter allocation in binary-insert serializers by @alex-clickhouse in #444
- Fix ClickHouseServerException for empty HTTP error bodies by @polyglotAI-bot in #441
- chore: remove claude-pr-triage workflow by @alex-clickhouse in #458
- Docs: own and sync ClickHouse documentation by @Blargian in #454
- perf(read): pool the response read buffer (#670) by @alex-clickhouse in #451
- Avoid per-row byte[] allocation in fixed-size binary reads by @alex-clickhouse in #448
- Test matrix: +26.6 +26.7 -26.4 by @polyglotAI-bot in #461
- perf(http): reduce per-query request-URI allocations by @alex-clickhouse in #457
- Bump actions/checkout from 5 to 7 by @dependabot[bot] in #463
- test: isolate every test table behind a randomized-name helper by @alex-clickhouse in #470
- Report DateTime64/Time64 fractional scale in GetSchemaTable() by @polyglotAI-bot in #446
- Stream binary-insert payload directly into the request body by @alex-clickhouse in #442
- Fix InsertOptions copy methods silently dropping caller-set options by @polyglotAI-bot in #474
- Add built-in LZ4 codec (vendored K4os, no third-party dependency) by @alex-clickhouse in #431
- perf(compression): pool the GZip/Brotli write buffer instead of allocating per batch by @alex-clickhouse in #437
- perf(types): pre-size Map read dictionary to known length by @polyglotAI-bot in #480
- Fix mid-stream server exception detection on the streaming read path (#476) by @polyglotAI-bot in #477
- perf(types): read Array columns into a typed T[] to bypass reflection by @polyglotAI-bot in #482
- perf(types): construct small tuples directly in TupleType.Read by @polyglotAI-bot in #481
- chore: union-merge CHANGELOG.md and RELEASENOTES.md by @polyglotAI-bot in #489
- docs(AGENTS): capture recurring PR review feedback as conventions by @polyglotAI-bot in #487
- Fix schema: dispose the command created by GetSchema("Columns") by @polyglotAI-bot in #495
- Fix GetSchema("Columns") building invalid SQL for a table-only restriction by @polyglotAI-bot in #496
- Revert "chore: union-merge CHANGELOG.md and RELEASENOTES.md" (#489) by @polyglotAI-bot in #500
- fix(types): preserve JSON paths starting with setting names by @fallintoplace in #498
- Fix GetSchema("Columns") silently ignoring restrictions beyond database and table by @polyglotAI-bot in #497
- fix(http): dispose HTTP responses the client fully consumes by @polyglotAI-bot in #492
- perf(read): remove per-scalar rent-and-copy from the response stream chain by @alex-clickhouse in #472
- fix(http): drop the redundant content Dispose on the raw-stream failure path by @polyglotAI-bot in #494
- Fix HTTP parameters: byte[] to String corruption and TimeOnly to Time/Time64 binding (#483) by @polyglotAI-bot in #484
- chore(deps): bump github/codeql-action from 4 to 4.37.4 by @dependabot[bot] in #507
- Fix {name:Type} hint scanner to follow the server lexer (#508) by @polyglotAI-bot in #509
- fix(types): render valid Enum type declarations by @fallintoplace in #493
- Fix {name:Type} hints being dropped when an earlier brace is not a type hint by @polyglotAI-bot in #511
- Optimises blittable types for multi-dim arrays by @DanielBunting in #390
- Fix parameters: rewrite @name placeholders only in code positions, start a heredoc only at a token boundary, and treat $ as part of a placeholder name by @polyglotAI-bot in #513
- Fix JSON string values base64-corrupted under ReadStringsAsByteArrays by @alex-clickhouse in #485
- Fix flaky JsonMode None tests: assert the query_log row exists before judging the setting by @polyglotAI-bot in #519
- Fix reading JSON typed paths whose name requires backtick quoting by @polyglotAI-bot in #503
- Fix named Tuple/Nested columns whose element name requires backtick quoting by @polyglotAI-bot in #504
- feat(compression): decode transport-compressed responses in the driver, and compress by default by @polyglotAI-bot in #490
- chore: replace changelog merge=union with changelog.d fragments by @alex-clickhouse in #501
- fix(insert): buffer uncompressed binary inserts before the request stream by @polyglotAI-bot in #525
- Fix JSON reads dropping a typed path whose value is NULL by @polyglotAI-bot in #529
- Fix JSON overlapping-typed-path test failing on ClickHouse 25.8 by @polyglotAI-bot in #531
- feat(compression): vendor ZstdSharp and add a built-in ZstdCompressor (no new dependency) by @polyglotAI-bot in #523
- feat(compression)!: decode zstd responses and make zstd the default both ways by @polyglotAI-bot in #526
- perf(types): build Map read dictionary via a cached compiled factory by @polyglotAI-bot in #535
- chore(deps): bump github/codeql-action from 4.37.4 to 4.37.6 by @dependabot[bot] in #536
- update agents instructions for docs by @alex-clickhouse in #541
- fix(insert): stop flushing the write stack per value copied from a stream by @polyglotAI-bot in #540
- Add MapReadMode: read Map columns without losing duplicate keys by @polyglotAI-bot in #538
- Stop collecting unused coverage in the Windows CI job by @alex-clickhouse in #547
- Fix POCO inserts writing a JSON column against another table's typed-path hints by @polyglotAI-bot in #544
- Box-free POCO read fast path by @alex-clickhouse in #449
- Fix PingAsync ignoring the configured Path setting by @polyglotAI-bot in #555
- Fix CommandBehavior.SchemaOnly/SingleRow row limiting with a trailing comment or semicolon by @polyglotAI-bot in #473
- Fix reading Enum8/Enum16 columns as integers via DbDataReader by @polyglotAI-bot in #445
- chore(deps): bump github/codeql-action from 4.37.6 to 4.37.7 by @dependabot[bot] in #565
- Box-free ADO read path: typed column slots (stacked on #449) by @alex-clickhouse in #499
- Fix the broken main build: read TryGetEnumOrdinal out of the typed column slot by @alex-clickhouse in #566
- Fix type parser building a self-referential node for Tuple() by @polyglotAI-bot in #569
- perf(types): per-value allocations on UUID, Array and Decimal (reland #550) by @polyglotAI-bot in #571
- perf(types): two per-value allocations on the write path (reland #556) by @polyglotAI-bot in #572
- changelog for v1.4.0 release by @alex-clickhouse in #573
- Generate RELEASENOTES.md from the newest release section only by @polyglotAI-bot in #574
- ci: scan workflows with zizmor by @polyglotAI-bot in #575
- ci: clear the zizmor high-severity baseline by @polyglotAI-bot in #576
- Throw instead of dropping data for overlapping JSON paths by @polyglotAI-bot in #581
- feat(insert): option to send the INSERT statement in the query URL parameter by @polyglotAI-bot in #580
- Fix JSON overlapping paths: give way in the parent walk when the deeper path holds nothing by @polyglotAI-bot in #584
- ci: publish to NuGet.org with trusted publishing by @alex-clickhouse in #585
- chore(deps): bump github/codeql-action from 4.37.7 to 4.37.8 by @dependabot[bot] in #587
- Make the CapturingLogger test helper thread-safe by @polyglotAI-bot in #598
- ci: test matrix +26.8, -26.5, -25.8 by @polyglotAI-bot in #601
- chore(deps): bump github/codeql-action from 4.37.8 to 4.37.9 by @dependabot[bot] in #604
- docs: add a performance tuning section and updates for 1.4.0 (#491) by @alex-clickhouse in #558
New Contributors
- @Skyuzii made their first contribution in #392
- @laeg made their first contribution in #425
- @Blargian made their first contribution in #454
- @fallintoplace made their first contribution in #498
Full Changelog: 1.3.0...1.4.0