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

zhli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git


The following commit(s) were added to refs/heads/main by this push:
     new 2e6b013d87 [VL] Enable div function (#11230)
2e6b013d87 is described below

commit 2e6b013d87479dcf19a15c0a2d4d6b6943838e63
Author: Zhen Li <[email protected]>
AuthorDate: Tue Dec 2 11:13:24 2025 +0800

    [VL] Enable div function (#11230)
    
    Enable div function.
---
 .../main/scala/org/apache/gluten/utils/CHExpressionUtil.scala |  3 ++-
 .../apache/gluten/functions/ArithmeticAnsiValidateSuite.scala | 11 +++++++++++
 .../org/apache/gluten/expression/ExpressionConverter.scala    |  8 ++++++++
 .../org/apache/gluten/expression/ExpressionMappings.scala     |  1 +
 .../scala/org/apache/gluten/expression/ExpressionNames.scala  |  2 ++
 .../org/apache/gluten/sql/shims/spark34/Spark34Shims.scala    |  1 +
 .../org/apache/gluten/sql/shims/spark35/Spark35Shims.scala    |  1 +
 .../org/apache/gluten/sql/shims/spark40/Spark40Shims.scala    |  1 +
 8 files changed, 27 insertions(+), 1 deletion(-)

diff --git 
a/backends-clickhouse/src/main/scala/org/apache/gluten/utils/CHExpressionUtil.scala
 
b/backends-clickhouse/src/main/scala/org/apache/gluten/utils/CHExpressionUtil.scala
index 37308f8c0b..27d77d42cf 100644
--- 
a/backends-clickhouse/src/main/scala/org/apache/gluten/utils/CHExpressionUtil.scala
+++ 
b/backends-clickhouse/src/main/scala/org/apache/gluten/utils/CHExpressionUtil.scala
@@ -210,6 +210,7 @@ object CHExpressionUtil {
     LUHN_CHECK -> DefaultValidator(),
     VARCHAR_TYPE_WRITE_SIDE_CHECK -> DefaultValidator(),
     CHAR_TYPE_WRITE_SIDE_CHECK -> DefaultValidator(),
-    READ_SIDE_PADDING -> DefaultValidator()
+    READ_SIDE_PADDING -> DefaultValidator(),
+    DIV -> DefaultValidator()
   )
 }
diff --git 
a/backends-velox/src/test/scala/org/apache/gluten/functions/ArithmeticAnsiValidateSuite.scala
 
b/backends-velox/src/test/scala/org/apache/gluten/functions/ArithmeticAnsiValidateSuite.scala
index ce3540e21a..a1633c4cb4 100644
--- 
a/backends-velox/src/test/scala/org/apache/gluten/functions/ArithmeticAnsiValidateSuite.scala
+++ 
b/backends-velox/src/test/scala/org/apache/gluten/functions/ArithmeticAnsiValidateSuite.scala
@@ -89,4 +89,15 @@ class ArithmeticAnsiValidateSuite extends 
FunctionsValidateSuite {
     }
   }
 
+  test("div") {
+    runQueryAndCompare("SELECT int_field1 div 2 FROM datatab WHERE int_field1 
IS NOT NULL") {
+      checkGlutenPlan[ProjectExecTransformer]
+    }
+    if (isSparkVersionGE("3.4")) {
+      intercept[SparkException] {
+        sql("SELECT 1 div 0 ").collect()
+      }
+    }
+  }
+
 }
diff --git 
a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala
 
b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala
index c7ee159e01..c46a9b1077 100644
--- 
a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala
+++ 
b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala
@@ -734,6 +734,14 @@ object ExpressionConverter extends SQLConfHelper with 
Logging {
           a,
           ExpressionNames.CHECKED_DIVIDE
         )
