davidradl commented on code in PR #27328:
URL: https://github.com/apache/flink/pull/27328#discussion_r2598139776


##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/utils/FlinkRelUtil.java:
##########
@@ -122,6 +135,43 @@ public static boolean isMergeable(Calc topCalc, Calc 
bottomCalc) {
         return mergeable(topInputRefCounter, topInputRefs, bottomProjects);
     }
 
+    private static boolean functionResultShouldBeReused(
+            List<? extends RexNode> topProjectList, List<? extends RexNode> 
bottomProjectList) {
+        Set<Integer> indexSet = new HashSet<>();
+        for (int i = 0; i < bottomProjectList.size(); i++) {
+            RexNode project = bottomProjectList.get(i);
+            if (project instanceof RexCall
+                    && SqlKind.FUNCTION.contains(((RexCall) 
project).op.getKind())
+                    && ((RexCall) project).op.isDeterministic()) {

Review Comment:
   I do not know this area very well, just to check my understanding
   - why are we calling the rexNodes projects?
   -  I assume that `isDeterministic` implies that for a given input you get 
the same output. If there are non deterministic function in the list of 
projects, this could imply we cannot use the out for it. Is it safe to reuse 
the results if there are non deteministic projects? What would it mean to 
re-use the results when there are any deterministic projects?   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to