jackylee-ch opened a new pull request, #794: URL: https://github.com/apache/paimon-rust/pull/794
Java registers `first_not_null_value` as an SPI alias of `first_non_null_value`: `FieldFirstNonNullValueAggLegacyFactory` sits next to the canonical factory in `META-INF/services/org.apache.paimon.factories.Factory` and builds the same aggregator. It is deliberate rather than residue — it survives the switch-case to SPI refactor in #4335 and `FirstValueAggregationITCase` still creates a table with it — but undocumented, so nothing advertises it. Rust rejected the name at all three sites that key off it, so a table written by Java or Flink planned fine and then failed once rows were pulled, with `ConfigInvalid: Unknown aggregate function 'first_not_null_value'`. CREATE and ALTER rejected it outright. The write path never checks the name, which is why this only surfaces where the merge function is built. Resolved through a single canonicalization point rather than one arm per site: the validator/constructor guard test iterates a hardcoded name list, so a one-sided edit would slip past it. Matching is exact, mirroring `FactoryUtil#discoverFactory`, which compares identifiers with `equals`. The alias stays out of the `supported: ...` hint — Java does not document it, so it is read but never suggested — and errors still echo whatever the user wrote. `FieldAggregator::name` is `&'static str`, so the aggregator reports the canonical name. That costs no parity: the only Java message repeating the configured identifier is the retract rejection, and retract is refused here before an aggregator exists. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
