Skip to content

Commit c7a1ec4

Browse files
committed
[EXPB-2582](https://jira.tools.sap/browse/EXPB-2582). Merge join does not filter out null values on left side
Signed-off-by: Corvin Kuebler <corvin.kuebler@sap.com>
1 parent 9321bbc commit c7a1ec4

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableMergeJoin.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ public static EnumerableMergeJoin create(RelNode left, RelNode right,
435435
BlockBuilder builder = new BlockBuilder();
436436
final Result leftResult =
437437
implementor.visitChild(this, 0, (EnumerableRel) left, pref);
438-
final Expression leftExpression =
438+
Expression leftExpression =
439439
builder.append("left", leftResult.block);
440440
final ParameterExpression left_ =
441441
Expressions.parameter(leftResult.physType.getJavaRowType(), "left");
@@ -493,19 +493,21 @@ public static EnumerableMergeJoin create(RelNode left, RelNode right,
493493
}
494494
final RelCollation collation = RelCollations.of(fieldCollations);
495495
final Expression comparator = leftKeyPhysType.generateMergeJoinComparator(collation);
496-
496+
if (joinType == JoinRelType.INNER || joinType == JoinRelType.SEMI) {
497+
leftExpression = Expressions.call(BuiltInMethod.MERGE_JOIN_NOT_NULL_ENUMERABLE.method, leftExpression,
498+
Expressions.lambda(
499+
leftKeyPhysType.record(leftExpressions), left_));
500+
}
497501
return implementor.result(
498502
physType,
499503
builder.append(
500504
Expressions.call(
501505
BuiltInMethod.MERGE_JOIN.method,
502506
Expressions.list(
503-
Expressions.call(BuiltInMethod.MERGE_JOIN_NOT_NULL_ENUMERABLE.method, leftExpression,
504-
Expressions.lambda(
505-
leftKeyPhysType.record(leftExpressions), left_)),
507+
leftExpression,
506508
Expressions.call(BuiltInMethod.MERGE_JOIN_NOT_NULL_ENUMERABLE.method, rightExpression,
507509
Expressions.lambda(
508-
rightKeyPhysType.record(rightExpressions), right_)),
510+
rightKeyPhysType.record(rightExpressions), right_)),
509511
Expressions.lambda(
510512
leftKeyPhysType.record(leftExpressions), left_),
511513
Expressions.lambda(

0 commit comments

Comments
 (0)