@@ -178,10 +178,12 @@ abstract class BinaryComparison extends BinaryExpression with Predicate {
178178 s " differing types in ${this .getClass.getSimpleName} " +
179179 s " ( ${left.dataType} and ${right.dataType}). " )
180180 } else {
181- TypeUtils .checkForOrderingExpr(left. dataType, " operator " + symbol )
181+ checkTypesInternal( dataType)
182182 }
183183 }
184184
185+ protected def checkTypesInternal (t : DataType ): TypeCheckResult
186+
185187 override def eval (input : Row ): Any = {
186188 val evalE1 = left.eval(input)
187189 if (evalE1 == null ) {
@@ -203,8 +205,7 @@ abstract class BinaryComparison extends BinaryExpression with Predicate {
203205case class EqualTo (left : Expression , right : Expression ) extends BinaryComparison {
204206 override def symbol : String = " ="
205207
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
208209
209210 protected override def evalInternal (l : Any , r : Any ) = {
210211 if (left.dataType != BinaryType ) l == r
@@ -216,8 +217,7 @@ case class EqualNullSafe(left: Expression, right: Expression) extends BinaryComp
216217 override def symbol : String = " <=>"
217218 override def nullable : Boolean = false
218219
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
221221
222222 override def eval (input : Row ): Any = {
223223 val l = left.eval(input)
@@ -235,6 +235,9 @@ case class EqualNullSafe(left: Expression, right: Expression) extends BinaryComp
235235case class LessThan (left : Expression , right : Expression ) extends BinaryComparison {
236236 override def symbol : String = " <"
237237
238+ override protected def checkTypesInternal (t : DataType ) =
239+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
240+
238241 private lazy val ordering = TypeUtils .getOrdering(left.dataType)
239242
240243 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
243246case class LessThanOrEqual (left : Expression , right : Expression ) extends BinaryComparison {
244247 override def symbol : String = " <="
245248
249+ override protected def checkTypesInternal (t : DataType ) =
250+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
251+
246252 private lazy val ordering = TypeUtils .getOrdering(left.dataType)
247253
248254 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
251257case class GreaterThan (left : Expression , right : Expression ) extends BinaryComparison {
252258 override def symbol : String = " >"
253259
260+ override protected def checkTypesInternal (t : DataType ) =
261+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
262+
254263 private lazy val ordering = TypeUtils .getOrdering(left.dataType)
255264
256265 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
259268case class GreaterThanOrEqual (left : Expression , right : Expression ) extends BinaryComparison {
260269 override def symbol : String = " >="
261270
271+ override protected def checkTypesInternal (t : DataType ) =
272+ TypeUtils .checkForOrderingExpr(left.dataType, " operator " + symbol)
273+
262274 private lazy val ordering = TypeUtils .getOrdering(left.dataType)
263275
264276 protected override def evalInternal (evalE1 : Any , evalE2 : Any ) = ordering.gteq(evalE1, evalE2)
0 commit comments