You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by yh...@apache.org on 2015/12/02 01:24:08 UTC
spark git commit: [SPARK-11352][SQL] Escape */ in the generated
comments.
Repository: spark
Updated Branches:
refs/heads/master 5a8b5fdd6 -> 5872a9d89
[SPARK-11352][SQL] Escape */ in the generated comments.
https://issues.apache.org/jira/browse/SPARK-11352
Author: Yin Huai <yh...@databricks.com>
Closes #10072 from yhuai/SPARK-11352.
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/5872a9d8
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/5872a9d8
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/5872a9d8
Branch: refs/heads/master
Commit: 5872a9d89fe2720c2bcb1fc7494136947a72581c
Parents: 5a8b5fd
Author: Yin Huai <yh...@databricks.com>
Authored: Tue Dec 1 16:24:04 2015 -0800
Committer: Yin Huai <yh...@databricks.com>
Committed: Tue Dec 1 16:24:04 2015 -0800
----------------------------------------------------------------------
.../spark/sql/catalyst/expressions/Expression.scala | 10 ++++++++--
.../catalyst/expressions/codegen/CodegenFallback.scala | 2 +-
.../sql/catalyst/expressions/CodeGenerationSuite.scala | 9 +++++++++
3 files changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/5872a9d8/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala
index b55d365..4ee6542 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala
@@ -95,7 +95,7 @@ abstract class Expression extends TreeNode[Expression] {
ctx.subExprEliminationExprs.get(this).map { subExprState =>
// This expression is repeated meaning the code to evaluated has already been added
// as a function and called in advance. Just use it.
- val code = s"/* $this */"
+ val code = s"/* ${this.toCommentSafeString} */"
GeneratedExpressionCode(code, subExprState.isNull, subExprState.value)
}.getOrElse {
val isNull = ctx.freshName("isNull")
@@ -103,7 +103,7 @@ abstract class Expression extends TreeNode[Expression] {
val ve = GeneratedExpressionCode("", isNull, primitive)
ve.code = genCode(ctx, ve)
// Add `this` in the comment.
- ve.copy(s"/* $this */\n" + ve.code.trim)
+ ve.copy(s"/* ${this.toCommentSafeString} */\n" + ve.code.trim)
}
}
@@ -214,6 +214,12 @@ abstract class Expression extends TreeNode[Expression] {
}
override def toString: String = prettyName + flatArguments.mkString("(", ",", ")")
+
+ /**
+ * Returns the string representation of this expression that is safe to be put in
+ * code comments of generated code.
+ */
+ protected def toCommentSafeString: String = this.toString.replace("*/", "\\*\\/")
}
http://git-wip-us.apache.org/repos/asf/spark/blob/5872a9d8/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodegenFallback.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodegenFallback.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodegenFallback.scala
index a31574c..26fb143 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodegenFallback.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodegenFallback.scala
@@ -33,7 +33,7 @@ trait CodegenFallback extends Expression {
ctx.references += this
val objectTerm = ctx.freshName("obj")
s"""
- /* expression: ${this} */
+ /* expression: ${this.toCommentSafeString} */
java.lang.Object $objectTerm = expressions[${ctx.references.size - 1}].eval(${ctx.INPUT_ROW});
boolean ${ev.isNull} = $objectTerm == null;
${ctx.javaType(this.dataType)} ${ev.value} = ${ctx.defaultValue(this.dataType)};
http://git-wip-us.apache.org/repos/asf/spark/blob/5872a9d8/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
----------------------------------------------------------------------
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 002ed16..fe75424 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
@@ -98,4 +98,13 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
unsafeRow.getStruct(3, 1).getStruct(0, 2).setInt(1, 4)
assert(internalRow === internalRow2)
}
+
+ test("*/ in the data") {
+ // When */ appears in a comment block (i.e. in /**/), code gen will break.
+ // So, in Expression and CodegenFallback, we escape */ to \*\/.
+ checkEvaluation(
+ EqualTo(BoundReference(0, StringType, false), Literal.create("*/", StringType)),
+ true,
+ InternalRow(UTF8String.fromString("*/")))
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org