aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rosen <joshrosen@databricks.com>2015-07-24 11:34:23 -0700
committerJosh Rosen <joshrosen@databricks.com>2015-07-24 11:34:23 -0700
commit6aceaf3d62ee335570ddc07ccaf07e8c3776f517 (patch)
tree779473d87ff39b57a3d902aa519342acce8aaa73
parente25312451322969ad716dddf8248b8c17f68323b (diff)
downloadspark-6aceaf3d62ee335570ddc07ccaf07e8c3776f517.tar.gz
spark-6aceaf3d62ee335570ddc07ccaf07e8c3776f517.tar.bz2
spark-6aceaf3d62ee335570ddc07ccaf07e8c3776f517.zip
[SPARK-9295] Analysis should detect sorting on unsupported column types
This patch extends CheckAnalysis to throw errors for queries that try to sort on unsupported column types, such as ArrayType. Author: Josh Rosen <joshrosen@databricks.com> Closes #7633 from JoshRosen/SPARK-9295 and squashes the following commits: 23b2fbf [Josh Rosen] Embed function in foreach bfe1451 [Josh Rosen] Update to allow sorting by null literals 2f1b802 [Josh Rosen] Add analysis rule to detect sorting on unsupported column types (SPARK-9295)
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala10
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala5
2 files changed, 15 insertions, 0 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala
index c23ab3c743..81d473c113 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala
@@ -103,6 +103,16 @@ trait CheckAnalysis {
aggregateExprs.foreach(checkValidAggregateExpression)
+ case Sort(orders, _, _) =>
+ orders.foreach { order =>
+ order.dataType match {
+ case t: AtomicType => // OK
+ case NullType => // OK
+ case t =>
+ failAnalysis(s"Sorting is not supported for columns of type ${t.simpleString}")
+ }
+ }
+
case _ => // Fallbacks to the following checks
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala
index 7bf678ebf7..2588df9824 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala
@@ -114,6 +114,11 @@ class AnalysisErrorSuite extends SparkFunSuite with BeforeAndAfter {
"cannot cast" :: Literal(1).dataType.simpleString :: BinaryType.simpleString :: Nil)
errorTest(
+ "sorting by unsupported column types",
+ listRelation.orderBy('list.asc),
+ "sorting" :: "type" :: "array<int>" :: Nil)
+
+ errorTest(
"non-boolean filters",
testRelation.where(Literal(1)),
"filter" :: "'1'" :: "not a boolean" :: Literal(1).dataType.simpleString :: Nil)