Repository: spark
Updated Branches:
  refs/heads/master ba1737c21 -> 45d40d9f6


[SPARK-17150][SQL] Support SQL generation for inline tables

## What changes were proposed in this pull request?
This patch adds support for SQL generation for inline tables. With this, it 
would be possible to create a view that depends on inline tables.

## How was this patch tested?
Added a test case in LogicalPlanToSQLSuite.

Author: petermaxlee <petermax...@gmail.com>

Closes #14709 from petermaxlee/SPARK-17150.


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

Branch: refs/heads/master
Commit: 45d40d9f66c666eec6df926db23937589d67225d
Parents: ba1737c
Author: petermaxlee <petermax...@gmail.com>
Authored: Sat Aug 20 13:19:38 2016 +0800
Committer: Wenchen Fan <wenc...@databricks.com>
Committed: Sat Aug 20 13:19:38 2016 +0800

----------------------------------------------------------------------
 .../sql/catalyst/plans/logical/LocalRelation.scala | 17 +++++++++++++++--
 .../org/apache/spark/sql/catalyst/SQLBuilder.scala |  3 +++
 .../src/test/resources/sqlgen/inline_tables.sql    |  4 ++++
 .../spark/sql/catalyst/LogicalPlanToSQLSuite.scala |  8 ++++++++
 4 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/45d40d9f/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LocalRelation.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LocalRelation.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LocalRelation.scala
index 9d64f35..890865d 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LocalRelation.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LocalRelation.scala
@@ -18,8 +18,9 @@
 package org.apache.spark.sql.catalyst.plans.logical
 
 import org.apache.spark.sql.Row
-import org.apache.spark.sql.catalyst.{analysis, CatalystTypeConverters, 
InternalRow}
-import org.apache.spark.sql.catalyst.expressions.Attribute
+import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow}
+import org.apache.spark.sql.catalyst.analysis
+import org.apache.spark.sql.catalyst.expressions.{Attribute, Literal}
 import org.apache.spark.sql.types.{StructField, StructType}
 
 object LocalRelation {
@@ -75,4 +76,16 @@ case class LocalRelation(output: Seq[Attribute], data: 
Seq[InternalRow] = Nil)
 
   override lazy val statistics =
     Statistics(sizeInBytes = output.map(_.dataType.defaultSize).sum * 
data.length)
+
+  def toSQL(inlineTableName: String): String = {
+    require(data.nonEmpty)
+    val types = output.map(_.dataType)
+    val rows = data.map { row =>
+      val cells = row.toSeq(types).zip(types).map { case (v, tpe) => 
Literal(v, tpe).sql }
+      cells.mkString("(", ", ", ")")
+    }
+    "VALUES " + rows.mkString(", ") +
+      " AS " + inlineTableName +
+      output.map(_.name).mkString("(", ", ", ")")
+  }
 }

http://git-wip-us.apache.org/repos/asf/spark/blob/45d40d9f/sql/core/src/main/scala/org/apache/spark/sql/catalyst/SQLBuilder.scala
----------------------------------------------------------------------
diff --git 
a/sql/core/src/main/scala/org/apache/spark/sql/catalyst/SQLBuilder.scala 
b/sql/core/src/main/scala/org/apache/spark/sql/catalyst/SQLBuilder.scala
index 0f51aa5..af1de51 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/catalyst/SQLBuilder.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/catalyst/SQLBuilder.scala
@@ -205,6 +205,9 @@ class SQLBuilder private (
     case p: ScriptTransformation =>
       scriptTransformationToSQL(p)
 
+    case p: LocalRelation =>
+      p.toSQL(newSubqueryName())
+
     case OneRowRelation =>
       ""
 

http://git-wip-us.apache.org/repos/asf/spark/blob/45d40d9f/sql/hive/src/test/resources/sqlgen/inline_tables.sql
----------------------------------------------------------------------
diff --git a/sql/hive/src/test/resources/sqlgen/inline_tables.sql 
b/sql/hive/src/test/resources/sqlgen/inline_tables.sql
new file mode 100644
index 0000000..602551e
--- /dev/null
+++ b/sql/hive/src/test/resources/sqlgen/inline_tables.sql
@@ -0,0 +1,4 @@
+-- This file is automatically generated by LogicalPlanToSQLSuite.
+select * from values ("one", 1), ("two", 2), ("three", null) as data(a, b) 
where b > 1
+--------------------------------------------------------------------------------
+SELECT `gen_attr_0` AS `a`, `gen_attr_1` AS `b` FROM (SELECT `gen_attr_0`, 
`gen_attr_1` FROM (VALUES ("one", 1), ("two", 2), ("three", CAST(NULL AS INT)) 
AS gen_subquery_0(gen_attr_0, gen_attr_1)) AS data WHERE (`gen_attr_1` > 1)) AS 
data

http://git-wip-us.apache.org/repos/asf/spark/blob/45d40d9f/sql/hive/src/test/scala/org/apache/spark/sql/catalyst/LogicalPlanToSQLSuite.scala
----------------------------------------------------------------------
diff --git 
a/sql/hive/src/test/scala/org/apache/spark/sql/catalyst/LogicalPlanToSQLSuite.scala
 
b/sql/hive/src/test/scala/org/apache/spark/sql/catalyst/LogicalPlanToSQLSuite.scala
index 4e5a511..742b065 100644
--- 
a/sql/hive/src/test/scala/org/apache/spark/sql/catalyst/LogicalPlanToSQLSuite.scala
+++ 
b/sql/hive/src/test/scala/org/apache/spark/sql/catalyst/LogicalPlanToSQLSuite.scala
@@ -1102,4 +1102,12 @@ class LogicalPlanToSQLSuite extends SQLBuilderTest with 
SQLTestUtils {
       checkSQL("select * from orc_t", "select_orc_table")
     }
   }
+
+  test("inline tables") {
+    checkSQL(
+      """
+        |select * from values ("one", 1), ("two", 2), ("three", null) as 
data(a, b) where b > 1
+      """.stripMargin,
+      "inline_tables")
+  }
 }


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

Reply via email to