You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by yu...@apache.org on 2020/08/19 12:24:05 UTC

[spark] branch branch-3.0 updated: [SPARK-32624][SQL] Use getCanonicalName to fix byte[] compile issue

This is an automated email from the ASF dual-hosted git repository.

yumwang pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 6dc7457  [SPARK-32624][SQL] Use getCanonicalName to fix byte[] compile issue
6dc7457 is described below

commit 6dc7457620130a7aa03b14303d1475a64348e399
Author: Yuming Wang <yu...@ebay.com>
AuthorDate: Wed Aug 19 05:20:26 2020 -0700

    [SPARK-32624][SQL] Use getCanonicalName to fix byte[] compile issue
    
    ### What changes were proposed in this pull request?
    ```scala
    scala> Array[Byte](1, 2).getClass.getName
    res13: String = [B
    
    scala> Array[Byte](1, 2).getClass.getCanonicalName
    res14: String = byte[]
    ```
    
    This pr replace `getClass.getName` with `getClass.getCanonicalName` in `CodegenContext.addReferenceObj` to fix `byte[]` compile issue:
    ```
    ...
    /* 030 */       value_1 = org.apache.spark.sql.catalyst.util.TypeUtils.compareBinary(value_2, (([B) references[0] /* min */)) >= 0 && org.apache.spark.sql.catalyst.util.TypeUtils.compareBinary(value_2, (([B) references[1] /* max */)) <= 0;
    /* 031 */     }
    /* 032 */     return !isNull_1 && value_1;
    /* 033 */   }
    /* 034 */
    /* 035 */
    /* 036 */ }
    
    20:49:54.886 WARN org.apache.spark.sql.catalyst.expressions.Predicate: Expr codegen error and falling back to interpreter mode
    java.util.concurrent.ExecutionException: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 30, Column 81: failed to compile: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 30, Column 81: Unexpected token "[" in primary
    ...
    ```
    
    ### Why are the changes needed?
    
    Fix compile issue when compiling generated code.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Unit test.
    
    Closes #29439 from wangyum/SPARK-32624.
    
    Authored-by: Yuming Wang <yu...@ebay.com>
    Signed-off-by: Yuming Wang <wg...@gmail.com>
    (cherry picked from commit 409fea30cc40ce24a17325ec63d2f847ce49f5a6)
    Signed-off-by: Yuming Wang <wg...@gmail.com>
---
 .../spark/sql/catalyst/expressions/codegen/CodeGenerator.scala     | 2 +-
 .../spark/sql/catalyst/expressions/CodeGenerationSuite.scala       | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

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 58c95c9..c8aa83e 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
@@ -133,7 +133,7 @@ class CodegenContext extends Logging {
   def addReferenceObj(objName: String, obj: Any, className: String = null): String = {
     val idx = references.length
     references += obj
-    val clsName = Option(className).getOrElse(obj.getClass.getName)
+    val clsName = Option(className).getOrElse(obj.getClass.getCanonicalName)
     s"(($clsName) references[$idx] /* $objName */)"
   }
 
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
index db52229..09cc01d 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
@@ -536,6 +536,13 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
     GenerateUnsafeProjection.generate(exprs, true)
     GenerateMutableProjection.generate(exprs, true)
   }
+
+  test("SPARK-32624: Use getCanonicalName to fix byte[] compile issue") {
+    val ctx = new CodegenContext
+    val bytes = new Array[Byte](3)
+    val byteObj = ctx.addReferenceObj("bytes", bytes)
+    assert(byteObj == "((byte[]) references[0] /* bytes */)")
+  }
 }
 
 case class HugeCodeIntExpression(value: Int) extends Expression {


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