[
https://issues.apache.org/jira/browse/FLINK-7194?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16096299#comment-16096299
]
ASF GitHub Bot commented on FLINK-7194:
---------------------------------------
Github user sunjincheng121 commented on a diff in the pull request:
https://github.com/apache/flink/pull/4379#discussion_r128773463
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/utils/UserDefinedFunctionUtils.scala
---
@@ -314,7 +314,28 @@ object UserDefinedFunctionUtils {
aggregateFunction: AggregateFunction[_, _],
extractedType: TypeInformation[_] = null)
: TypeInformation[_] = {
- getParameterTypeOfAggregateFunction(aggregateFunction,
"getResultType", 0, extractedType)
+
+ val resultType = aggregateFunction.getResultType
+ if (resultType != null) {
+ resultType
+ } else if (extractedType != null) {
+ extractedType
+ } else {
+ try {
+ TypeExtractor
+ .createTypeInfo(aggregateFunction,
+ classOf[AggregateFunction[_, _]],
+ aggregateFunction.getClass,
+ 0)
+ .asInstanceOf[TypeInformation[_]]
+ } catch {
+ case ite: InvalidTypesException =>
+ throw new TableException(
+ s"Cannot infer generic type of ${aggregateFunction.getClass}.
" +
+ s"You can override AggregateFunction.getResultType() to
specify the type.",
+ ite)
+ }
+ }
--- End diff --
Sounds good.
> Add getResultType and getAccumulatorType to AggregateFunction
> -------------------------------------------------------------
>
> Key: FLINK-7194
> URL: https://issues.apache.org/jira/browse/FLINK-7194
> Project: Flink
> Issue Type: Improvement
> Components: Table API & SQL
> Affects Versions: 1.4.0
> Reporter: Fabian Hueske
> Assignee: Fabian Hueske
>
> FLINK-6725 and FLINK-6457 proposed to remove methods with default
> implementations such as {{getResultType()}}, {{toString()}}, or
> {{requiresOver()}} from the base classes of user-defined methods (UDF, UDTF,
> UDAGG) and instead offer them as contract methods which are dynamically
> In PR [#3993|https://github.com/apache/flink/pull/3993] I argued that these
> methods have a fixed signature (in contrast to the {{eval()}},
> {{accumulate()}} and {{retract()}} methods) and should be kept in the
> classes. For users that don't need these methods, this doesn't make a
> difference because the methods are not abstract and have a default
> implementation. For users that need to override the methods it makes a
> difference, because they get IDE and compiler support when overriding them
> and the cannot get the signature wrong.
> Consequently, I propose to add {{getResultType()}} and
> {{getAccumulatorType()}} as methods with default implementation to
> {{AggregateFunction}}. This will make the interface of {{AggregateFunction}}
> more consistent with {{ScalarFunction}} and {{TableFunction}}.
> What do you think [~shaoxuan], [~RuidongLi] and [~jark]?
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)