You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by GitBox <gi...@apache.org> on 2018/09/14 10:30:33 UTC

[GitHub] sergeyT2 closed pull request #6695: cosh udf

sergeyT2 closed pull request #6695: cosh udf
URL: https://github.com/apache/flink/pull/6695
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala
index cf8cd91bb2f..f9f36b13192 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala
@@ -366,6 +366,11 @@ trait ImplicitExpressionOperations {
     */
   def cos() = Cos(expr)
 
+  /**
+    * Calculates the hyperbolic cosine of a given number.
+    */
+  def cosh() = Cosh(expr)
+
   /**
     * Calculates the tangent of a given number.
     */
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala
index 899cb0ff35a..bef9cb94084 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala
@@ -69,6 +69,9 @@ object BuiltInMethods {
   val COS = Types.lookupMethod(classOf[Math], "cos", classOf[Double])
   val COS_DEC = Types.lookupMethod(classOf[SqlFunctions], "cos", classOf[JBigDecimal])
 
+  val COSH = Types.lookupMethod(classOf[Math], "cosh", classOf[Double])
+  val COSH_DEC = Types.lookupMethod(classOf[ScalarFunctions], "cosh", classOf[JBigDecimal])
+
   val TAN = Types.lookupMethod(classOf[Math], "tan", classOf[Double])
   val TAN_DEC = Types.lookupMethod(classOf[SqlFunctions], "tan", classOf[JBigDecimal])
 
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/FunctionGenerator.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/FunctionGenerator.scala
index c7eb869a5b5..96bca4bd9ca 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/FunctionGenerator.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/FunctionGenerator.scala
@@ -282,6 +282,18 @@ object FunctionGenerator {
     DOUBLE_TYPE_INFO,
     BuiltInMethods.COS_DEC)
 
+  addSqlFunctionMethod(
+    COSH,
+    Seq(DOUBLE_TYPE_INFO),
+    DOUBLE_TYPE_INFO,
+    BuiltInMethods.COSH)
+
+  addSqlFunctionMethod(
+    COSH,
+    Seq(BIG_DEC_TYPE_INFO),
+    DOUBLE_TYPE_INFO,
+    BuiltInMethods.COSH_DEC)
+
   addSqlFunctionMethod(
     TAN,
     Seq(DOUBLE_TYPE_INFO),
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/expressions/mathExpressions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/expressions/mathExpressions.scala
index 2f54ec2055b..2c961ffa8dd 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/expressions/mathExpressions.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/expressions/mathExpressions.scala
@@ -451,3 +451,16 @@ case class UUID() extends LeafExpression {
     relBuilder.call(ScalarSqlFunctions.UUID)
   }
 }
+
+case class Cosh(child: Expression) extends UnaryExpression {
+  override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO
+
+  override private[flink] def validateInput(): ValidationResult =
+    TypeCheckUtils.assertNumericExpr(child.resultType, "Cosh")
+
+  override def toString: String = s"cosh($child)"
+
+  override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = {
+    relBuilder.call(ScalarSqlFunctions.COSH, child.toRexNode)
+  }
+}
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/sql/ScalarSqlFunctions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/sql/ScalarSqlFunctions.scala
index db67e3985db..2bd0e4378e0 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/sql/ScalarSqlFunctions.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/sql/ScalarSqlFunctions.scala
@@ -230,4 +230,11 @@ object ScalarSqlFunctions {
     OperandTypes.family(SqlTypeFamily.STRING, SqlTypeFamily.INTEGER),
     SqlFunctionCategory.STRING)
 
+  val COSH = new SqlFunction(
+    "COSH",
+    SqlKind.OTHER_FUNCTION,
+    ReturnTypes.DOUBLE_NULLABLE,
+    null,
+    OperandTypes.NUMERIC,
+    SqlFunctionCategory.NUMERIC)
 }
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala
index fa6f020ea6d..2193aff4e8d 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala
@@ -238,4 +238,10 @@ object ScalarFunctions {
     */
   def repeat(base: String, n: Int): String = StringUtils.repeat(base, n)
 
+  /**
+    * Returns the hyperbolic cosine "x".
+    */
+  def cosh(x: JBigDecimal): Double = {
+    Math.cosh(x.doubleValue())
+  }
 }
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala
index fe508aa1f4a..3476142058f 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala
@@ -228,6 +228,7 @@ object FunctionCatalog {
     "minusPrefix" -> classOf[UnaryMinus],
     "sin" -> classOf[Sin],
     "cos" -> classOf[Cos],
+    "cosh" -> classOf[Cosh],
     "tan" -> classOf[Tan],
     "cot" -> classOf[Cot],
     "asin" -> classOf[Asin],
@@ -426,6 +427,7 @@ class BasicOperatorTable extends ReflectiveSqlOperatorTable {
     SqlStdOperatorTable.EXISTS,
     SqlStdOperatorTable.SIN,
     SqlStdOperatorTable.COS,
+    ScalarSqlFunctions.COSH,
     SqlStdOperatorTable.TAN,
     SqlStdOperatorTable.COT,
     SqlStdOperatorTable.ASIN,
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
index fbd9b028547..f2009caa1ae 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
@@ -2519,4 +2519,42 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
       "f21 IS NOT FALSE",
       "true")
   }
+  @Test
+  def testCosh(): Unit = {
+    testAllApis(
+      'f2.cosh(),
+      "f2.cosh()",
+      "COSH(f2)",
+      math.cosh(42.toByte).toString)
+
+    testAllApis(
+      'f3.cosh(),
+      "f3.cosh()",
+      "COSH(f3)",
+      math.cosh(43.toShort).toString)
+
+    testAllApis(
+      'f4.cosh(),
+      "f4.cosh()",
+      "COSH(f4)",
+      math.cosh(44.toLong).toString)
+
+    testAllApis(
+      'f5.cosh(),
+      "f5.cosh()",
+      "COSH(f5)",
+      math.cosh(4.5.toFloat).toString)
+
+    testAllApis(
+      'f6.cosh(),
+      "f6.cosh()",
+      "COSH(f6)",
+      math.cosh(4.6).toString)
+
+    testAllApis(
+      'f15.cosh(),
+      "cosh(f15)",
+      "COSH(f15)",
+      math.cosh(-1231.1231231321321321111).toString)
+  }
 }


 

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services