Sure, I’ve opened FLINK-40141 for these functions: https://issues.apache.org/jira/browse/FLINK-40141
---------- Best regards, dylanhz > 2026年7月13日 22:33,Fabian Hueske <[email protected]> 写道: > > Hi everyone, > > Thanks for the feedback so far. > I'll start working on this and will open a PR soon. > > @dylanhz, thanks for checking the other functions! > Would you mind opening a ticket for these? > > Best, Fabian > > Am Sa., 11. Juli 2026 um 10:33 Uhr schrieb dylanhz <[email protected]>: > >> Hi Fabian, >> >> +1 to align with the SQL standard and other vendors. >> >> I also noticed that IS_DECIMAL, IS_DIGIT, and IS_ALPHA return FALSE for >> NULL input. They may be worth reviewing separately for consistency. >> >> >> ---------- >> Best regards, >> dylanhz >> >> >> >> >>> 2026年7月9日 21:24,Fabian Hueske <[email protected]> 写道: >>> >>> Hi folks, >>> >>> I'd like to discuss FLINK-39943 [1]. >>> Today, Flink's IS JSON / IS NOT JSON functions are hard-coded to never >>> return NULL. >>> The recent Calcite 1.38.0 upgrade (FLINK-36602) changed Calcite's own >>> default to the standard-compliant behavior instead: IS JSON is a >> predicate >>> subject to three-valued logic and should evaluate to UNKNOWN (NULL) when >>> the input is NULL, not FALSE. >>> Flink currently suppresses this new Calcite default to preserve the old, >>> standards-incompatible semantics [2]. >>> I've checked a few other engines and all agree with the standard here. >>> Oracle, PostgreSQL (16+), SQL Server (ISJSON), MySQL (JSON_VALID), and >>> Snowflake (IS_OBJECT/IS_ARRAY/CHECK_JSON) all return NULL/UNKNOWN for a >>> NULL input. >>> >>> Originally, Flink implemented the correct nullable behavior when the >>> functions were added in Flink 1.11. For Flink 1.15, this was hotfixed [3] >>> to comply with Calcite's non-null semantics. >>> Since Calcite fixed its definition with the 1.38 release, I'm proposing >>> that we revert the Flink 1.15 hotfix, even though it's a breaking change. >>> >>> * PRO: standards compliance, consistency with every other engine and with >>> Calcite's own default (less surprise porting SQL from other systems), >>> consistency with Flink's other JSON functions which already propagate >> NULL, >>> and removing custom codegen that fights Calcite on every future upgrade. >>> * CON: it's a breaking change, most notably flipping NULL IS NOT JSON >> from >>> TRUE to NULL, which can affect existing filters, views, or NOT NULL-typed >>> computed columns/sinks built on this predicate, and there's no >>> compatibility flag today to ease the transition. >>> >>> This is one of several breaking side-effects of the Calcite 1.38.0 >>> upgrade. Hence, I'd propose treating it as a deliberate, documented break >>> targeted at the next minor version (2.4) rather than adding a dedicated >>> config flag. >>> >>> Curious to hear if others agree, or see a strong case for keeping the >>> current NOT NULL semantics. >>> >>> Best, >>> Fabian >>> >>> [1] https://issues.apache.org/jira/browse/FLINK-39943 >>> [2] >>> >> https://github.com/apache/flink/commit/8de3293e2d#diff-53c19443d4ddaabe90d0041379f3656f3d52983ae7a0226a9b23bc87675471a8R93 >>> [3] >>> >> https://github.com/apache/flink/commit/74146c626edd7603f00a6f0c90c7fccaf2066912 >> >>
