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, _)) =>

Reply via email to