[
https://issues.apache.org/jira/browse/FLINK-10340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16643114#comment-16643114
]
ASF GitHub Bot commented on FLINK-10340:
----------------------------------------
pnowojski closed pull request #6700: [FLINK-10340][table] Add Cosh math
function supported in Table API and SQL
URL: https://github.com/apache/flink/pull/6700
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/docs/dev/table/functions.md b/docs/dev/table/functions.md
index 99a21b1f5eb..f888d790deb 100644
--- a/docs/dev/table/functions.md
+++ b/docs/dev/table/functions.md
@@ -1274,6 +1274,18 @@ ATAN2(numeric1, numeric2)
</td>
</tr>
+ <tr>
+ <td>
+ {% highlight text %}
+COSH(numeric)
+{% endhighlight %}
+ </td>
+ <td>
+ <p>Returns the hyperbolic cosine of <i>NUMERIC</i>.</p>
+ <p>Return value type is <i>DOUBLE</i>.</p>
+ </td>
+ </tr>
+
<tr>
<td>
{% highlight text %}
@@ -1709,6 +1721,18 @@ atan2(NUMERIC1, NUMERIC2)
</td>
</tr>
+ <tr>
+ <td>
+ {% highlight java %}
+NUMERIC.cosh()
+{% endhighlight %}
+ </td>
+ <td>
+ <p>Returns the hyperbolic cosine of <i>NUMERIC</i>.</p>
+ <p>Return value type is <i>DOUBLE</i>.</p>
+ </td>
+ </tr>
+
<tr>
<td>
{% highlight java %}
@@ -2145,6 +2169,18 @@ atan2(NUMERIC1, NUMERIC2)
</td>
</tr>
+ <tr>
+ <td>
+ {% highlight scala %}
+NUMERIC.cosh()
+{% endhighlight %}
+ </td>
+ <td>
+ <p>Returns the hyperbolic cosine of <i>NUMERIC</i>.</p>
+ <p>Return value type is <i>DOUBLE</i>.</p>
+ </td>
+ </tr>
+
<tr>
<td>
{% highlight scala %}
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 9a39bf504c6..e638051a2bd 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
@@ -337,6 +337,11 @@ trait ImplicitExpressionOperations {
*/
def power(other: Expression) = Power(expr, other)
+ /**
+ * Calculates the hyperbolic cosine of a given value.
+ */
+ def cosh() = Cosh(expr)
+
/**
* Calculates the square root of a given value.
*/
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 f15da166725..34be86e0400 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
@@ -84,6 +84,9 @@ object BuiltInMethods {
val ATAN = Types.lookupMethod(classOf[Math], "atan", classOf[Double])
val ATAN_DEC = Types.lookupMethod(classOf[SqlFunctions], "atan",
classOf[JBigDecimal])
+ val COSH = Types.lookupMethod(classOf[Math], "cosh", classOf[Double])
+ val COSH_DEC = Types.lookupMethod(classOf[ScalarFunctions], "cosh",
classOf[JBigDecimal])
+
val ATAN2_DOUBLE_DOUBLE = Types.lookupMethod(
classOf[Math],
"atan2",
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 bd05f9bd71e..58c476a36e0 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
@@ -211,6 +211,18 @@ object FunctionGenerator {
DOUBLE_TYPE_INFO,
BuiltInMethods.LOG2)
+ 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(
LN,
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..6067130cd99 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
@@ -104,6 +104,20 @@ case class Log2(child: Expression) extends UnaryExpression
with InputTypeSpec {
override def toString: String = s"log2($child)"
}
+case class Cosh(child: Expression) extends UnaryExpression {
+
+ override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO
+
+ override private[flink] def toRexNode(implicit relBuilder: RelBuilder) = {
+ relBuilder.call(ScalarSqlFunctions.COSH, child.toRexNode)
+ }
+
+ override private[flink] def validateInput(): ValidationResult =
+ TypeCheckUtils.assertNumericExpr(child.resultType, "Cosh")
+
+ override def toString = s"cosh($child)"
+}
+
case class Log(base: Expression, antilogarithm: Expression) extends Expression
with InputTypeSpec {
def this(antilogarithm: Expression) = this(null, antilogarithm)
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 249eb8a8840..c7b68d046f5 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
@@ -85,6 +85,14 @@ object ScalarSqlFunctions {
SqlFunctionCategory.NUMERIC
)
+ val COSH = new SqlFunction(
+ "COSH",
+ SqlKind.OTHER_FUNCTION,
+ ReturnTypes.DOUBLE_NULLABLE,
+ null,
+ OperandTypes.NUMERIC,
+ SqlFunctionCategory.NUMERIC)
+
val LPAD = new SqlFunction(
"LPAD",
SqlKind.OTHER_FUNCTION,
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 001fb98538a..0c469926246 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
@@ -44,6 +44,13 @@ object ScalarFunctions {
Math.pow(a, b.doubleValue())
}
+ /**
+ * Returns the hyperbolic cosine of a big decimal value.
+ */
+ def cosh(x: JBigDecimal): Double = {
+ Math.cosh(x.doubleValue())
+ }
+
/**
* Returns the string that results from concatenating the arguments.
* Returns NULL if any argument is NULL.
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 cd804c55aea..218ffec0cda 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
@@ -236,6 +236,7 @@ object FunctionCatalog {
"acos" -> classOf[Acos],
"atan" -> classOf[Atan],
"atan2" -> classOf[Atan2],
+ "cosh" -> classOf[Cosh],
"degrees" -> classOf[Degrees],
"radians" -> classOf[Radians],
"sign" -> classOf[Sign],
@@ -435,6 +436,7 @@ class BasicOperatorTable extends ReflectiveSqlOperatorTable
{
SqlStdOperatorTable.ACOS,
SqlStdOperatorTable.ATAN,
SqlStdOperatorTable.ATAN2,
+ ScalarSqlFunctions.COSH,
SqlStdOperatorTable.DEGREES,
SqlStdOperatorTable.RADIANS,
SqlStdOperatorTable.SIGN,
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 1fa81b09f68..541ad62f94c 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
@@ -1093,6 +1093,47 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
math.sqrt(2.2).toString)
}
+ @Test
+ def testCosh(): Unit = {
+ testAllApis(
+ 0.cosh(),
+ "0.cosh()",
+ "COSH(0)",
+ math.cosh(0).toString
+ )
+
+ testAllApis(
+ -1.cosh(),
+ "-1.cosh()",
+ "COSH(-1)",
+ math.cosh(-1).toString
+ )
+
+ testAllApis(
+ 'f4.cosh(),
+ "f4.cosh",
+ "COSH(f4)",
+ math.cosh(44L).toString)
+
+ testAllApis(
+ 'f6.cosh(),
+ "f6.cosh",
+ "COSH(f6)",
+ math.cosh(4.6D).toString)
+
+ testAllApis(
+ 'f7.cosh(),
+ "f7.cosh",
+ "COSH(f7)",
+ math.cosh(3).toString)
+
+ testAllApis(
+ 'f22.cosh(),
+ "f22.cosh",
+ "COSH(f22)",
+ math.cosh(2.0).toString)
+ }
+
@Test
def testLn(): Unit = {
testAllApis(
diff --git
a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala
b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala
index ab6d7d13725..8949a2f1f74 100644
---
a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala
+++
b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala
@@ -116,6 +116,7 @@ class SqlExpressionTest extends ExpressionTestBase {
testSqlApi("ACOS(0.5)", "1.0471975511965979")
testSqlApi("ATAN(0.5)", "0.4636476090008061")
testSqlApi("ATAN2(0.5, 0.5)", "0.7853981633974483")
+ testSqlApi("COSH(2.5)", "6.132289479663686")
testSqlApi("DEGREES(0.5)", "28.64788975654116")
testSqlApi("RADIANS(0.5)", "0.008726646259971648")
testSqlApi("SIGN(-1.1)", "-1")
----------------------------------------------------------------
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:
us...@infra.apache.org
> Add Cosh math function supported in Table API and SQL
> -----------------------------------------------------
>
> Key: FLINK-10340
> URL: https://issues.apache.org/jira/browse/FLINK-10340
> Project: Flink
> Issue Type: Sub-task
> Components: Table API & SQL
> Affects Versions: 1.6.0
> Reporter: Sergey Tsvetkov
> Assignee: vinoyang
> Priority: Minor
> Labels: pull-request-available
>
> Implement udf of cosh, just like in oracle
> [https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions031.htm#SQLRF00623]
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)