@@ -21,13 +21,109 @@ package org.apache.comet.serde
21
21
22
22
import scala .collection .JavaConverters ._
23
23
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 }
25
25
import org .apache .spark .sql .types .BooleanType
26
26
27
27
import org .apache .comet .CometSparkSessionExtensions .withInfo
28
28
import org .apache .comet .serde .ExprOuterClass .Expr
29
29
import org .apache .comet .serde .QueryPlanSerde ._
30
30
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
+
31
127
object CometGreaterThan extends CometExpressionSerde [GreaterThan ] {
32
128
override def convert (
33
129
expr : GreaterThan ,
@@ -137,16 +233,6 @@ object CometIn extends CometExpressionSerde[In] {
137
233
}
138
234
}
139
235
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
-
150
236
object CometInSet extends CometExpressionSerde [InSet ] {
151
237
override def convert (
152
238
expr : InSet ,
0 commit comments