@@ -28,14 +28,6 @@ abstract class UnaryArithmetic extends UnaryExpression {
28
28
override def nullable : Boolean = child.nullable
29
29
override def dataType : DataType = child.dataType
30
30
31
- override def checkInputDataTypes : TypeCheckResult = {
32
- if (TypeUtils .validForNumericExpr(child.dataType)) {
33
- TypeCheckResult .success
34
- } else {
35
- TypeCheckResult .fail(" todo" )
36
- }
37
- }
38
-
39
31
override def eval (input : Row ): Any = {
40
32
val evalE = child.eval(input)
41
33
if (evalE == null ) {
@@ -52,6 +44,9 @@ abstract class UnaryArithmetic extends UnaryExpression {
52
44
case class UnaryMinus (child : Expression ) extends UnaryArithmetic {
53
45
override def toString : String = s " - $child"
54
46
47
+ override def checkInputDataTypes (): TypeCheckResult =
48
+ TypeUtils .checkForNumericExpr(child.dataType, " operator -" )
49
+
55
50
private lazy val numeric = TypeUtils .getNumeric(dataType)
56
51
57
52
protected override def evalInternal (evalE : Any ) = numeric.negate(evalE)
@@ -62,6 +57,9 @@ case class Sqrt(child: Expression) extends UnaryArithmetic {
62
57
override def nullable : Boolean = true
63
58
override def toString : String = s " SQRT( $child) "
64
59
60
+ override def checkInputDataTypes (): TypeCheckResult =
61
+ TypeUtils .checkForNumericExpr(child.dataType, " function sqrt" )
62
+
65
63
private lazy val numeric = TypeUtils .getNumeric(child.dataType)
66
64
67
65
protected override def evalInternal (evalE : Any ) = {
@@ -77,6 +75,9 @@ case class Sqrt(child: Expression) extends UnaryArithmetic {
77
75
case class Abs (child : Expression ) extends UnaryArithmetic {
78
76
override def toString : String = s " Abs( $child) "
79
77
78
+ override def checkInputDataTypes (): TypeCheckResult =
79
+ TypeUtils .checkForNumericExpr(child.dataType, " function abs" )
80
+
80
81
private lazy val numeric = TypeUtils .getNumeric(dataType)
81
82
82
83
protected override def evalInternal (evalE : Any ) = numeric.abs(evalE)
@@ -87,10 +88,10 @@ abstract class BinaryArithmetic extends BinaryExpression {
87
88
88
89
override def dataType : DataType = left.dataType
89
90
90
- override def checkInputDataTypes : TypeCheckResult = {
91
+ override def checkInputDataTypes () : TypeCheckResult = {
91
92
if (left.dataType != right.dataType) {
92
93
TypeCheckResult .fail(
93
- s " differing types in BinaryArithmetics -- ${left.dataType}, ${right.dataType}" )
94
+ s " differing types in BinaryArithmetic, ${left.dataType} != ${right.dataType}" )
94
95
} else {
95
96
checkTypesInternal(dataType)
96
97
}
@@ -123,13 +124,8 @@ case class Add(left: Expression, right: Expression) extends BinaryArithmetic {
123
124
// for `Add` in `HiveTypeCoercion`
124
125
override lazy val resolved = childrenResolved && ! DecimalType .isFixed(dataType)
125
126
126
- protected def checkTypesInternal (t : DataType ) = {
127
- if (TypeUtils .validForNumericExpr(t)) {
128
- TypeCheckResult .success
129
- } else {
130
- TypeCheckResult .fail(" todo" )
131
- }
132
- }
127
+ protected def checkTypesInternal (t : DataType ) =
128
+ TypeUtils .checkForNumericExpr(t, " operator " + symbol)
133
129
134
130
private lazy val numeric = TypeUtils .getNumeric(dataType)
135
131
@@ -143,13 +139,8 @@ case class Subtract(left: Expression, right: Expression) extends BinaryArithmeti
143
139
// for `Subtract` in `HiveTypeCoercion`
144
140
override lazy val resolved = childrenResolved && ! DecimalType .isFixed(dataType)
145
141
146
- protected def checkTypesInternal (t : DataType ) = {
147
- if (TypeUtils .validForNumericExpr(t)) {
148
- TypeCheckResult .success
149
- } else {
150
- TypeCheckResult .fail(" todo" )
151
- }
152
- }
142
+ protected def checkTypesInternal (t : DataType ) =
143
+ TypeUtils .checkForNumericExpr(t, " operator " + symbol)
153
144
154
145
private lazy val numeric = TypeUtils .getNumeric(dataType)
155
146
@@ -163,13 +154,8 @@ case class Multiply(left: Expression, right: Expression) extends BinaryArithmeti
163
154
// for `Multiply` in `HiveTypeCoercion`
164
155
override lazy val resolved = childrenResolved && ! DecimalType .isFixed(dataType)
165
156
166
- protected def checkTypesInternal (t : DataType ) = {
167
- if (TypeUtils .validForNumericExpr(t)) {
168
- TypeCheckResult .success
169
- } else {
170
- TypeCheckResult .fail(" todo" )
171
- }
172
- }
157
+ protected def checkTypesInternal (t : DataType ) =
158
+ TypeUtils .checkForNumericExpr(t, " operator " + symbol)
173
159
174
160
private lazy val numeric = TypeUtils .getNumeric(dataType)
175
161
@@ -184,13 +170,8 @@ case class Divide(left: Expression, right: Expression) extends BinaryArithmetic
184
170
// for `Divide` in `HiveTypeCoercion`
185
171
override lazy val resolved = childrenResolved && ! DecimalType .isFixed(dataType)
186
172
187
- protected def checkTypesInternal (t : DataType ) = {
188
- if (TypeUtils .validForNumericExpr(t)) {
189
- TypeCheckResult .success
190
- } else {
191
- TypeCheckResult .fail(" todo" )
192
- }
193
- }
173
+ protected def checkTypesInternal (t : DataType ) =
174
+ TypeUtils .checkForNumericExpr(t, " operator " + symbol)
194
175
195
176
private lazy val div : (Any , Any ) => Any = dataType match {
196
177
case ft : FractionalType => ft.fractional.asInstanceOf [Fractional [Any ]].div
@@ -220,13 +201,8 @@ case class Remainder(left: Expression, right: Expression) extends BinaryArithmet
220
201
// for `Remainder` in `HiveTypeCoercion`
221
202
override lazy val resolved = childrenResolved && ! DecimalType .isFixed(dataType)
222
203
223
- protected def checkTypesInternal (t : DataType ) = {
224
- if (TypeUtils .validForNumericExpr(t)) {
225
- TypeCheckResult .success
226
- } else {
227
- TypeCheckResult .fail(" todo" )
228
- }
229
- }
204
+ protected def checkTypesInternal (t : DataType ) =
205
+ TypeUtils .checkForNumericExpr(t, " operator " + symbol)
230
206
231
207
private lazy val integral = dataType match {
232
208
case i : IntegralType => i.integral.asInstanceOf [Integral [Any ]]
@@ -254,13 +230,8 @@ case class Remainder(left: Expression, right: Expression) extends BinaryArithmet
254
230
case class BitwiseAnd (left : Expression , right : Expression ) extends BinaryArithmetic {
255
231
override def symbol : String = " &"
256
232
257
- protected def checkTypesInternal (t : DataType ) = {
258
- if (TypeUtils .validForBitwiseExpr(t)) {
259
- TypeCheckResult .success
260
- } else {
261
- TypeCheckResult .fail(" todo" )
262
- }
263
- }
233
+ protected def checkTypesInternal (t : DataType ) =
234
+ TypeUtils .checkForBitwiseExpr(t, " operator " + symbol)
264
235
265
236
private lazy val and : (Any , Any ) => Any = dataType match {
266
237
case ByteType =>
@@ -282,13 +253,8 @@ case class BitwiseAnd(left: Expression, right: Expression) extends BinaryArithme
282
253
case class BitwiseOr (left : Expression , right : Expression ) extends BinaryArithmetic {
283
254
override def symbol : String = " |"
284
255
285
- protected def checkTypesInternal (t : DataType ) = {
286
- if (TypeUtils .validForBitwiseExpr(t)) {
287
- TypeCheckResult .success
288
- } else {
289
- TypeCheckResult .fail(" todo" )
290
- }
291
- }
256
+ protected def checkTypesInternal (t : DataType ) =
257
+ TypeUtils .checkForBitwiseExpr(t, " operator " + symbol)
292
258
293
259
private lazy val or : (Any , Any ) => Any = dataType match {
294
260
case ByteType =>
@@ -310,13 +276,8 @@ case class BitwiseOr(left: Expression, right: Expression) extends BinaryArithmet
310
276
case class BitwiseXor (left : Expression , right : Expression ) extends BinaryArithmetic {
311
277
override def symbol : String = " ^"
312
278
313
- protected def checkTypesInternal (t : DataType ) = {
314
- if (TypeUtils .validForBitwiseExpr(t)) {
315
- TypeCheckResult .success
316
- } else {
317
- TypeCheckResult .fail(" todo" )
318
- }
319
- }
279
+ protected def checkTypesInternal (t : DataType ) =
280
+ TypeUtils .checkForBitwiseExpr(t, " operator " + symbol)
320
281
321
282
private lazy val xor : (Any , Any ) => Any = dataType match {
322
283
case ByteType =>
@@ -338,13 +299,8 @@ case class BitwiseXor(left: Expression, right: Expression) extends BinaryArithme
338
299
case class BitwiseNot (child : Expression ) extends UnaryArithmetic {
339
300
override def toString : String = s " ~ $child"
340
301
341
- override def checkInputDataTypes : TypeCheckResult = {
342
- if (TypeUtils .validForBitwiseExpr(dataType)) {
343
- TypeCheckResult .success
344
- } else {
345
- TypeCheckResult .fail(" todo" )
346
- }
347
- }
302
+ override def checkInputDataTypes (): TypeCheckResult =
303
+ TypeUtils .checkForBitwiseExpr(child.dataType, " operator ~" )
348
304
349
305
private lazy val not : (Any ) => Any = dataType match {
350
306
case ByteType =>
@@ -363,13 +319,8 @@ case class BitwiseNot(child: Expression) extends UnaryArithmetic {
363
319
case class MaxOf (left : Expression , right : Expression ) extends BinaryArithmetic {
364
320
override def nullable : Boolean = left.nullable && right.nullable
365
321
366
- protected def checkTypesInternal (t : DataType ) = {
367
- if (TypeUtils .validForOrderingExpr(t)) {
368
- TypeCheckResult .success
369
- } else {
370
- TypeCheckResult .fail(" todo" )
371
- }
372
- }
322
+ protected def checkTypesInternal (t : DataType ) =
323
+ TypeUtils .checkForOrderingExpr(t, " function maxOf" )
373
324
374
325
private lazy val ordering = TypeUtils .getOrdering(dataType)
375
326
@@ -395,13 +346,8 @@ case class MaxOf(left: Expression, right: Expression) extends BinaryArithmetic {
395
346
case class MinOf (left : Expression , right : Expression ) extends BinaryArithmetic {
396
347
override def nullable : Boolean = left.nullable && right.nullable
397
348
398
- protected def checkTypesInternal (t : DataType ) = {
399
- if (TypeUtils .validForOrderingExpr(t)) {
400
- TypeCheckResult .success
401
- } else {
402
- TypeCheckResult .fail(" todo" )
403
- }
404
- }
349
+ protected def checkTypesInternal (t : DataType ) =
350
+ TypeUtils .checkForOrderingExpr(t, " function minOf" )
405
351
406
352
private lazy val ordering = TypeUtils .getOrdering(dataType)
407
353
0 commit comments