Skip to content

Commit ff89719

Browse files
committed
revert literal
1 parent 43da0af commit ff89719

File tree

1 file changed

+29
-12
lines changed
  • sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions

1 file changed

+29
-12
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/literals.scala

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ object DecimalLiteral {
220220
/**
221221
* In order to do type checking, use Literal.create() instead of constructor
222222
*/
223-
case class Literal (value: Any, dataType: DataType) extends LeafExpression {
223+
case class Literal (value: Any, dataType: DataType) extends LeafExpression with CodegenFallback {
224224

225225
override def foldable: Boolean = true
226226
override def nullable: Boolean = value == null
@@ -271,28 +271,45 @@ case class Literal (value: Any, dataType: DataType) extends LeafExpression {
271271
ev.isNull = "true"
272272
ev.copy(s"final ${ctx.javaType(dataType)} ${ev.value} = ${ctx.defaultValue(dataType)};")
273273
} else {
274-
ev.isNull = "false"
275-
ev.value = dataType match {
276-
case BooleanType | IntegerType | DateType => value.toString
274+
dataType match {
275+
case BooleanType =>
276+
ev.isNull = "false"
277+
ev.value = value.toString
278+
ev.copy("")
277279
case FloatType =>
278280
val v = value.asInstanceOf[Float]
279281
if (v.isNaN || v.isInfinite) {
280-
ctx.addReferenceObj(v)
282+
super[CodegenFallback].doGenCode(ctx, ev)
281283
} else {
282-
s"${value}f"
284+
ev.isNull = "false"
285+
ev.value = s"${value}f"
286+
ev.copy("")
283287
}
284288
case DoubleType =>
285289
val v = value.asInstanceOf[Double]
286290
if (v.isNaN || v.isInfinite) {
287-
ctx.addReferenceObj(v)
291+
super[CodegenFallback].doGenCode(ctx, ev)
288292
} else {
289-
s"${value}D"
293+
ev.isNull = "false"
294+
ev.value = s"${value}D"
295+
ev.copy("")
290296
}
291-
case ByteType | ShortType => s"(${ctx.javaType(dataType)})$value"
292-
case TimestampType | LongType => s"${value}L"
293-
case other => ctx.addReferenceObj("literal", value, ctx.javaType(dataType))
297+
case ByteType | ShortType =>
298+
ev.isNull = "false"
299+
ev.value = s"(${ctx.javaType(dataType)})$value"
300+
ev.copy("")
301+
case IntegerType | DateType =>
302+
ev.isNull = "false"
303+
ev.value = value.toString
304+
ev.copy("")
305+
case TimestampType | LongType =>
306+
ev.isNull = "false"
307+
ev.value = s"${value}L"
308+
ev.copy("")
309+
// eval() version may be faster for non-primitive types
310+
case other =>
311+
super[CodegenFallback].doGenCode(ctx, ev)
294312
}
295-
ev.copy("")
296313
}
297314
}
298315

0 commit comments

Comments
 (0)