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

viirya pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/main by this push:
     new d1d57c68 minor: refactor UnaryExpr handling to make code more concise 
(#1065)
d1d57c68 is described below

commit d1d57c6826b37d0c60e312204ea71ae17d44e20a
Author: Andy Grove <[email protected]>
AuthorDate: Fri Nov 8 07:22:29 2024 -0700

    minor: refactor UnaryExpr handling to make code more concise (#1065)
    
    * minor: refactor UnaryExpr handling to make more concise
    
    * add documentation
---
 .../org/apache/comet/serde/QueryPlanSerde.scala    | 71 +++++++++++-----------
 1 file changed, 36 insertions(+), 35 deletions(-)

diff --git a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala 
b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
index 8bdc886d..c47c2b6a 100644
--- a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
+++ b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
@@ -1282,12 +1282,10 @@ object QueryPlanSerde extends Logging with 
ShimQueryPlanSerde with CometExprShim
           }
 
         case StringSpace(child) =>
-          createUnaryExpr(child, inputs).map { expr =>
-            ExprOuterClass.Expr
-              .newBuilder()
-              .setStringSpace(expr)
-              .build()
-          }
+          createUnaryExpr(
+            child,
+            inputs,
+            (builder, unaryExpr) => builder.setStringSpace(unaryExpr))
 
         case Hour(child, timeZoneId) =>
           val childExpr = exprToProtoInternal(child, inputs)
@@ -1422,20 +1420,10 @@ object QueryPlanSerde extends Logging with 
ShimQueryPlanSerde with CometExprShim
           optExprWithInfo(optExpr, expr, child)
 
         case IsNull(child) =>
-          createUnaryExpr(child, inputs).map { expr =>
-            ExprOuterClass.Expr
-              .newBuilder()
-              .setIsNull(expr)
-              .build()
-          }
+          createUnaryExpr(child, inputs, (builder, unaryExpr) => 
builder.setIsNull(unaryExpr))
 
         case IsNotNull(child) =>
-          createUnaryExpr(child, inputs).map { expr =>
-            ExprOuterClass.Expr
-              .newBuilder()
-              .setIsNotNull(expr)
-              .build()
-          }
+          createUnaryExpr(child, inputs, (builder, unaryExpr) => 
builder.setIsNotNull(unaryExpr))
 
         case IsNaN(child) =>
           val childExpr = exprToProtoInternal(child, inputs)
@@ -1930,12 +1918,7 @@ object QueryPlanSerde extends Logging with 
ShimQueryPlanSerde with CometExprShim
           }
 
         case BitwiseNot(child) =>
-          createUnaryExpr(child, inputs).map { expr =>
-            ExprOuterClass.Expr
-              .newBuilder()
-              .setBitwiseNot(expr)
-              .build()
-          }
+          createUnaryExpr(child, inputs, (builder, unaryExpr) => 
builder.setBitwiseNot(unaryExpr))
 
         case BitwiseOr(left, right) =>
           createBinaryExpr(left, right, inputs).map { builder =>
@@ -2001,12 +1984,7 @@ object QueryPlanSerde extends Logging with 
ShimQueryPlanSerde with CometExprShim
           in(expr, value, list, inputs, true)
 
         case Not(child) =>
-          createUnaryExpr(child, inputs).map { expr =>
-            ExprOuterClass.Expr
-              .newBuilder()
-              .setNot(expr)
-              .build()
-          }
+          createUnaryExpr(child, inputs, (builder, unaryExpr) => 
builder.setNot(unaryExpr))
 
         case UnaryMinus(child, failOnError) =>
           val childExpr = exprToProtoInternal(child, inputs)
@@ -2287,16 +2265,39 @@ object QueryPlanSerde extends Logging with 
ShimQueryPlanSerde with CometExprShim
       }
     }
 
+    /**
+     * Creates a UnaryExpr by calling exprToProtoInternal for the provided 
child expression and
+     * then invokes the supplied function to wrap this UnaryExpr in a 
top-level Expr.
+     *
+     * @param child
+     *   Spark expression
+     * @param inputs
+     *   Inputs to the expression
+     * @param f
+     *   Function that accepts an Expr.Builder and a UnaryExpr and builds the 
specific top-level
+     *   Expr
+     * @return
+     *   Some(Expr) or None if not supported
+     */
     def createUnaryExpr(
         child: Expression,
-        inputs: Seq[Attribute]): Option[ExprOuterClass.UnaryExpr] = {
+        inputs: Seq[Attribute],
+        f: (ExprOuterClass.Expr.Builder, ExprOuterClass.UnaryExpr) => 
ExprOuterClass.Expr.Builder)
+        : Option[ExprOuterClass.Expr] = {
       val childExpr = exprToProtoInternal(child, inputs)
       if (childExpr.isDefined) {
+        // create the generic UnaryExpr message
+        val inner = ExprOuterClass.UnaryExpr
+          .newBuilder()
+          .setChild(childExpr.get)
+          .build()
+        // call the user-supplied function to wrap UnaryExpr in a top-level 
Expr
+        // such as Expr.IsNull or Expr.IsNotNull
         Some(
-          ExprOuterClass.UnaryExpr
-            .newBuilder()
-            .setChild(childExpr.get)
-            .build())
+          f(
+            ExprOuterClass.Expr
+              .newBuilder(),
+            inner).build())
       } else {
         withInfo(expr, child)
         None


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

Reply via email to