From bff021dfaf4b5c9ab84c71dad2a37f60907e32d6 Mon Sep 17 00:00:00 2001 From: Yuming Wang <wgyumg@gmail.com> Date: Fri, 19 May 2017 09:40:22 -0700 Subject: [PATCH] [SPARK-20751][SQL] Add built-in SQL Function - COT ## What changes were proposed in this pull request? Add built-in SQL Function - COT. ## How was this patch tested? unit tests Author: Yuming Wang <wgyumg@gmail.com> Closes #17999 from wangyum/SPARK-20751. --- .../catalyst/analysis/FunctionRegistry.scala | 1 + .../expressions/mathExpressions.scala | 14 ++++++++ .../resources/sql-tests/inputs/operators.sql | 6 ++++ .../sql-tests/results/operators.sql.out | 34 ++++++++++++++++++- 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala index 6fc154f8de..d2042ad00a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala @@ -234,6 +234,7 @@ object FunctionRegistry { expression[StringToMap]("str_to_map"), expression[Sqrt]("sqrt"), expression[Tan]("tan"), + expression[Cot]("cot"), expression[Tanh]("tanh"), expression[Add]("+"), diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala index de1a46dc47..a7bf81e98b 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala @@ -543,6 +543,20 @@ case class Sqrt(child: Expression) extends UnaryMathExpression(math.sqrt, "SQRT" """) case class Tan(child: Expression) extends UnaryMathExpression(math.tan, "TAN") +@ExpressionDescription( + usage = "_FUNC_(expr) - Returns the cotangent of `expr`.", + extended = """ + Examples: + > SELECT _FUNC_(1); + 0.6420926159343306 + """) +case class Cot(child: Expression) + extends UnaryMathExpression((x: Double) => 1 / math.tan(x), "COT") { + override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { + defineCodeGen(ctx, ev, c => s"${ev.value} = 1 / java.lang.Math.tan($c);") + } +} + @ExpressionDescription( usage = "_FUNC_(expr) - Returns the hyperbolic tangent of `expr`.", extended = """ diff --git a/sql/core/src/test/resources/sql-tests/inputs/operators.sql b/sql/core/src/test/resources/sql-tests/inputs/operators.sql index 6339d69ca6..1920a108c6 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/operators.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/operators.sql @@ -53,3 +53,9 @@ explain select 2 * 4 + 3 || 'b'; explain select 3 + 1 || 'a' || 4 / 2; explain select 1 == 1 OR 'a' || 'b' == 'ab'; explain select 'a' || 'c' == 'ac' AND 2 == 3; + +-- math functions +select cot(1); +select cot(null); +select cot(0); +select cot(-1); diff --git a/sql/core/src/test/resources/sql-tests/results/operators.sql.out b/sql/core/src/test/resources/sql-tests/results/operators.sql.out index e0236f4118..abd18211c7 100644 --- a/sql/core/src/test/resources/sql-tests/results/operators.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/operators.sql.out @@ -1,5 +1,5 @@ -- Automatically generated by SQLQueryTestSuite --- Number of queries: 34 +-- Number of queries: 38 -- !query 0 @@ -284,3 +284,35 @@ struct<plan:string> == Physical Plan == *Project [false AS ((concat(a, c) = ac) AND (2 = 3))#x] +- Scan OneRowRelation[] + + +-- !query 34 +select cot(1) +-- !query 34 schema +struct<COT(CAST(1 AS DOUBLE)):double> +-- !query 34 output +0.6420926159343306 + + +-- !query 35 +select cot(null) +-- !query 35 schema +struct<COT(CAST(NULL AS DOUBLE)):double> +-- !query 35 output +NULL + + +-- !query 36 +select cot(0) +-- !query 36 schema +struct<COT(CAST(0 AS DOUBLE)):double> +-- !query 36 output +Infinity + + +-- !query 37 +select cot(-1) +-- !query 37 schema +struct<COT(CAST(-1 AS DOUBLE)):double> +-- !query 37 output +-0.6420926159343306 -- GitLab