This is an automated email from the ASF dual-hosted git repository.

taiyang-li pushed a commit to branch fake_add_bolt_backend
in repository https://gitbox.apache.org/repos/asf/gluten.git

commit 50bd8f717f0a393830140a32b66d59d102eb6461
Author: liyang.127 <[email protected]>
AuthorDate: Mon Jun 29 21:07:21 2026 +0800

    [GLUTEN][CORE] Share array-to-string cast rewrite rule
    
    Move the reusable cast(array as string) rewrite logic into backends-core 
and keep the Velox rule as a thin config-gated wrapper so later backends can 
reuse the same optimizer rule body.
---
 .../extension/SharedRewriteCastFromArrayRule.scala | 15 ++--------
 .../gluten/extension/RewriteCastFromArray.scala    | 33 ++--------------------
 2 files changed, 4 insertions(+), 44 deletions(-)

diff --git 
a/backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
 
b/backends-core/src/main/scala/org/apache/gluten/extension/SharedRewriteCastFromArrayRule.scala
similarity index 78%
copy from 
backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
copy to 
backends-core/src/main/scala/org/apache/gluten/extension/SharedRewriteCastFromArrayRule.scala
index 4821418852..e3cd00770a 100644
--- 
a/backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
+++ 
b/backends-core/src/main/scala/org/apache/gluten/extension/SharedRewriteCastFromArrayRule.scala
@@ -16,9 +16,6 @@
  */
 package org.apache.gluten.extension
 
-import org.apache.gluten.config.VeloxConfig
-
-import org.apache.spark.sql.SparkSession
 import org.apache.spark.sql.catalyst.expressions.{ArrayJoin, Cast, Concat, 
Literal}
 import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
 import org.apache.spark.sql.catalyst.rules.Rule
@@ -26,17 +23,9 @@ import org.apache.spark.sql.catalyst.trees.TreePattern.CAST
 import org.apache.spark.sql.internal.SQLConf
 import org.apache.spark.sql.types.{ArrayType, StringType}
 
-/**
- * Velox does not support cast Array to String. Before velox support, 
temporarily add this rule to
- * replace `cast(array as String)` with `concat('[', array_join(array, ', ', 
'null'), ']')` to
- * support offload.
- */
-case class RewriteCastFromArray(spark: SparkSession) extends Rule[LogicalPlan] 
{
+class SharedRewriteCastFromArrayRule(enabled: Boolean) extends 
Rule[LogicalPlan] {
   override def apply(plan: LogicalPlan): LogicalPlan = {
-    if (
-      !VeloxConfig.get.enableRewriteCastArrayToString ||
-      SQLConf.get.getConf(SQLConf.LEGACY_COMPLEX_TYPES_TO_STRING)
-    ) {
+    if (!enabled || 
SQLConf.get.getConf(SQLConf.LEGACY_COMPLEX_TYPES_TO_STRING)) {
       return plan
     }
     plan.transformUpWithPruning(_.containsPattern(CAST)) {
diff --git 
a/backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
 
b/backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
index 4821418852..f0251abf02 100644
--- 
a/backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
+++ 
b/backends-velox/src/main/scala/org/apache/gluten/extension/RewriteCastFromArray.scala
@@ -19,40 +19,11 @@ package org.apache.gluten.extension
 import org.apache.gluten.config.VeloxConfig
 
 import org.apache.spark.sql.SparkSession
-import org.apache.spark.sql.catalyst.expressions.{ArrayJoin, Cast, Concat, 
Literal}
-import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
-import org.apache.spark.sql.catalyst.rules.Rule
-import org.apache.spark.sql.catalyst.trees.TreePattern.CAST
-import org.apache.spark.sql.internal.SQLConf
-import org.apache.spark.sql.types.{ArrayType, StringType}
 
 /**
  * Velox does not support cast Array to String. Before velox support, 
temporarily add this rule to
  * replace `cast(array as String)` with `concat('[', array_join(array, ', ', 
'null'), ']')` to
  * support offload.
  */
-case class RewriteCastFromArray(spark: SparkSession) extends Rule[LogicalPlan] 
{
-  override def apply(plan: LogicalPlan): LogicalPlan = {
-    if (
-      !VeloxConfig.get.enableRewriteCastArrayToString ||
-      SQLConf.get.getConf(SQLConf.LEGACY_COMPLEX_TYPES_TO_STRING)
-    ) {
-      return plan
-    }
-    plan.transformUpWithPruning(_.containsPattern(CAST)) {
-      case p =>
-        p.transformExpressionsUpWithPruning(_.containsPattern(CAST)) {
-          case Cast(child, StringType, timeZoneId, evalMode)
-              if child.dataType.isInstanceOf[ArrayType] =>
-            val joinChild = child.dataType.asInstanceOf[ArrayType].elementType 
match {
-              case StringType =>
-                child
-              case _ =>
-                Cast(child, ArrayType(StringType), timeZoneId, evalMode)
-            }
-            val arrayJoin = ArrayJoin(joinChild, Literal(", "), 
Some(Literal("null")))
-            Concat(Seq(Literal("["), arrayJoin, Literal("]")))
-        }
-    }
-  }
-}
+case class RewriteCastFromArray(spark: SparkSession)
+  extends 
SharedRewriteCastFromArrayRule(VeloxConfig.get.enableRewriteCastArrayToString)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to