[
https://issues.apache.org/jira/browse/FLINK-10958?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16695633#comment-16695633
]
ASF GitHub Bot commented on FLINK-10958:
----------------------------------------
sunjincheng121 commented on a change in pull request #7152: [FLINK-10958]
[table] Add overload support for user defined function
URL: https://github.com/apache/flink/pull/7152#discussion_r235627061
##########
File path:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/utils/UserDefinedFunctionUtils.scala
##########
@@ -719,19 +750,28 @@ object UserDefinedFunctionUtils {
* Compares parameter candidate classes with expected classes. If true, the
parameters match.
* Candidate can be null (acts as a wildcard).
*/
+ private def parameterTypeApplicable(candidate: Class[_], expected:
Class[_]): Boolean =
+ parameterTypeEquals(candidate, expected) ||
parameterTypeSubClassOf(candidate, expected)
+
Review comment:
I suggest remove `parameterTypeSubClassOf` and impl the
`parameterTypeApplicable` as follows:
```
parameterTypeEquals(candidate, expected) ||
((expected != null && expected.isAssignableFrom(candidate)) ||
expected.isPrimitive &&
Primitives.wrap(expected).isAssignableFrom(candidate) ||
// arrays
(candidate.isArray && expected.isArray &&
expected.getComponentType.isAssignableFrom(candidate.getComponentType)))
```
What do you think?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Add overload support for user defined function
> -----------------------------------------------
>
> Key: FLINK-10958
> URL: https://issues.apache.org/jira/browse/FLINK-10958
> Project: Flink
> Issue Type: Task
> Components: Table API & SQL
> Reporter: Dian Fu
> Assignee: Dian Fu
> Priority: Major
> Labels: pull-request-available
>
> Currently overload is not supported in user defined function and given the
> following UDF
> {code:java}
> class Func21 extends ScalarFunction {
> def eval(p: People): String = {
> p.name
> }
> def eval(p: Student): String = {
> "student#" + p.name
> }
> }
> class People(val name: String)
> class Student(name: String) extends People(name)
> class GraduatedStudent(name: String) extends Student(name)
> {code}
> Queries such as the following will compile failed with error msg "Found
> multiple 'eval' methods which match the signature."
>
> {code:java}
> val udf = new Func21
> val table = ...
> table.select(udf(new GraduatedStudent("test"))) {code}
> That's because overload is not supported in user defined function currently.
> I think it will make sense to support overload following the java language
> specification in section
> [15.2|https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12].
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)