Skip to content

Native STRING functions: support PARSE_URL #214

Description

@liuyongvs

Rechecked on 2026-09-20 against canonical main 89da01cdad7342c4d825e36eaf4e8dc73bc7af9f, released Apache Flink 2.2.1, JDK 17, default compatibility settings. Each expression was run against independent stock-Flink and StreamFusion-enabled streaming environments with bounded runtime DataStream input (parallelism 1), so source values cannot be folded away. Results and resolved result types agree through Flink fallback; this is a native support gap, not a demonstrated wrong-result bug.

PARSE_URL is unsupported by native Calc. Adapted StringFunctionsITCase SQL contains 64 successful PARSE_URL cases that fall back; two independent minimal probes confirm the gap.

Runtime u STRING='https://example.org:8080/p?q=42#frag':

SELECT PARSE_URL(u, 'HOST') FROM src;       -- 'example.org'
SELECT PARSE_URL(u, 'QUERY', 'q') FROM src; -- '42'

Both resolve to STRING and return correct results through Calc: unsupported function/operator: PARSE_URL, with zero native substitutions.

Implement the released Flink contract for accepted URL parts and the optional query key. Verify NULL/invalid URLs, missing components/keys, percent escapes, repeated query keys, ports, fragments and column-dependent arguments. Avoid substituting a different URL parser's normalization rules without parity evidence.

Suggested priority: P2, after the core arithmetic/comparison/filtering gaps.

Acceptance: add runtime-source SQL parity tests that assert native Calc execution as well as values and resolved types; include NULLs and boundary/error cases; retain safe fallback for unverified forms and update docs/operators/calc-filter.md with the admitted scope.

Latest-main validation: rebuilt the debug native library from this commit and ran 562 targeted runtime SQL cases covering these support gaps and adjacent controls. This issue group contains 66 successful comparisons that still record explicit fallback. Host-rejected/both-error cases are excluded from that count. This validates released Flink 2.2.1; it does not claim execution of the Flink 1.18 profile. No implementation is included.

Related: PR #44 documented narrower admitted overloads and the remaining fallback; this ticket tracks the unimplemented forms.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions