[ 
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)

Reply via email to