Skip to content

Migrate DISJOIN to a registered expander and solve the star-REPLACE portability limitation #143

Description

@conradbzura

Description

Implement the DISJOIN expander, which produces the WITH-CTE structure as standard AST, with the full-row passthrough and the output de-canonicalization of disjoin_start and disjoin_end expressed as AST, dissolving the emit-time string special-case left by epic #114. Make the canonicalization output capability-driven: an explicit portable projection for targets without supports_star_replace such as DataFusion, and SELECT * REPLACE for targets that support it such as DuckDB. Flip GIQL_EXPAND on GIQLDisjoin and delete giqldisjoin_sql.

Motivation

DISJOIN is the largest operator and the one that closes the star-REPLACE portability gap for non-canonical encodings documented in #122, making non-canonical data work on engines that lack REPLACE.

Expected Outcome

DISJOIN transpiles through the registry; non-canonical encodings produce portable SQL on DataFusion and REPLACE SQL on DuckDB, both with identical results under the coordinate-space and usage-pattern result oracles run on both engines; giqldisjoin_sql is removed.

Metadata

Metadata

Assignees

Labels

refactorCode restructuring without behavior change

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions