[
https://issues.apache.org/jira/browse/FLINK-40079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated FLINK-40079:
-----------------------------------
Labels: pull-request-available (was: )
> Enforce disableSystemArguments consistently for all PTF translation paths
> -------------------------------------------------------------------------
>
> Key: FLINK-40079
> URL: https://issues.apache.org/jira/browse/FLINK-40079
> Project: Flink
> Issue Type: Sub-task
> Components: Table SQL / Planner
> Reporter: Fabian Hueske
> Assignee: Fabian Hueske
> Priority: Major
> Labels: pull-request-available
>
> {{BuiltInFunctionDefinition.Builder.disableSystemArguments(true)}} on a PTF
> definition is intended to mean "forbid the implicit system arguments
> (on_time/uid)" for this function.
> That semantics is not really implemented anywhere, and behavior differs by
> translation path:
> * {{FlinkCalciteSqlValidator}} recognizes on_time/uid for every PTF and
> ignores the flag, so validation always accepts them.
> * The only place the flag is consulted is
> {{{}StreamPhysicalProcessTableFunction.validateAllowSystemArgs{}}}, which
> throws unconditionally when the flag is set — rejecting the entire call,
> regardless of whether a system argument was supplied.
> Resulting inconsistency:
> * Generic PTF physical rule (regular path): the whole call is hard-rejected,
> even with no system argument (e.g. {{{}SELECT * FROM SNAPSHOT(input => TABLE
> t){}}}), with a misleading "not supported for user-defined PTF" message.
> * Dedicated optimizer rule (bypasses that physical rule): the flag is never
> checked, so on_time/uid are silently accepted and ignored. Known cases:
> SNAPSHOT in a LATERAL context
> ({{{}LogicalCorrelateToJoinFromLateralSnapshotRule{}}}), likely ML_PREDICT
> ({{{}StreamPhysicalMLPredictTableFunctionRule{}}}).
> Proposed fix: implement the intended semantics at SQL validation so it holds
> for every path .When a PTF sets {{{}disableSystemArguments(true){}}}, reject
> any supplied on_time/uid with a clear ValidationException, independent of
> later translation.
> Open decision for the generic (regular) path, given its runtime currently
> assumes system args exist:
> * (a) keep rejecting flag-set PTFs there, but with a precise message
> explaining the function's required usage; or
> * (b) allow them (call permitted, system args rejected) if the runtime can
> support it.
>
> Acceptance:
> * Supplying on_time/uid to a disableSystemArguments(true) PTF fails
> validation with a clear message in every context (standalone/generic,
> LATERAL, dedicated-rule).
> * Generic-path behavior for a flag-set PTF is made consistent per the
> decision above (no misleading message; no silent accept).
> * Confirm and cover the ML_PREDICT case.
> * Add tests ensuring correct rejection of queries using system-args on a
> function that forbids them (like SNAPSHOT)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)