@@ -178,10 +178,12 @@ abstract class BinaryComparison extends BinaryExpression with Predicate {
178
178
s " differing types in ${this .getClass.getSimpleName} " +
179
179
s " ( ${left.dataType} and ${right.dataType}). " )
180
180
} else {
181
- TypeUtils .checkForOrderingExpr(left. dataType, " operator " + symbol )
181
+ checkTypesInternal( dataType)
182
182
}
183
183
}
184
184
185
+ protected def checkTypesInternal (t : DataType ): TypeCheckResult
186
+
185
187
override def eval (input : Row ): Any = {
186
188
val evalE1 = left.eval(input)
187
189
if (evalE1 == null ) {
@@ -203,8 +205,7 @@ abstract class BinaryComparison extends BinaryExpression with Predicate {
203
205
case class EqualTo (left : Expression , right : Expression ) extends BinaryComparison {
204
206
override def symbol : String = " ="
205
207
206
- // EqualTo don't need 2 equal orderable types
207
- override def checkInputDataTypes (): TypeCheckResult = TypeCheckResult .success
208
+ override protected def checkTypesInternal (t : DataType ) = TypeCheckResult .success
208
209
209
210
protected override def evalInternal (l : Any , r : Any ) = {
210
211
if (left.dataType != BinaryType ) l == r
@@ -216,8 +217,7 @@ case class EqualNullSafe(left: Expression, right: Expression) extends BinaryComp
216
217
override def symbol : String = " <=>"
217
218
override def nullable : Boolean = false
218
219
219
- // EqualNullSafe don't need 2 equal orderable types
220
- override def checkInputDataTypes (): TypeCheckResult = TypeCheckResult .success
220
+ override protected def checkTypesInternal (t : DataType ) = TypeCheckResult .success
221
221
222
222
override def eval (input : Row ): Any = {
223
223
val l = left.eval(input)
@@ -235,6 +235,9 @@ case class EqualNullSafe(left: Expression, right: Expression) extends BinaryComp
235
235
case class LessThan (left : Expression , right : Expression ) extends BinaryComparison {
236
236
override def symbol : String = " <"
237
237
238
+ override protected def checkTypesInternal (t : DataType ) =
239
+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
240
+
238
241
private lazy val ordering = TypeUtils .getOrdering(left.dataType)
239
242
240
243
protected override def evalInternal (evalE1 : Any , evalE2 : Any ) = ordering.lt(evalE1, evalE2)
@@ -243,6 +246,9 @@ case class LessThan(left: Expression, right: Expression) extends BinaryCompariso
243
246
case class LessThanOrEqual (left : Expression , right : Expression ) extends BinaryComparison {
244
247
override def symbol : String = " <="
245
248
249
+ override protected def checkTypesInternal (t : DataType ) =
250
+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
251
+
246
252
private lazy val ordering = TypeUtils .getOrdering(left.dataType)
247
253
248
254
protected override def evalInternal (evalE1 : Any , evalE2 : Any ) = ordering.lteq(evalE1, evalE2)
@@ -251,6 +257,9 @@ case class LessThanOrEqual(left: Expression, right: Expression) extends BinaryCo
251
257
case class GreaterThan (left : Expression , right : Expression ) extends BinaryComparison {
252
258
override def symbol : String = " >"
253
259
260
+ override protected def checkTypesInternal (t : DataType ) =
261
+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
262
+
254
263
private lazy val ordering = TypeUtils .getOrdering(left.dataType)
255
264
256
265
protected override def evalInternal (evalE1 : Any , evalE2 : Any ) = ordering.gt(evalE1, evalE2)
@@ -259,6 +268,9 @@ case class GreaterThan(left: Expression, right: Expression) extends BinaryCompar
259
268
case class GreaterThanOrEqual (left : Expression , right : Expression ) extends BinaryComparison {
260
269
override def symbol : String = " >="
261
270
271
+ override protected def checkTypesInternal (t : DataType ) =
272
+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
273
+
262
274
private lazy val ordering = TypeUtils .getOrdering(left.dataType)
263
275
264
276
protected override def evalInternal (evalE1 : Any , evalE2 : Any ) = ordering.gteq(evalE1, evalE2)
0 commit comments