Github user shaoxuan-wang commented on a diff in the pull request: https://github.com/apache/flink/pull/3809#discussion_r114571910 --- Diff: flink-libraries/flink-table/src/main/scala/org/apache/flink/table/plan/ProjectionTranslator.scala --- @@ -327,4 +332,56 @@ object ProjectionTranslator { } } + /** + * Find and replace UDAGG function Call to UDAGGFunctionCall + * + * @param field the expression to check + * @param tableEnv the TableEnvironment + * @return an expression with correct UDAGGFunctionCall type for UDAGG functions + */ + def replaceUDAGGFunctionCall(field: Expression, tableEnv: TableEnvironment): Expression = { --- End diff -- We will not have the chance to execute LogicalNode#resolveExpressions before get aggNames, projectFields, etc. I actually tried another alternative approach to conduct the replacement in extractAggregationsAndProperties and replaceAggregationsAndProperties (we have to check and handle the UDAGG call carefully in both functions), it works but I do not like that design. It makes the logic of these two methods not completely clean. Also, in over aggregate it will not call extractAggregationsAndProperties and replaceAggregationsAndProperties. So I decide to implement a separate function to handle the UDAGGFunctionCall replacement.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---