mirror of
https://github.com/lancedb/lancedb.git
synced 2026-09-07 13:59:08 +00:00
A table whose Function output type contains a list cannot be appended
to. That is every embedding column.
`add()` re-validates the table's own schema against its bindings before
it looks at the incoming data, so the failure does not depend on what
you are writing:
```
ValueError: Invalid input, Function output 'udf_text_embedding_384'
type no longer matches binding 'fb_...'
```
The check required a list child to be identical to the declaration.
Lance rewrites a list item's name and nullability when it writes, so a
declared `fixed_size_list<item: float not null>` is stored as
`fixed_size_list<item: float>` and never matches again.
The server already draws this distinction —
`job_executor::function_arrow_type::equivalent` compares list children
by type and struct children by identity — which is why declaring the
column succeeded in the first place. This brings the client's copy of
the check into line so the two agree on what a valid Function column
looks like.
Struct children still compare by name and nullability, and the list
length is still part of the declaration.