aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src/test
diff options
context:
space:
mode:
authorNattavut Sutyanyong <nsy.can@gmail.com>2016-08-08 12:14:11 +0200
committerHerman van Hovell <hvanhovell@databricks.com>2016-08-08 12:14:11 +0200
commit06f5dc841517e7156f5f445655d97ba541ebbd7e (patch)
tree2cafb3241c4845131956ed0880cd29cd0dc95d56 /sql/catalyst/src/test
parente10ca8de49206087b336c6db0c40868fa271b989 (diff)
downloadspark-06f5dc841517e7156f5f445655d97ba541ebbd7e.tar.gz
spark-06f5dc841517e7156f5f445655d97ba541ebbd7e.tar.bz2
spark-06f5dc841517e7156f5f445655d97ba541ebbd7e.zip
[SPARK-16804][SQL] Correlated subqueries containing non-deterministic operations return incorrect results
## What changes were proposed in this pull request? This patch fixes the incorrect results in the rule ResolveSubquery in Catalyst's Analysis phase by returning an error message when the LIMIT is found in the path from the parent table to the correlated predicate in the subquery. ## How was this patch tested? ./dev/run-tests a new unit test on the problematic pattern. Author: Nattavut Sutyanyong <nsy.can@gmail.com> Closes #14411 from nsyca/master.
Diffstat (limited to 'sql/catalyst/src/test')
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala17
1 files changed, 17 insertions, 0 deletions
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 8363a1b1cd..13bf034f83 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
@@ -548,5 +548,22 @@ class AnalysisErrorSuite extends AnalysisTest {
Exists(Union(LocalRelation(b), Filter(EqualTo(OuterReference(a), c), LocalRelation(c)))),
LocalRelation(a))
assertAnalysisError(plan3, "Accessing outer query column is not allowed in" :: Nil)
+
+ val plan4 = Filter(
+ Exists(
+ Limit(1,
+ Filter(EqualTo(OuterReference(a), b), LocalRelation(b)))
+ ),
+ LocalRelation(a))
+ assertAnalysisError(plan4, "Accessing outer query column is not allowed in a LIMIT" :: Nil)
+
+ val plan5 = Filter(
+ Exists(
+ Sample(0.0, 0.5, false, 1L,
+ Filter(EqualTo(OuterReference(a), b), LocalRelation(b)))().select('b)
+ ),
+ LocalRelation(a))
+ assertAnalysisError(plan5,
+ "Accessing outer query column is not allowed in a TABLESAMPLE" :: Nil)
}
}