You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by we...@apache.org on 2018/04/17 16:35:55 UTC
spark git commit: [SPARK-23986][SQL] freshName can generate
non-unique names
Repository: spark
Updated Branches:
refs/heads/master 3990daaf3 -> f39e82ce1
[SPARK-23986][SQL] freshName can generate non-unique names
## What changes were proposed in this pull request?
We are using `CodegenContext.freshName` to get a unique name for any new variable we are adding. Unfortunately, this method currently fails to create a unique name when we request more than one instance of variables with starting name `name1` and an instance with starting name `name11`.
The PR changes the way a new name is generated by `CodegenContext.freshName` so that we generate unique names in this scenario too.
## How was this patch tested?
added UT
Author: Marco Gaido <ma...@gmail.com>
Closes #21080 from mgaido91/SPARK-23986.
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/f39e82ce
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/f39e82ce
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/f39e82ce
Branch: refs/heads/master
Commit: f39e82ce150b6a7ea038e6858ba7adbaba3cad88
Parents: 3990daa
Author: Marco Gaido <ma...@gmail.com>
Authored: Wed Apr 18 00:35:44 2018 +0800
Committer: Wenchen Fan <we...@databricks.com>
Committed: Wed Apr 18 00:35:44 2018 +0800
----------------------------------------------------------------------
.../sql/catalyst/expressions/codegen/CodeGenerator.scala | 11 +++--------
.../sql/catalyst/expressions/CodeGenerationSuite.scala | 10 ++++++++++
2 files changed, 13 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/f39e82ce/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 d97611c..f6b6775 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
@@ -572,14 +572,9 @@ class CodegenContext {
} else {
s"${freshNamePrefix}_$name"
}
- if (freshNameIds.contains(fullName)) {
- val id = freshNameIds(fullName)
- freshNameIds(fullName) = id + 1
- s"$fullName$id"
- } else {
- freshNameIds += fullName -> 1
- fullName
- }
+ val id = freshNameIds.getOrElse(fullName, 0)
+ freshNameIds(fullName) = id + 1
+ s"${fullName}_$id"
}
/**
http://git-wip-us.apache.org/repos/asf/spark/blob/f39e82ce/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 f7c0231..5b71bec 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
@@ -489,4 +489,14 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
assert(!ctx.subExprEliminationExprs.contains(ref))
}
}
+
+ test("SPARK-23986: freshName can generate duplicated names") {
+ val ctx = new CodegenContext
+ val names1 = ctx.freshName("myName1") :: ctx.freshName("myName1") ::
+ ctx.freshName("myName11") :: Nil
+ assert(names1.distinct.length == 3)
+ val names2 = ctx.freshName("a") :: ctx.freshName("a") ::
+ ctx.freshName("a_1") :: ctx.freshName("a_0") :: Nil
+ assert(names2.distinct.length == 4)
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org