feat!: accept only $ as the identifier delimiter

The delimiter setting comes from the Lance REST catalog standard, which
carries it so other catalogs can adopt the identifier grammar. LanceDB
services split on `$` and nothing else, so a configuration naming another
value produced identifiers no service would take apart the way the caller
meant.

`ClientConfig::id_delimiter` stays, and is now refused unless it is `$`,
reported where the configuration was written. Fixing the delimiter removes
what the alternative needed: the `?delimiter=` query parameter, the
per-client delimiter field, and the refusal of a component containing the
delimiter -- `$` is outside the character set every object name admits, so
no validated component can hold one.

BREAKING CHANGE: a client configured with an `id_delimiter` other than `$`
is now refused at construction.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UfmeJ533rQDnPBkMtjerV6
This commit is contained in:
Jonathan M Hsieh
2026-09-16 00:23:08 +00:00
co-authored by Claude Opus 5
parent fa24bf322c
commit 5ba2acf730
4 changed files with 96 additions and 234 deletions
+4 -1
View File
@@ -166,7 +166,10 @@ class ClientConfig:
extra_headers: Optional[dict]
Additional headers to include in requests.
id_delimiter: Optional[str]
The delimiter to use when constructing object identifiers.
The delimiter joining a namespace path and a name into one object
identifier. ``"$"`` is the only supported value, and leaving this
unset is how to get it; anything else is rejected when the connection
is created.
tls_config: Optional[TlsConfig]
TLS/mTLS configuration for secure connections.
header_provider: Optional[HeaderProvider]