You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by tw...@apache.org on 2016/09/15 10:05:56 UTC
flink git commit: [FLINK-3497] [table] Add SQRT function
Repository: flink
Updated Branches:
refs/heads/master 9420a775f -> 5fdc72069
[FLINK-3497] [table] Add SQRT function
Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/5fdc7206
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/5fdc7206
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/5fdc7206
Branch: refs/heads/master
Commit: 5fdc7206936248dca3310b78206246c9f9c5b9a8
Parents: 9420a77
Author: twalthr <tw...@apache.org>
Authored: Thu Sep 15 12:01:34 2016 +0200
Committer: twalthr <tw...@apache.org>
Committed: Thu Sep 15 12:01:34 2016 +0200
----------------------------------------------------------------------
docs/dev/table_api.md | 22 ++++++++++++++++++++
.../flink/api/scala/table/expressionDsl.scala | 5 +++++
.../table/codegen/calls/BuiltInMethods.scala | 2 ++
.../table/codegen/calls/ScalarFunctions.scala | 6 ++++++
.../api/table/expressions/mathExpressions.scala | 13 ++++++++++++
.../api/table/validate/FunctionCatalog.scala | 1 +
.../table/expressions/ScalarFunctionsTest.scala | 15 +++++++++++++
7 files changed, 64 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/docs/dev/table_api.md
----------------------------------------------------------------------
diff --git a/docs/dev/table_api.md b/docs/dev/table_api.md
index b419bfb..fe3ddc3 100644
--- a/docs/dev/table_api.md
+++ b/docs/dev/table_api.md
@@ -1323,6 +1323,17 @@ NUMERIC.power(NUMERIC)
<tr>
<td>
{% highlight java %}
+NUMERIC.sqrt()
+{% endhighlight %}
+ </td>
+ <td>
+ <p>Calculates the square root of a given value.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ {% highlight java %}
NUMERIC.abs()
{% endhighlight %}
</td>
@@ -1720,6 +1731,17 @@ NUMERIC.power(NUMERIC)
<tr>
<td>
{% highlight scala %}
+NUMERIC.sqrt()
+{% endhighlight %}
+ </td>
+ <td>
+ <p>Calculates the square root of a given value.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ {% highlight scala %}
NUMERIC.abs()
{% endhighlight %}
</td>
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/scala/table/expressionDsl.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/scala/table/expressionDsl.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/scala/table/expressionDsl.scala
index 61c6a65..003b8b2 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/scala/table/expressionDsl.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/scala/table/expressionDsl.scala
@@ -133,6 +133,11 @@ trait ImplicitExpressionOperations {
def power(other: Expression) = Power(expr, other)
/**
+ * Calculates the square root of a given value.
+ */
+ def sqrt() = Sqrt(expr)
+
+ /**
* Calculates the absolute value of given value.
*/
def abs() = Abs(expr)
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/BuiltInMethods.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/BuiltInMethods.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/BuiltInMethods.scala
index c3fbed3..a2715f0 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/BuiltInMethods.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/BuiltInMethods.scala
@@ -26,6 +26,8 @@ object BuiltInMethods {
val LOG10 = Types.lookupMethod(classOf[Math], "log10", classOf[Double])
val EXP = Types.lookupMethod(classOf[Math], "exp", classOf[Double])
val POWER = Types.lookupMethod(classOf[Math], "pow", classOf[Double], classOf[Double])
+ val POWER_DEC = Types.lookupMethod(
+ classOf[SqlFunctions], "power", classOf[Long], classOf[JBigDecimal])
val LN = Types.lookupMethod(classOf[Math], "log", classOf[Double])
val ABS = Types.lookupMethod(classOf[SqlFunctions], "abs", classOf[Double])
val ABS_DEC = Types.lookupMethod(classOf[SqlFunctions], "abs", classOf[JBigDecimal])
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/ScalarFunctions.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/ScalarFunctions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/ScalarFunctions.scala
index 90a6bd5..a39829c 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/ScalarFunctions.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/codegen/calls/ScalarFunctions.scala
@@ -159,6 +159,12 @@ object ScalarFunctions {
DOUBLE_TYPE_INFO,
BuiltInMethods.POWER)
+ addSqlFunctionMethod(
+ POWER,
+ Seq(DOUBLE_TYPE_INFO, BIG_DEC_TYPE_INFO),
+ DOUBLE_TYPE_INFO,
+ BuiltInMethods.POWER_DEC)
+
addSqlFunction(
ABS,
Seq(DOUBLE_TYPE_INFO),
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala
index 5f0acdf..80adf5f 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala
@@ -114,3 +114,16 @@ case class Power(left: Expression, right: Expression) extends BinaryExpression w
relBuilder.call(SqlStdOperatorTable.POWER, left.toRexNode, right.toRexNode)
}
}
+
+case class Sqrt(child: Expression) extends UnaryExpression with InputTypeSpec {
+ override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO
+
+ override private[flink] def expectedTypes: Seq[TypeInformation[_]] =
+ Seq(DOUBLE_TYPE_INFO)
+
+ override def toString: String = s"sqrt($child)"
+
+ override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = {
+ relBuilder.call(SqlStdOperatorTable.POWER, child.toRexNode, Literal(0.5).toRexNode)
+ }
+}
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/validate/FunctionCatalog.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/validate/FunctionCatalog.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/validate/FunctionCatalog.scala
index f818e14..e8a2971 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/validate/FunctionCatalog.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/validate/FunctionCatalog.scala
@@ -151,6 +151,7 @@ object FunctionCatalog {
"ln" -> classOf[Ln],
"power" -> classOf[Power],
"mod" -> classOf[Mod],
+ "sqrt" -> classOf[Sqrt],
// temporal functions
"extract" -> classOf[Extract],
http://git-wip-us.apache.org/repos/asf/flink/blob/5fdc7206/flink-libraries/flink-table/src/test/scala/org/apache/flink/api/table/expressions/ScalarFunctionsTest.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/api/table/expressions/ScalarFunctionsTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/api/table/expressions/ScalarFunctionsTest.scala
index c9485fe..672b876 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/api/table/expressions/ScalarFunctionsTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/api/table/expressions/ScalarFunctionsTest.scala
@@ -358,6 +358,21 @@ class ScalarFunctionsTest extends ExpressionTestBase {
}
@Test
+ def testSqrt(): Unit = {
+ testAllApis(
+ 25.sqrt(),
+ "25.sqrt()",
+ "SQRT(25)",
+ "5.0")
+
+ testAllApis(
+ 2.2.sqrt(),
+ "2.2.sqrt()",
+ "POWER(CAST(2.2 AS DOUBLE), CAST(0.5 AS DOUBLE))", // TODO fix FLINK-4621
+ math.sqrt(2.2).toString)
+ }
+
+ @Test
def testLn(): Unit = {
testAllApis(
'f2.ln(),