aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src/main
diff options
context:
space:
mode:
authorYin Huai <yhuai@databricks.com>2016-06-29 14:42:58 -0700
committerDavies Liu <davies.liu@gmail.com>2016-06-29 14:42:58 -0700
commit8b5a8b25b9d29b7d0949d5663c7394b26154a836 (patch)
tree30fce9ed88b91f8067e2efc6fa08aada70eccc72 /sql/catalyst/src/main
parentd8a87a3ed211dd08f06eeb9560661b8f11ce82fa (diff)
downloadspark-8b5a8b25b9d29b7d0949d5663c7394b26154a836.tar.gz
spark-8b5a8b25b9d29b7d0949d5663c7394b26154a836.tar.bz2
spark-8b5a8b25b9d29b7d0949d5663c7394b26154a836.zip
[SPARK-16301] [SQL] The analyzer rule for resolving using joins should respect the case sensitivity setting.
## What changes were proposed in this pull request? The analyzer rule for resolving using joins should respect the case sensitivity setting. ## How was this patch tested? New tests in ResolveNaturalJoinSuite Author: Yin Huai <yhuai@databricks.com> Closes #13977 from yhuai/SPARK-16301.
Diffstat (limited to 'sql/catalyst/src/main')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala26
1 files changed, 19 insertions, 7 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
index 96f2e38946..d1d2c59cae 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
@@ -1836,13 +1836,25 @@ class Analyzer(
}
private def commonNaturalJoinProcessing(
- left: LogicalPlan,
- right: LogicalPlan,
- joinType: JoinType,
- joinNames: Seq[String],
- condition: Option[Expression]) = {
- val leftKeys = joinNames.map(keyName => left.output.find(_.name == keyName).get)
- val rightKeys = joinNames.map(keyName => right.output.find(_.name == keyName).get)
+ left: LogicalPlan,
+ right: LogicalPlan,
+ joinType: JoinType,
+ joinNames: Seq[String],
+ condition: Option[Expression]) = {
+ val leftKeys = joinNames.map { keyName =>
+ val joinColumn = left.output.find(attr => resolver(attr.name, keyName))
+ assert(
+ joinColumn.isDefined,
+ s"$keyName should exist in ${left.output.map(_.name).mkString(",")}")
+ joinColumn.get
+ }
+ val rightKeys = joinNames.map { keyName =>
+ val joinColumn = right.output.find(attr => resolver(attr.name, keyName))
+ assert(
+ joinColumn.isDefined,
+ s"$keyName should exist in ${right.output.map(_.name).mkString(",")}")
+ joinColumn.get
+ }
val joinPairs = leftKeys.zip(rightKeys)
val newCondition = (condition ++ joinPairs.map(EqualTo.tupled)).reduceOption(And)