Fabian Hueske created FLINK-40079:
-------------------------------------

             Summary: 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


{{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