From f50a718b2d0b62c3adbe015185f273071f4bd8ca Mon Sep 17 00:00:00 2001 From: "Jungtaek Lim (HeartSaVioR)" Date: Sat, 28 Sep 2019 15:47:20 +0900 Subject: [PATCH 1/3] [SPARK-29281][SQL] Correct example of Like/RLike to test the origin intention correctly --- .../sql/catalyst/expressions/regexpExpressions.scala | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala index 79fe05f8087a..5db01cc22bda 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala @@ -96,7 +96,13 @@ abstract class StringRegexExpression extends BinaryExpression """, examples = """ Examples: - > SELECT '%SystemDrive%\Users\John' _FUNC_ '\%SystemDrive\%\Users%'; + > SET spark.sql.parser.escapedStringLiterals=true; + spark.sql.parser.escapedStringLiterals true + > SELECT '%SystemDrive%\Users\John' _FUNC_ '\%SystemDrive\%\\Users%'; + true + > SET spark.sql.parser.escapedStringLiterals=false; + spark.sql.parser.escapedStringLiterals false + > SELECT '%SystemDrive%\\Users\\John' _FUNC_ '\%SystemDrive\%\\\\Users%'; true """, note = """ @@ -177,7 +183,7 @@ case class Like(left: Expression, right: Expression) extends StringRegexExpressi true > SET spark.sql.parser.escapedStringLiterals=false; spark.sql.parser.escapedStringLiterals false - > SELECT '%SystemDrive%\Users\John' _FUNC_ '%SystemDrive%\Users.*'; + > SELECT '%SystemDrive%\\Users\\John' _FUNC_ '%SystemDrive%\\\\Users.*'; true """, note = """ From cc43cb697699e7f6b0b94d5cfa94cf3b0e54b85d Mon Sep 17 00:00:00 2001 From: "Jungtaek Lim (HeartSaVioR)" Date: Sat, 28 Sep 2019 16:10:01 +0900 Subject: [PATCH 2/3] Style fix --- .../spark/sql/catalyst/expressions/regexpExpressions.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala index 5db01cc22bda..f52e903e7509 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/regexpExpressions.scala @@ -65,7 +65,7 @@ abstract class StringRegexExpression extends BinaryExpression override def sql: String = s"${left.sql} ${prettyName.toUpperCase(Locale.ROOT)} ${right.sql}" } - +// scalastyle:off line.contains.tab /** * Simple RegEx pattern matching function */ @@ -109,6 +109,7 @@ abstract class StringRegexExpression extends BinaryExpression Use RLIKE to match with standard regular expressions. """, since = "1.0.0") +// scalastyle:on line.contains.tab case class Like(left: Expression, right: Expression) extends StringRegexExpression { override def escape(v: String): String = StringUtils.escapeLikeRegex(v) From a87a75bd5ba495f8b6249849c6a2d2f15df59540 Mon Sep 17 00:00:00 2001 From: "Jungtaek Lim (HeartSaVioR)" Date: Sat, 28 Sep 2019 19:35:37 +0900 Subject: [PATCH 3/3] Fix --- sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala index 4a5201735fbd..2033c21b8339 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala @@ -130,6 +130,7 @@ class SQLQuerySuite extends QueryTest with SharedSparkSession { // Examples demonstrate alternative names, see SPARK-20749 "org.apache.spark.sql.catalyst.expressions.Length", // Uses settings without _FUNC_ in `SET spark.sql.parser.escapedStringLiterals=true` + "org.apache.spark.sql.catalyst.expressions.Like", "org.apache.spark.sql.catalyst.expressions.RLike") spark.sessionState.functionRegistry.listFunction().foreach { funcId => val info = spark.sessionState.catalog.lookupFunctionInfo(funcId)