Skip to content

Latest commit

 

History

History
76 lines (60 loc) · 6.56 KB

File metadata and controls

76 lines (60 loc) · 6.56 KB

Release Notes

0.31.0 (2026-08-16)

⚠ BREAKING CHANGES

  • emitted extension anchors are numbered per plan, so plans compared byte-for-byte against output from an earlier release will differ. Anchors are plan-local by spec, so plan semantics are unaffected. ExtensionRegistry.lookup_urn and FunctionEntry.anchor are removed; use has_urn() / urns() for URN membership, and (entry.urn, str(entry)) as a function's durable identity. ExtensionCollector.adopt raises on an input declaring two different functions at one anchor, and aggregate raises on a measure that is not an aggregate function; both previously produced a plan with an ambiguous or dangling function reference.

Features

  • assign extension anchors per plan, not per registry (#245) (4834cae)

0.30.0 (2026-07-29)

⚠ BREAKING CHANGES

  • DataFrame-produced plans now encode correlated references as rel_reference rather than steps_out (except a reducing join's condition scope, which cannot be expressed id-based and stays steps_out). The builders and inference are backward-compatible (both forms are read; builders still emit steps_out).
  • make OuterReference.steps_out 1-based per the Substrait spec (#233)
  • deps: Requires substrait 0.98.0, whose protobuf definitions drop several long-deprecated fields. Plans or code that read the removed fields will break:
  • FetchRel.offset / FetchRel.count → offset_expr / count_expr
  • ReadRel.VirtualTable.values → expressions
  • HashJoinRel/MergeJoinRel.left_keys/right_keys → keys
  • IntervalDayToSecond.microseconds → subseconds (+ precision)

substrait-python's builders already emit the replacement fields, so no builder/consumer API change is required. The only user-visible change is the plan printer's virtual-table output, which now renders literal: <value> via the shared expression renderer instead of the removed field-typed struct renderer.

  • deps: An unset IntervalDay.precision no longer defaults to microseconds (6). Producers must set precision explicitly and consumers should reject an unset precision; picosecond precision (12) is now allowed. The interval_day() builder already requires an explicit precision, so no API change is needed.

Features

  • add LateralJoinRel support (inference + builders) (#228) (68df5fb)
  • add Plan.ExecutionBehavior support (#224) (4d183f5)
  • builders: add ConsistentPartitionWindowRel builder (#158) (23d4274)
  • bump substrait packages to 0.86.0 and support additional extension metadata (#168) (1e34f42)
  • ergonomic native DataFrame/Expr API (substrait.api) (#204) (702e045)
  • expose residual_expression and post_join_filter on join builders (#225) (5814bab)
  • id-based outer-reference resolution (Substrait v0.89.0) (#239) (9a0fa08)
  • shared subplans (ReferenceRel) / DataFrame.cache() (CTEs) (#235) (4436530)

Bug Fixes

  • add missing interval_day derivation expression (#175) (077859b), closes #174
  • combine set-operation nullability across all inputs (#221) (be531c4), closes #206 #220
  • extensions: expose top-level metadata in YAML extension files (#170) (6e6b956), closes #149
  • make OuterReference.steps_out 1-based per the Substrait spec (#233) (6632b69)
  • raise clear parse error for invalid derivation expressions (#222) (8a0beae)
  • read SetRel.common in set-relation schema inference (#218) (0edecbb)

Miscellaneous Chores

  • deps: bump substrait packages to 0.97.0 (#230) (1310537)
  • deps: bump substrait packages to 0.98.0 (#232) (6df75cd)