Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-6226

ScalarFunction and TableFunction do not support parameters of byte, short and float

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.3.4, 1.4.0
    • Table SQL / API
    • None

    Description

      It seems to be a problem that ScalarFunction and TableFunction do not support types of byte, short or float.

      It will throw some exceptions like following;

      org.apache.flink.table.api.ValidationException: Given parameters of function 'org$apache$flink$table$expressions$utils$Func18$$98a126fbdab73f43d640516da603291a' do not match any signature.
      Actual: (java.lang.String, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Long)
      Expected: (java.lang.String, byte, short, int, long)

      at org.apache.flink.table.functions.utils.ScalarSqlFunction$$anon$1.inferReturnType(ScalarSqlFunction.scala:82)
      at org.apache.calcite.sql.SqlOperator.inferReturnType(SqlOperator.java:469)
      at org.apache.calcite.rex.RexBuilder.deriveReturnType(RexBuilder.java:271)
      at org.apache.calcite.tools.RelBuilder.call(RelBuilder.java:518)
      at org.apache.flink.table.expressions.ScalarFunctionCall.toRexNode(call.scala:68)
      at org.apache.flink.table.expressions.Alias.toRexNode(fieldExpression.scala:76)
      at org.apache.flink.table.plan.logical.Project$$anonfun$construct$1.apply(operators.scala:95)
      at org.apache.flink.table.plan.logical.Project$$anonfun$construct$1.apply(operators.scala:95)
      at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
      at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
      at scala.collection.immutable.List.foreach(List.scala:318)
      at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
      at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45)
      at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
      at scala.collection.AbstractTraversable.map(Traversable.scala:105)
      at org.apache.flink.table.plan.logical.Project.construct(operators.scala:95)
      at org.apache.flink.table.plan.logical.LogicalNode.toRelNode(LogicalNode.scala:77)
      at org.apache.flink.table.api.Table.getRelNode(table.scala:72)
      at org.apache.flink.table.expressions.utils.ExpressionTestBase.addTableApiTestExpr(ExpressionTestBase.scala:215)
      at org.apache.flink.table.expressions.utils.ExpressionTestBase.testAllApis(ExpressionTestBase.scala:241)
      at org.apache.flink.table.expressions.UserDefinedScalarFunctionTest.testVariableArgs(UserDefinedScalarFunctionTest.scala:240)

      Testing code looks like following:

      object Func18 extends ScalarFunction {
      
        def eval(a: String, b: Byte, c: Short, d: Int, e: Long): String = {
          a + "," + b + "," + c + "," + d + "," + e
        }
      }
      
      class TableFunc4 extends  TableFunction[Row] {
      
        def eval(data: String, tinyInt: Byte, smallInt: Short, int: Int, long: Long): Unit = {
          val row = new Row(5)
          row.setField(0, data)
          row.setField(1, tinyInt)
          row.setField(2, smallInt)
          row.setField(3, int)
          row.setField(4, long)
          collect(row)
        }
      
        override def getResultType: TypeInformation[Row] = {
          new RowTypeInfo(
            BasicTypeInfo.STRING_TYPE_INFO,
            BasicTypeInfo.BYTE_TYPE_INFO,
            BasicTypeInfo.SHORT_TYPE_INFO,
            BasicTypeInfo.INT_TYPE_INFO,
            BasicTypeInfo.LONG_TYPE_INFO
          )
        }
      }
      

      Attachments

        Activity

          People

            fhueske Fabian Hueske
            clarkyzl Zhuoluo Yang
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: