You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by ue...@apache.org on 2017/06/01 07:15:33 UTC

spark git commit: [SPARK-20910][SQL] Add build-in SQL function - UUID

Repository: spark
Updated Branches:
  refs/heads/master c8045f8b4 -> 6d05c1c1d


[SPARK-20910][SQL] Add build-in SQL function - UUID

## What changes were proposed in this pull request?

Add build-int SQL function - UUID.

## How was this patch tested?

unit tests

Author: Yuming Wang <wg...@gmail.com>

Closes #18136 from wangyum/SPARK-20910.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/6d05c1c1
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/6d05c1c1
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/6d05c1c1

Branch: refs/heads/master
Commit: 6d05c1c1da9104c903099a6790b39427c867ed2b
Parents: c8045f8
Author: Yuming Wang <wg...@gmail.com>
Authored: Thu Jun 1 16:15:24 2017 +0900
Committer: Takuya UESHIN <ue...@databricks.com>
Committed: Thu Jun 1 16:15:24 2017 +0900

----------------------------------------------------------------------
 .../catalyst/analysis/FunctionRegistry.scala    |  1 +
 .../spark/sql/catalyst/expressions/misc.scala   | 28 ++++++++++++++++++++
 .../expressions/MiscExpressionsSuite.scala      |  5 ++++
 .../sql-tests/inputs/string-functions.sql       |  3 +++
 .../sql-tests/results/string-functions.sql.out  | 10 ++++++-
 5 files changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/6d05c1c1/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala
----------------------------------------------------------------------
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 8081036..116b26f 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
@@ -380,6 +380,7 @@ object FunctionRegistry {
     expression[AssertTrue]("assert_true"),
     expression[Crc32]("crc32"),
     expression[Md5]("md5"),
+    expression[Uuid]("uuid"),
     expression[Murmur3Hash]("hash"),
     expression[Sha1]("sha"),
     expression[Sha1]("sha1"),

http://git-wip-us.apache.org/repos/asf/spark/blob/6d05c1c1/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/misc.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/misc.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/misc.scala
index bb9368c..3fc4bb7 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/misc.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/misc.scala
@@ -17,9 +17,12 @@
 
 package org.apache.spark.sql.catalyst.expressions
 
+import java.util.UUID
+
 import org.apache.spark.sql.catalyst.InternalRow
 import org.apache.spark.sql.catalyst.expressions.codegen._
 import org.apache.spark.sql.types._
+import org.apache.spark.unsafe.types.UTF8String
 
 /**
  * Print the result of an expression to stderr (used for debugging codegen).
@@ -104,3 +107,28 @@ case class CurrentDatabase() extends LeafExpression with Unevaluable {
   override def nullable: Boolean = false
   override def prettyName: String = "current_database"
 }
+
+// scalastyle:off line.size.limit
+@ExpressionDescription(
+  usage = "_FUNC_() - Returns an universally unique identifier (UUID) string. The value is returned as a canonical UUID 36-character string.",
+  extended = """
+    Examples:
+      > SELECT _FUNC_();
+       46707d92-02f4-4817-8116-a4c3b23e6266
+  """)
+// scalastyle:on line.size.limit
+case class Uuid() extends LeafExpression {
+
+  override def deterministic: Boolean = false
+
+  override def nullable: Boolean = false
+
+  override def dataType: DataType = StringType
+
+  override def eval(input: InternalRow): Any = UTF8String.fromString(UUID.randomUUID().toString)
+
+  override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = {
+    ev.copy(code = s"final UTF8String ${ev.value} = " +
+      s"UTF8String.fromString(java.util.UUID.randomUUID().toString());", isNull = "false")
+  }
+}

http://git-wip-us.apache.org/repos/asf/spark/blob/6d05c1c1/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MiscExpressionsSuite.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MiscExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MiscExpressionsSuite.scala
index a26d070..4fe7b43 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MiscExpressionsSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MiscExpressionsSuite.scala
@@ -39,4 +39,9 @@ class MiscExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper {
     checkEvaluation(AssertTrue(Cast(Literal(1), BooleanType)), null)
   }
 
+  test("uuid") {
+    checkEvaluation(Length(Uuid()), 36)
+    assert(evaluate(Uuid()) !== evaluate(Uuid()))
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/spark/blob/6d05c1c1/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql b/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
index e6dcea4..d82df11 100644
--- a/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
+++ b/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
@@ -12,3 +12,6 @@ FROM (SELECT id col1, id col2, id col3, id col4 FROM range(10)) t;
 -- replace function
 select replace('abc', 'b', '123');
 select replace('abc', 'b');
+
+-- uuid
+select length(uuid()), (uuid() <> uuid());

http://git-wip-us.apache.org/repos/asf/spark/blob/6d05c1c1/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
----------------------------------------------------------------------
diff --git a/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
index abf0cc4..4093a7b 100644
--- a/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
@@ -1,5 +1,5 @@
 -- Automatically generated by SQLQueryTestSuite
--- Number of queries: 6
+-- Number of queries: 7
 
 
 -- !query 0
@@ -70,3 +70,11 @@ select replace('abc', 'b')
 struct<replace(abc, b, ):string>
 -- !query 5 output
 ac
+
+
+-- !query 6
+select length(uuid()), (uuid() <> uuid())
+-- !query 6 schema
+struct<length(uuid()):int,(NOT (uuid() = uuid())):boolean>
+-- !query 6 output
+36	true


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org