You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by do...@apache.org on 2020/04/22 16:37:00 UTC
[spark] branch branch-2.4 updated: [SPARK-31503][SQL][2.4] fix the
SQL string of the TRIM functions
This is an automated email from the ASF dual-hosted git repository.
dongjoon pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/branch-2.4 by this push:
new 5183984 [SPARK-31503][SQL][2.4] fix the SQL string of the TRIM functions
5183984 is described below
commit 51839847704073d6f25c17c0d64a484420621935
Author: Wenchen Fan <we...@databricks.com>
AuthorDate: Wed Apr 22 09:35:45 2020 -0700
[SPARK-31503][SQL][2.4] fix the SQL string of the TRIM functions
backport https://github.com/apache/spark/pull/28281 to 2.4
This backport has one difference: there is no `EXTRACT(... FROM ...)` SQL syntax in 2.4, so this PR just uses the common function call syntax.
Closes #28299 from cloud-fan/pick.
Authored-by: Wenchen Fan <we...@databricks.com>
Signed-off-by: Dongjoon Hyun <do...@apache.org>
---
.../catalyst/expressions/stringExpressions.scala | 28 +++++++++-------------
.../sql-tests/inputs/string-functions.sql | 6 ++++-
.../sql-tests/results/string-functions.sql.out | 18 +++++++++++++-
3 files changed, 33 insertions(+), 19 deletions(-)
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
index 006d2f6..f0c3208 100755
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
@@ -569,11 +569,22 @@ case class FindInSet(left: Expression, right: Expression) extends BinaryExpressi
trait String2TrimExpression extends Expression with ImplicitCastInputTypes {
+ protected def srcStr: Expression
+ protected def trimStr: Option[Expression]
+
+ override def children: Seq[Expression] = srcStr +: trimStr.toSeq
override def dataType: DataType = StringType
override def inputTypes: Seq[AbstractDataType] = Seq.fill(children.size)(StringType)
override def nullable: Boolean = children.exists(_.nullable)
override def foldable: Boolean = children.forall(_.foldable)
+
+ // To match the actual parameter order.
+ override def sql: String = if (trimStr.isDefined) {
+ s"$prettyName(${trimStr.get.sql}, ${srcStr.sql})"
+ } else {
+ super.sql
+ }
}
object StringTrim {
@@ -641,11 +652,6 @@ case class StringTrim(
override def prettyName: String = "trim"
- override def children: Seq[Expression] = if (trimStr.isDefined) {
- srcStr :: trimStr.get :: Nil
- } else {
- srcStr :: Nil
- }
override def eval(input: InternalRow): Any = {
val srcString = srcStr.eval(input).asInstanceOf[UTF8String]
if (srcString == null) {
@@ -741,12 +747,6 @@ case class StringTrimLeft(
override def prettyName: String = "ltrim"
- override def children: Seq[Expression] = if (trimStr.isDefined) {
- srcStr :: trimStr.get :: Nil
- } else {
- srcStr :: Nil
- }
-
override def eval(input: InternalRow): Any = {
val srcString = srcStr.eval(input).asInstanceOf[UTF8String]
if (srcString == null) {
@@ -844,12 +844,6 @@ case class StringTrimRight(
override def prettyName: String = "rtrim"
- override def children: Seq[Expression] = if (trimStr.isDefined) {
- srcStr :: trimStr.get :: Nil
- } else {
- srcStr :: Nil
- }
-
override def eval(input: InternalRow): Any = {
val srcString = srcStr.eval(input).asInstanceOf[UTF8String]
if (srcString == null) {
diff --git a/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql b/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
index 4113734..7f6dc83 100644
--- a/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
+++ b/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql
@@ -46,4 +46,8 @@ FROM (
encode(string(id + 2), 'utf-8') col3,
encode(string(id + 3), 'utf-8') col4
FROM range(10)
-)
+);
+
+-- trim
+SELECT trim(" xyz "), ltrim(" xyz "), rtrim(" xyz ");
+SELECT trim('xyz', 'yxTomxx'), ltrim('xyz', 'yxTomxx'), rtrim('xyz', 'yxTomxx');
\ No newline at end of file
diff --git a/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
index 7b3dc84..86652f8 100644
--- a/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out
@@ -1,5 +1,5 @@
-- Automatically generated by SQLQueryTestSuite
--- Number of queries: 15
+-- Number of queries: 17
-- !query 0
@@ -161,3 +161,19 @@ struct<plan:string>
== Physical Plan ==
*Project [concat(cast(id#xL as string), cast(encode(cast((id#xL + 2) as string), utf-8) as string), cast(encode(cast((id#xL + 3) as string), utf-8) as string)) AS col#x]
+- *Range (0, 10, step=1, splits=2)
+
+
+-- !query 15
+SELECT trim(" xyz "), ltrim(" xyz "), rtrim(" xyz ")
+-- !query 15 schema
+struct<trim( xyz ):string,ltrim( xyz ):string,rtrim( xyz ):string>
+-- !query 15 output
+xyz xyz xyz
+
+
+-- !query 16
+SELECT trim('xyz', 'yxTomxx'), ltrim('xyz', 'yxTomxx'), rtrim('xyz', 'yxTomxx')
+-- !query 16 schema
+struct<trim(xyz, yxTomxx):string,ltrim(xyz, yxTomxx):string,rtrim(xyz, yxTomxx):string>
+-- !query 16 output
+Tom Tomxx yxTom
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org