This is an automated email from the ASF dual-hosted git repository.
richox pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/auron.git
The following commit(s) were added to refs/heads/master by this push:
new 5014b756 [AURON #1549] Implement native function of InitCap. (#1550)
5014b756 is described below
commit 5014b7564e375cbefd6c32bd366eb6f7d5e22430
Author: slfan1989 <[email protected]>
AuthorDate: Mon Nov 3 10:52:10 2025 +0800
[AURON #1549] Implement native function of InitCap. (#1550)
Signed-off-by: slfan1989 <[email protected]>
---
.../apache/spark/sql/auron/AuronQuerySuite.scala | 35 ++++++++++++++++++++++
.../apache/spark/sql/auron/NativeConverters.scala | 2 ++
2 files changed, 37 insertions(+)
diff --git
a/spark-extension-shims-spark/src/test/scala/org/apache/spark/sql/auron/AuronQuerySuite.scala
b/spark-extension-shims-spark/src/test/scala/org/apache/spark/sql/auron/AuronQuerySuite.scala
index 26382f11..4b1fec6e 100644
---
a/spark-extension-shims-spark/src/test/scala/org/apache/spark/sql/auron/AuronQuerySuite.scala
+++
b/spark-extension-shims-spark/src/test/scala/org/apache/spark/sql/auron/AuronQuerySuite.scala
@@ -317,4 +317,39 @@ class AuronQuerySuite
checkAnswer(sql(q), Seq(expected))
}
}
+
+ test("initcap basic") {
+ Seq(
+ ("select initcap('spark sql')", Row("Spark Sql")),
+ ("select initcap('SPARK')", Row("Spark")),
+ ("select initcap('sPaRk')", Row("Spark")),
+ ("select initcap('')", Row("")),
+ ("select initcap(null)", Row(null))).foreach { case (q, expected) =>
+ checkAnswer(sql(q), Seq(expected))
+ }
+ }
+
+ test("initcap: word boundaries and punctuation") {
+ Seq(
+ ("select initcap('hello world')", Row("Hello World")),
+ ("select initcap('hello_world')", Row("Hello_world")),
+ ("select initcap('über-alles')", Row("Über-alles")),
+ ("select initcap('foo.bar/baz')", Row("Foo.bar/baz")),
+ ("select initcap('v2Ray is COOL')", Row("V2ray Is Cool")),
+ ("select initcap('rock''n''roll')", Row("Rocknroll")),
+ ("select initcap('hi\\tthere')", Row("Hi\tthere")),
+ ("select initcap('hi\\nthere')", Row("Hi\nthere"))).foreach { case (q,
expected) =>
+ checkAnswer(sql(q), Seq(expected))
+ }
+ }
+
+ test("initcap: mixed cases and edge cases") {
+ Seq(
+ ("select initcap('a1b2 c3D4')", Row("A1b2 C3d4")),
+ ("select initcap('---abc---')", Row("---abc---")),
+ ("select initcap(' multiple spaces ')", Row(" Multiple Spaces
"))).foreach {
+ case (q, expected) =>
+ checkAnswer(sql(q), Seq(expected))
+ }
+ }
}
diff --git
a/spark-extension/src/main/scala/org/apache/spark/sql/auron/NativeConverters.scala
b/spark-extension/src/main/scala/org/apache/spark/sql/auron/NativeConverters.scala
index 4594e4ad..785ca3c8 100644
---
a/spark-extension/src/main/scala/org/apache/spark/sql/auron/NativeConverters.scala
+++
b/spark-extension/src/main/scala/org/apache/spark/sql/auron/NativeConverters.scala
@@ -858,6 +858,8 @@ object NativeConverters extends Logging {
buildScalarFunction(pb.ScalarFunction.MD5,
Seq(unpackBinaryTypeCast(_1)), StringType)
case Reverse(_1) =>
buildScalarFunction(pb.ScalarFunction.Reverse,
Seq(unpackBinaryTypeCast(_1)), StringType)
+ case InitCap(_1) =>
+ buildScalarFunction(pb.ScalarFunction.InitCap,
Seq(unpackBinaryTypeCast(_1)), StringType)
case Sha2(_1, Literal(224, _)) =>
buildExtScalarFunction("Sha224", Seq(unpackBinaryTypeCast(_1)),
StringType)
case Sha2(_1, Literal(0, _)) =>