aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src
diff options
context:
space:
mode:
authorEric Liang <ekl@databricks.com>2016-08-22 15:48:35 -0700
committerReynold Xin <rxin@databricks.com>2016-08-22 15:48:35 -0700
commit84770b59f773f132073cd2af4204957fc2d7bf35 (patch)
treef1f4c739df710ebcc7bfe7a459234102c1cb698b /sql/catalyst/src
parent929cb8beed9b7014231580cc002853236a5337d6 (diff)
downloadspark-84770b59f773f132073cd2af4204957fc2d7bf35.tar.gz
spark-84770b59f773f132073cd2af4204957fc2d7bf35.tar.bz2
spark-84770b59f773f132073cd2af4204957fc2d7bf35.zip
[SPARK-17162] Range does not support SQL generation
## What changes were proposed in this pull request? The range operator previously didn't support SQL generation, which made it not possible to use in views. ## How was this patch tested? Unit tests. cc hvanhovell Author: Eric Liang <ekl@databricks.com> Closes #14724 from ericl/spark-17162.
Diffstat (limited to 'sql/catalyst/src')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveTableValuedFunctions.scala11
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala21
2 files changed, 18 insertions, 14 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveTableValuedFunctions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveTableValuedFunctions.scala
index 7fdf7fa0c0..6b3bb68538 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveTableValuedFunctions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/ResolveTableValuedFunctions.scala
@@ -28,9 +28,6 @@ import org.apache.spark.sql.types.{DataType, IntegerType, LongType}
* Rule that resolves table-valued function references.
*/
object ResolveTableValuedFunctions extends Rule[LogicalPlan] {
- private lazy val defaultParallelism =
- SparkContext.getOrCreate(new SparkConf(false)).defaultParallelism
-
/**
* List of argument names and their types, used to declare a function.
*/
@@ -84,25 +81,25 @@ object ResolveTableValuedFunctions extends Rule[LogicalPlan] {
"range" -> Map(
/* range(end) */
tvf("end" -> LongType) { case Seq(end: Long) =>
- Range(0, end, 1, defaultParallelism)
+ Range(0, end, 1, None)
},
/* range(start, end) */
tvf("start" -> LongType, "end" -> LongType) { case Seq(start: Long, end: Long) =>
- Range(start, end, 1, defaultParallelism)
+ Range(start, end, 1, None)
},
/* range(start, end, step) */
tvf("start" -> LongType, "end" -> LongType, "step" -> LongType) {
case Seq(start: Long, end: Long, step: Long) =>
- Range(start, end, step, defaultParallelism)
+ Range(start, end, step, None)
},
/* range(start, end, step, numPartitions) */
tvf("start" -> LongType, "end" -> LongType, "step" -> LongType,
"numPartitions" -> IntegerType) {
case Seq(start: Long, end: Long, step: Long, numPartitions: Int) =>
- Range(start, end, step, numPartitions)
+ Range(start, end, step, Some(numPartitions))
})
)
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala
index af1736e607..010aec7ba1 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala
@@ -422,17 +422,20 @@ case class Sort(
/** Factory for constructing new `Range` nodes. */
object Range {
- def apply(start: Long, end: Long, step: Long, numSlices: Int): Range = {
+ def apply(start: Long, end: Long, step: Long, numSlices: Option[Int]): Range = {
val output = StructType(StructField("id", LongType, nullable = false) :: Nil).toAttributes
new Range(start, end, step, numSlices, output)
}
+ def apply(start: Long, end: Long, step: Long, numSlices: Int): Range = {
+ Range(start, end, step, Some(numSlices))
+ }
}
case class Range(
start: Long,
end: Long,
step: Long,
- numSlices: Int,
+ numSlices: Option[Int],
output: Seq[Attribute])
extends LeafNode with MultiInstanceRelation {
@@ -449,6 +452,14 @@ case class Range(
}
}
+ def toSQL(): String = {
+ if (numSlices.isDefined) {
+ s"SELECT id AS `${output.head.name}` FROM range($start, $end, $step, ${numSlices.get})"
+ } else {
+ s"SELECT id AS `${output.head.name}` FROM range($start, $end, $step)"
+ }
+ }
+
override def newInstance(): Range = copy(output = output.map(_.newInstance()))
override lazy val statistics: Statistics = {
@@ -457,11 +468,7 @@ case class Range(
}
override def simpleString: String = {
- if (step == 1) {
- s"Range ($start, $end, splits=$numSlices)"
- } else {
- s"Range ($start, $end, step=$step, splits=$numSlices)"
- }
+ s"Range ($start, $end, step=$step, splits=$numSlices)"
}
}