[fix](nereids) generate correct order for runtime filter when contains NullSafeEquals hash condition (#29726)
Be do not support RF for NullSafeEquals, so fe not generate RF for them. However, after we support NullSafeEquals as Hash join condition, the order of RF is wrong when generating RF in FE. this PR fix it.
This commit is contained in:
@ -368,18 +368,20 @@ public class RuntimeFilterGenerator extends PlanPostProcessor {
|
||||
.filter(type -> (type.getValue() & ctx.getSessionVariable().getRuntimeFilterType()) > 0)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<EqualTo> hashJoinConjuncts = join.getEqualToConjuncts();
|
||||
List<Expression> hashJoinConjuncts = join.getHashJoinConjuncts().stream().collect(Collectors.toList());
|
||||
for (int i = 0; i < hashJoinConjuncts.size(); i++) {
|
||||
EqualTo equalTo = ((EqualTo) JoinUtils.swapEqualToForChildrenOrder(
|
||||
hashJoinConjuncts.get(i), join.left().getOutputSet()));
|
||||
for (TRuntimeFilterType type : legalTypes) {
|
||||
//bitmap rf is generated by nested loop join.
|
||||
if (type == TRuntimeFilterType.BITMAP) {
|
||||
continue;
|
||||
if (hashJoinConjuncts.get(i) instanceof EqualTo) {
|
||||
EqualTo equalTo = ((EqualTo) JoinUtils.swapEqualToForChildrenOrder(
|
||||
(EqualTo) hashJoinConjuncts.get(i), join.left().getOutputSet()));
|
||||
for (TRuntimeFilterType type : legalTypes) {
|
||||
//bitmap rf is generated by nested loop join.
|
||||
if (type == TRuntimeFilterType.BITMAP) {
|
||||
continue;
|
||||
}
|
||||
long buildSideNdv = getBuildSideNdv(join, equalTo);
|
||||
join.pushDownRuntimeFilter(context, generator, join, equalTo.right(),
|
||||
equalTo.left(), type, buildSideNdv, i);
|
||||
}
|
||||
long buildSideNdv = getBuildSideNdv(join, equalTo);
|
||||
join.pushDownRuntimeFilter(context, generator, join, equalTo.right(),
|
||||
equalTo.left(), type, buildSideNdv, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user