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
+3
View File
@@ -93,6 +93,9 @@ pub struct ClientConfig {
pub retry_config: Option<RetryConfig>,
pub timeout_config: Option<TimeoutConfig>,
pub extra_headers: Option<HashMap<String, String>>,
/// 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.
pub id_delimiter: Option<String>,
pub tls_config: Option<TlsConfig>,
/// User identifier for tracking purposes.