Skip to content

Commit eb3a221

Browse files
committed
fix order
1 parent 73144d8 commit eb3a221

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/GenerateOrdering.scala

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,38 @@ object GenerateOrdering extends CodeGenerator[Seq[SortOrder], Ordering[InternalR
4646
protected def create(ordering: Seq[SortOrder]): Ordering[InternalRow] = {
4747
val ctx = newCodeGenContext()
4848

49-
val comparisons = ordering.zipWithIndex.map { case (order, i) =>
50-
val evalA = order.child.gen(ctx)
51-
val evalB = order.child.gen(ctx)
49+
val comparisons = ordering.map { order =>
50+
val eval = order.child.gen(ctx)
5251
val asc = order.direction == Ascending
52+
val isNullA = ctx.freshName("isNullA")
53+
val primitiveA = ctx.freshName("primitiveA")
54+
val isNullB = ctx.freshName("isNullB")
55+
val primitiveB = ctx.freshName("primitiveB")
5356
s"""
5457
i = a;
55-
${evalA.code}
58+
boolean $isNullA;
59+
${ctx.javaType(order.child.dataType)} $primitiveA;
60+
{
61+
${eval.code}
62+
$isNullA = ${eval.isNull};
63+
$primitiveA = ${eval.primitive};
64+
}
5665
i = b;
57-
${evalB.code}
58-
if (${evalA.isNull} && ${evalB.isNull}) {
66+
boolean $isNullB;
67+
${ctx.javaType(order.child.dataType)} $primitiveB;
68+
{
69+
${eval.code}
70+
$isNullB = ${eval.isNull};
71+
$primitiveB = ${eval.primitive};
72+
}
73+
if ($isNullA && $isNullB) {
5974
// Nothing
60-
} else if (${evalA.isNull}) {
75+
} else if ($isNullA) {
6176
return ${if (order.direction == Ascending) "-1" else "1"};
62-
} else if (${evalB.isNull}) {
77+
} else if ($isNullB) {
6378
return ${if (order.direction == Ascending) "1" else "-1"};
6479
} else {
65-
int comp = ${ctx.genComp(order.child.dataType, evalA.primitive, evalB.primitive)};
80+
int comp = ${ctx.genComp(order.child.dataType, primitiveA, primitiveB)};
6681
if (comp != 0) {
6782
return ${if (asc) "comp" else "-comp"};
6883
}

0 commit comments

Comments
 (0)