Repository: spark
Updated Branches:
  refs/heads/master 026eb9064 -> e05a2feeb


[SPARK-15825] [SQL] Fix SMJ invalid results

## What changes were proposed in this pull request?
Code generated `SortMergeJoin` failed with wrong results when using structs as 
keys. This could (eventually) be traced back to the use of a wrong row 
reference when comparing structs.

## How was this patch tested?
TBD

Author: Herman van Hovell <hvanhov...@databricks.com>

Closes #13589 from hvanhovell/SPARK-15822.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/e05a2fee
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/e05a2fee
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/e05a2fee

Branch: refs/heads/master
Commit: e05a2feebe928df691d5a8f42f22e088c6263dcf
Parents: 026eb90
Author: Herman van Hovell <hvanhov...@databricks.com>
Authored: Fri Jun 10 14:29:05 2016 -0700
Committer: Davies Liu <davies....@gmail.com>
Committed: Fri Jun 10 14:29:05 2016 -0700

----------------------------------------------------------------------
 .../catalyst/expressions/codegen/CodeGenerator.scala |  1 +
 .../spark/sql/execution/joins/InnerJoinSuite.scala   | 15 +++++++++++++++
 2 files changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/e05a2fee/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
----------------------------------------------------------------------
diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
index 9657f26..ca20292 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
@@ -490,6 +490,7 @@ class CodegenContext {
       addNewFunction(compareFunc, funcCode)
       s"this.$compareFunc($c1, $c2)"
     case schema: StructType =>
+      INPUT_ROW = "i"
       val comparisons = GenerateOrdering.genComparisons(this, schema)
       val compareFunc = freshName("compareStruct")
       val funcCode: String =

http://git-wip-us.apache.org/repos/asf/spark/blob/e05a2fee/sql/core/src/test/scala/org/apache/spark/sql/execution/joins/InnerJoinSuite.scala
----------------------------------------------------------------------
diff --git 
a/sql/core/src/test/scala/org/apache/spark/sql/execution/joins/InnerJoinSuite.scala
 
b/sql/core/src/test/scala/org/apache/spark/sql/execution/joins/InnerJoinSuite.scala
index 27f6abc..35dab63 100644
--- 
a/sql/core/src/test/scala/org/apache/spark/sql/execution/joins/InnerJoinSuite.scala
+++ 
b/sql/core/src/test/scala/org/apache/spark/sql/execution/joins/InnerJoinSuite.scala
@@ -271,4 +271,19 @@ class InnerJoinSuite extends SparkPlanTest with 
SharedSQLContext {
       )
     )
   }
+
+  {
+    def df: DataFrame = spark.range(3).selectExpr("struct(id, id) as key", "id 
as value")
+    lazy val left = df.selectExpr("key", "concat('L', value) as 
value").alias("left")
+    lazy val right = df.selectExpr("key", "concat('R', value) as 
value").alias("right")
+    testInnerJoin(
+      "SPARK-15822 - test structs as keys",
+      left,
+      right,
+      () => (left.col("key") === right.col("key")).expr,
+      Seq(
+        (Row(0, 0), "L0", Row(0, 0), "R0"),
+        (Row(1, 1), "L1", Row(1, 1), "R1"),
+        (Row(2, 2), "L2", Row(2, 2), "R2")))
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to