Skip to content

spec (v2): a\b reads as two bytes; drop the column_defaults value-encoding hedge - #668

Merged
EricAndrechek merged 1 commit into
v2from
v2-spec-prose-663
Oct 21, 2026
Merged

EricAndrechek merged 1 commit into
v2from
v2-spec-prose-663

Conversation

@EricAndrechek

Copy link
Copy Markdown
Member

Summary

Two prose corrections in the ABI v2 description, regenerated into the header comment and docs/reference/abi-v2.md.

  • chs_filter_create (v2 spec: chs_filter_create's text says a\b reads as three bytes; it reads as two (a, 0x08) #663): the query parameter a\b now reads as two bytes, a and 0x08, instead of a, 0x08 and b. ClickHouse's escaped-text reader consumes the b as the escape's letter. The library already matches the server; only the text was wrong.
  • column_defaults: the sentence saying a value is read in the body format's own field encoding loses its "(the implementing build confirms)" hedge. Build 20261021.025722 was measured by a downstream user doing exactly that: CSV quoting, TSV escapes, and a JSON string or number for a number type. A value that doesn't read is refused before any body byte. The worked examples are in docs/guides/batches.md. The paragraph's other two hedges (a Nullable null, an EPHEMERAL column) weren't covered by that measurement, so they stay.

Prose only.

  • The ABI v2 fingerprint is sha256:d53239933966e15a3c363e631a94fbba1231d84c4300337115d3ae5377bb41c2 both before and after (gen.py --major 2 --fingerprint).
  • The include/v2/chtypes.h diff is comment lines only.
  • Nothing else in the tree quotes the old three-byte reading.

Fixes #663.

Test plan

  • gen.py --major 2 --write then --check (0), and the fingerprint before and after (equal).
  • check-no-hand-decls.py --scope all, lint-cited-paths.sh, lint-spelling.sh, markdownlint-cli2@0.18.1 and dprint@0.57.4 check on the changed .md, and lint-public.sh.
  • CI.

🤖 Generated with Claude Code

chs_filter_create's description said the query parameter `a\b` reads as
`a`, the byte 0x08 and `b`. ClickHouse's escaped-text reader consumes
the `b` as the escape's letter, so it reads as two bytes, `a` and 0x08;
the library already matches the server (#663).

The column_defaults rule's "value is read in the body format's own field
encoding" no longer carries "(the implementing build confirms)": build
20261021.025722 was measured downstream reading CSV quoting, TSV escapes
and a JSON string or number for a number type, with a value that doesn't
read refused before any body byte (worked examples in
docs/guides/batches.md).

Prose only: regenerated with gen.py --major 2 --write; the header diff is
comment lines only; the ABI v2 fingerprint is unchanged,
sha256:d53239933966...41c2, measured before and after.

Fixes #663

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@EricAndrechek
EricAndrechek merged commit 9dbc836 into v2 Oct 21, 2026
54 checks passed
@EricAndrechek
EricAndrechek deleted the v2-spec-prose-663 branch October 21, 2026 07:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant