aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorgatorsmile <gatorsmile@gmail.com>2015-11-17 11:23:54 -0800
committerMichael Armbrust <michael@databricks.com>2015-11-17 11:23:54 -0800
commit0158ff7737d10e68be2e289533241da96b496e89 (patch)
treee774350402b69a741d2ebcbbedfb57ef772a54cd /sql/catalyst
parent7b1407c7b95c43299a30e891748824c4bc47e43b (diff)
downloadspark-0158ff7737d10e68be2e289533241da96b496e89.tar.gz
spark-0158ff7737d10e68be2e289533241da96b496e89.tar.bz2
spark-0158ff7737d10e68be2e289533241da96b496e89.zip
[SPARK-8658][SQL][FOLLOW-UP] AttributeReference's equals method compares all the members
Based on the comment of cloud-fan in https://github.com/apache/spark/pull/9216, update the AttributeReference's hashCode function by including the hashCode of the other attributes including name, nullable and qualifiers. Here, I am not 100% sure if we should include name in the hashCode calculation, since the original hashCode calculation does not include it. marmbrus cloud-fan Please review if the changes are good. Author: gatorsmile <gatorsmile@gmail.com> Closes #9761 from gatorsmile/hashCodeNamedExpression.
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/namedExpressions.scala5
-rw-r--r--sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/SubexpressionEliminationSuite.scala6
2 files changed, 9 insertions, 2 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/namedExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/namedExpressions.scala
index e3daddace2..00b7970bd1 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/namedExpressions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/namedExpressions.scala
@@ -212,9 +212,12 @@ case class AttributeReference(
override def hashCode: Int = {
// See http://stackoverflow.com/questions/113511/hash-code-implementation
var h = 17
- h = h * 37 + exprId.hashCode()
+ h = h * 37 + name.hashCode()
h = h * 37 + dataType.hashCode()
+ h = h * 37 + nullable.hashCode()
h = h * 37 + metadata.hashCode()
+ h = h * 37 + exprId.hashCode()
+ h = h * 37 + qualifiers.hashCode()
h
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/SubexpressionEliminationSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/SubexpressionEliminationSuite.scala
index 9de066e99d..a61297b2c0 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/SubexpressionEliminationSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/SubexpressionEliminationSuite.scala
@@ -25,14 +25,18 @@ class SubexpressionEliminationSuite extends SparkFunSuite {
val a: AttributeReference = AttributeReference("name", IntegerType)()
val b1 = a.withName("name2").withExprId(id)
val b2 = a.withExprId(id)
+ val b3 = a.withQualifiers("qualifierName" :: Nil)
assert(b1 != b2)
assert(a != b1)
assert(b1.semanticEquals(b2))
assert(!b1.semanticEquals(a))
assert(a.hashCode != b1.hashCode)
- assert(b1.hashCode == b2.hashCode)
+ assert(b1.hashCode != b2.hashCode)
assert(b1.semanticHash() == b2.semanticHash())
+ assert(a != b3)
+ assert(a.hashCode != b3.hashCode)
+ assert(a.semanticEquals(b3))
}
test("Expression Equivalence - basic") {