Skip to content
Snippets Groups Projects
Commit 87141622 authored by Takuya UESHIN's avatar Takuya UESHIN Committed by Reynold Xin
Browse files

[SPARK-18585][SQL] Use `ev.isNull = "false"` if possible for Janino to have a chance to optimize.

## What changes were proposed in this pull request?

Janino can optimize `true ? a : b` into `a` or `false ? a : b` into `b`, or if/else with literal condition, so we should use literal as `ev.isNull` if possible.

## How was this patch tested?

Existing tests.

Author: Takuya UESHIN <ueshin@happy-camper.st>

Closes #16008 from ueshin/issues/SPARK-18585.
parent fc2c13bd
No related branches found
No related tags found
No related merge requests found
......@@ -61,7 +61,6 @@ case class CreateArray(children: Seq[Expression]) extends Expression {
ctx.addMutableState("Object[]", values, s"this.$values = null;")
ev.copy(code = s"""
final boolean ${ev.isNull} = false;
this.$values = new Object[${children.size}];""" +
ctx.splitExpressions(
ctx.INPUT_ROW,
......@@ -78,7 +77,7 @@ case class CreateArray(children: Seq[Expression]) extends Expression {
s"""
final ArrayData ${ev.value} = new $arrayClass($values);
this.$values = null;
""")
""", isNull = "false")
}
override def prettyName: String = "array"
......@@ -144,7 +143,6 @@ case class CreateMap(children: Seq[Expression]) extends Expression {
val keyData = s"new $arrayClass($keyArray)"
val valueData = s"new $arrayClass($valueArray)"
ev.copy(code = s"""
final boolean ${ev.isNull} = false;
$keyArray = new Object[${keys.size}];
$valueArray = new Object[${values.size}];""" +
ctx.splitExpressions(
......@@ -177,7 +175,7 @@ case class CreateMap(children: Seq[Expression]) extends Expression {
final MapData ${ev.value} = new $mapClass($keyData, $valueData);
this.$keyArray = null;
this.$valueArray = null;
""")
""", isNull = "false")
}
override def prettyName: String = "map"
......@@ -301,7 +299,6 @@ case class CreateNamedStruct(children: Seq[Expression]) extends CreateNamedStruc
ctx.addMutableState("Object[]", values, s"this.$values = null;")
ev.copy(code = s"""
boolean ${ev.isNull} = false;
$values = new Object[${valExprs.size}];""" +
ctx.splitExpressions(
ctx.INPUT_ROW,
......@@ -317,7 +314,7 @@ case class CreateNamedStruct(children: Seq[Expression]) extends CreateNamedStruc
s"""
final InternalRow ${ev.value} = new $rowClass($values);
this.$values = null;
""")
""", isNull = "false")
}
override def prettyName: String = "named_struct"
......@@ -333,7 +330,7 @@ case class CreateNamedStruct(children: Seq[Expression]) extends CreateNamedStruc
case class CreateNamedStructUnsafe(children: Seq[Expression]) extends CreateNamedStructLike {
override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = {
val eval = GenerateUnsafeProjection.createCode(ctx, valExprs)
ExprCode(code = eval.code, isNull = eval.isNull, value = eval.value)
ExprCode(code = eval.code, isNull = "false", value = eval.value)
}
override def prettyName: String = "named_struct_unsafe"
......
......@@ -206,9 +206,8 @@ case class IsNaN(child: Expression) extends UnaryExpression
case DoubleType | FloatType =>
ev.copy(code = s"""
${eval.code}
boolean ${ev.isNull} = false;
${ctx.javaType(dataType)} ${ev.value} = ${ctx.defaultValue(dataType)};
${ev.value} = !${eval.isNull} && Double.isNaN(${eval.value});""")
${ev.value} = !${eval.isNull} && Double.isNaN(${eval.value});""", isNull = "false")
}
}
}
......@@ -383,7 +382,6 @@ case class AtLeastNNonNulls(n: Int, children: Seq[Expression]) extends Predicate
ev.copy(code = s"""
int $nonnull = 0;
$code
boolean ${ev.isNull} = false;
boolean ${ev.value} = $nonnull >= $n;""")
boolean ${ev.value} = $nonnull >= $n;""", isNull = "false")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment