Skip to content

feat(types): derive generic collection element types - #397

Merged
zzylol merged 1 commit into
mainfrom
feat/typed-element-access
Sep 11, 2026
Merged

zzylol merged 1 commit into
mainfrom
feat/typed-element-access

Conversation

@zzylol

@zzylol zzylol commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Array-backed expressions need the declared element type before they can participate in typed DAG composition. Reusing the Map-only access name for arrays would blur two different lookup contracts.

This adds canonical asap_element_access(input, index) typing through the existing QueryExpr scalar resolver. Map inputs delegate to the established Map signature; List inputs preserve element type and nullability, including nested Struct metadata. Integer indices support one-based positive and negative indexing; nullable indices make results nullable. Literal zero is conservatively rejected because native behavior depends on array constantness.

Before, a generic collection lookup had no authoritative signature. After, nested element/field expressions derive their types from existing List/Struct definitions. Legacy asap_map_access remains compatible. No frontend emission or new wire DTO is introduced; backend support and its Planner pin must land together before new queries use the generic name.

Verification: all 196 shared type tests pass, including List(Struct)→field composition, negative/dynamic nullable indices, invalid-index rejection, Map compatibility and serde roundtrip. Runtime/performance evidence is not applicable to this typing contract. Nullable containers, collection construction, lambda scope and native output formatting remain separate work.

@zzylol
zzylol marked this pull request as ready for review September 11, 2026 15:12
@zzylol
zzylol merged commit 4d0ac2f into main Sep 11, 2026
6 checks passed
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