@@ -21,13 +21,109 @@ package org.apache.comet.serde
2121
2222import scala .collection .JavaConverters ._
2323
24- import org .apache .spark .sql .catalyst .expressions .{Attribute , Expression , GreaterThan , GreaterThanOrEqual , In , InSet , IsNaN , IsNotNull , IsNull , LessThan , LessThanOrEqual , Literal , Not }
24+ import org .apache .spark .sql .catalyst .expressions .{And , Attribute , EqualNullSafe , EqualTo , Expression , GreaterThan , GreaterThanOrEqual , In , InSet , IsNaN , IsNotNull , IsNull , LessThan , LessThanOrEqual , Literal , Not , Or }
2525import org .apache .spark .sql .types .BooleanType
2626
2727import org .apache .comet .CometSparkSessionExtensions .withInfo
2828import org .apache .comet .serde .ExprOuterClass .Expr
2929import org .apache .comet .serde .QueryPlanSerde ._
3030
31+ object CometNot extends CometExpressionSerde [Not ] {
32+ override def convert (
33+ expr : Not ,
34+ inputs : Seq [Attribute ],
35+ binding : Boolean ): Option [ExprOuterClass .Expr ] = {
36+
37+ expr.child match {
38+ case expr : EqualTo =>
39+ createBinaryExpr(
40+ expr,
41+ expr.left,
42+ expr.right,
43+ inputs,
44+ binding,
45+ (builder, binaryExpr) => builder.setNeq(binaryExpr))
46+ case expr : EqualNullSafe =>
47+ createBinaryExpr(
48+ expr,
49+ expr.left,
50+ expr.right,
51+ inputs,
52+ binding,
53+ (builder, binaryExpr) => builder.setNeqNullSafe(binaryExpr))
54+ case expr : In =>
55+ ComparisonUtils .in(expr, expr.value, expr.list, inputs, binding, negate = true )
56+ case _ =>
57+ createUnaryExpr(
58+ expr,
59+ expr.child,
60+ inputs,
61+ binding,
62+ (builder, unaryExpr) => builder.setNot(unaryExpr))
63+ }
64+ }
65+ }
66+
67+ object CometAnd extends CometExpressionSerde [And ] {
68+ override def convert (
69+ expr : And ,
70+ inputs : Seq [Attribute ],
71+ binding : Boolean ): Option [ExprOuterClass .Expr ] = {
72+ createBinaryExpr(
73+ expr,
74+ expr.left,
75+ expr.right,
76+ inputs,
77+ binding,
78+ (builder, binaryExpr) => builder.setAnd(binaryExpr))
79+ }
80+ }
81+
82+ object CometOr extends CometExpressionSerde [Or ] {
83+ override def convert (
84+ expr : Or ,
85+ inputs : Seq [Attribute ],
86+ binding : Boolean ): Option [ExprOuterClass .Expr ] = {
87+ createBinaryExpr(
88+ expr,
89+ expr.left,
90+ expr.right,
91+ inputs,
92+ binding,
93+ (builder, binaryExpr) => builder.setOr(binaryExpr))
94+ }
95+ }
96+
97+ object CometEqualTo extends CometExpressionSerde [EqualTo ] {
98+ override def convert (
99+ expr : EqualTo ,
100+ inputs : Seq [Attribute ],
101+ binding : Boolean ): Option [ExprOuterClass .Expr ] = {
102+ createBinaryExpr(
103+ expr,
104+ expr.left,
105+ expr.right,
106+ inputs,
107+ binding,
108+ (builder, binaryExpr) => builder.setEq(binaryExpr))
109+ }
110+ }
111+
112+ object CometEqualNullSafe extends CometExpressionSerde [EqualNullSafe ] {
113+ override def convert (
114+ expr : EqualNullSafe ,
115+ inputs : Seq [Attribute ],
116+ binding : Boolean ): Option [ExprOuterClass .Expr ] = {
117+ createBinaryExpr(
118+ expr,
119+ expr.left,
120+ expr.right,
121+ inputs,
122+ binding,
123+ (builder, binaryExpr) => builder.setEqNullSafe(binaryExpr))
124+ }
125+ }
126+
31127object CometGreaterThan extends CometExpressionSerde [GreaterThan ] {
32128 override def convert (
33129 expr : GreaterThan ,
@@ -137,16 +233,6 @@ object CometIn extends CometExpressionSerde[In] {
137233 }
138234}
139235
140- object CometNotIn extends CometExpressionSerde [Not ] {
141- override def convert (
142- expr : Not ,
143- inputs : Seq [Attribute ],
144- binding : Boolean ): Option [ExprOuterClass .Expr ] = {
145- val inExpr = expr.child.asInstanceOf [In ]
146- ComparisonUtils .in(expr, inExpr.value, inExpr.list, inputs, binding, negate = true )
147- }
148- }
149-
150236object CometInSet extends CometExpressionSerde [InSet ] {
151237 override def convert (
152238 expr : InSet ,
0 commit comments