+      case i: IntegralDivide =>
+        
BackendsApiManager.getSparkPlanExecApiInstance.genArithmeticTransformer(
+          substraitExprName,
+          replaceWithExpressionTransformer0(i.left, attributeSeq, 
expressionsMap),
+          replaceWithExpressionTransformer0(i.right, attributeSeq, 
expressionsMap),
+          i,
+          ExpressionNames.CHECKED_DIV
+        )
       case tryEval: TryEval =>
         // This is a placeholder to handle try_eval(other expressions).
         BackendsApiManager.getSparkPlanExecApiInstance.genTryEvalTransformer(
diff --git 
a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
 
b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
index cc75002875..b0b7c80793 100644
--- 
a/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
+++ 
b/gluten-substrait/src/main/scala/org/apache/gluten/expression/ExpressionMappings.scala
@@ -37,6 +37,7 @@ object ExpressionMappings {
     Sig[Subtract](SUBTRACT),
     Sig[Multiply](MULTIPLY),
     Sig[Divide](DIVIDE),
+    Sig[IntegralDivide](DIV),
     Sig[UnaryPositive](POSITIVE),
     Sig[UnaryMinus](NEGATIVE),
     Sig[And](AND),
diff --git 
a/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
 
b/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
index ef2dee605f..741c1f7a19 100644
--- 
a/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
+++ 
b/shims/common/src/main/scala/org/apache/gluten/expression/ExpressionNames.scala
@@ -60,6 +60,7 @@ object ExpressionNames {
   final val ADD = "add"
   final val SUBTRACT = "subtract"
   final val MULTIPLY = "multiply"
+  final val DIV = "div"
   final val DIVIDE = "divide"
   final val POSITIVE = "positive"
   final val NEGATIVE = "negative"
@@ -91,6 +92,7 @@ object ExpressionNames {
   final val CHECKED_SUBTRACT = "checked_subtract"
   final val CHECKED_DIVIDE = "checked_divide"
   final val CHECKED_MULTIPLY = "checked_multiply"
+  final val CHECKED_DIV = "checked_div"
 
   // SparkSQL String functions
   final val ASCII = "ascii"
diff --git 
a/shims/spark34/src/main/scala/org/apache/gluten/sql/shims/spark34/Spark34Shims.scala
 
b/shims/spark34/src/main/scala/org/apache/gluten/sql/shims/spark34/Spark34Shims.scala
index ac15aff6e7..ef7b7f21fe 100644
--- 
a/shims/spark34/src/main/scala/org/apache/gluten/sql/shims/spark34/Spark34Shims.scala
+++ 
b/shims/spark34/src/main/scala/org/apache/gluten/sql/shims/spark34/Spark34Shims.scala
@@ -560,6 +560,7 @@ class Spark34Shims extends SparkShims {
       case s: Subtract => s.evalMode == EvalMode.ANSI
       case d: Divide => d.evalMode == EvalMode.ANSI
       case m: Multiply => m.evalMode == EvalMode.ANSI
+      case i: IntegralDivide => i.evalMode == EvalMode.ANSI
       case _ => false
     }
   }
diff --git 
a/shims/spark35/src/main/scala/org/apache/gluten/sql/shims/spark35/Spark35Shims.scala
 
b/shims/spark35/src/main/scala/org/apache/gluten/sql/shims/spark35/Spark35Shims.scala
index 4d373b1cc3..a538b25dca 100644
--- 
a/shims/spark35/src/main/scala/org/apache/gluten/sql/shims/spark35/Spark35Shims.scala
+++ 
b/shims/spark35/src/main/scala/org/apache/gluten/sql/shims/spark35/Spark35Shims.scala
@@ -600,6 +600,7 @@ class Spark35Shims extends SparkShims {
       case s: Subtract => s.evalMode == EvalMode.ANSI
       case d: Divide => d.evalMode == EvalMode.ANSI
       case m: Multiply => m.evalMode == EvalMode.ANSI
+      case i: IntegralDivide => i.evalMode == EvalMode.ANSI
       case _ => false
     }
   }
diff --git 
a/shims/spark40/src/main/scala/org/apache/gluten/sql/shims/spark40/Spark40Shims.scala
 
b/shims/spark40/src/main/scala/org/apache/gluten/sql/shims/spark40/Spark40Shims.scala
index 66fa54bb93..cecb8eee10 100644
--- 
a/shims/spark40/src/main/scala/org/apache/gluten/sql/shims/spark40/Spark40Shims.scala
+++ 
b/shims/spark40/src/main/scala/org/apache/gluten/sql/shims/spark40/Spark40Shims.scala
@@ -624,6 +624,7 @@ class Spark40Shims extends SparkShims {
       case d: Divide => d.evalMode == EvalMode.ANSI
       case m: Multiply => m.evalMode == EvalMode.ANSI
       case c: Cast => c.evalMode == EvalMode.ANSI
+      case i: IntegralDivide => i.evalMode == EvalMode.ANSI
       case _ => false
     }
   }


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

Reply via email to