|
21 | 21 | import org.apache.doris.nereids.trees.expressions.EqualTo; |
22 | 22 | import org.apache.doris.nereids.trees.expressions.Expression; |
23 | 23 | import org.apache.doris.nereids.trees.expressions.InPredicate; |
| 24 | +import org.apache.doris.nereids.trees.expressions.IsNull; |
24 | 25 | import org.apache.doris.nereids.trees.expressions.NamedExpression; |
25 | 26 | import org.apache.doris.nereids.trees.expressions.Slot; |
26 | 27 | import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction; |
@@ -134,7 +135,7 @@ public ImmutableSet<Expression> visitLogicalOneRowRelation(LogicalOneRowRelation |
134 | 135 | Set<Expression> predicates = new LinkedHashSet<>(); |
135 | 136 | for (NamedExpression expr : r.getProjects()) { |
136 | 137 | if (expr instanceof Alias && expr.child(0) instanceof Literal) { |
137 | | - predicates.add(new EqualTo(expr.toSlot(), expr.child(0))); |
| 138 | + predicates.add(generateEqual(expr)); |
138 | 139 | } |
139 | 140 | } |
140 | 141 | return ImmutableSet.copyOf(predicates); |
@@ -262,7 +263,7 @@ public ImmutableSet<Expression> visitLogicalProject(LogicalProject<? extends Pla |
262 | 263 | } |
263 | 264 | for (NamedExpression expr : project.getProjects()) { |
264 | 265 | if (expr instanceof Alias && expr.child(0) instanceof Literal) { |
265 | | - allPredicates.add(new EqualTo(expr.toSlot(), expr.child(0))); |
| 266 | + allPredicates.add(generateEqual(expr)); |
266 | 267 | } |
267 | 268 | } |
268 | 269 | return getAvailableExpressions(allPredicates, project); |
@@ -379,4 +380,13 @@ private ImmutableSet<Expression> getFiltersFromUnionConstExprs(LogicalUnion unio |
379 | 380 | } |
380 | 381 | return ImmutableSet.copyOf(filtersFromConstExprs); |
381 | 382 | } |
| 383 | + |
| 384 | + private Expression generateEqual(NamedExpression expr) { |
| 385 | + // IsNull have better performance and compatibility than NullSafeEqualTo |
| 386 | + if (expr.child(0) instanceof NullLiteral) { |
| 387 | + return new IsNull(expr.toSlot()); |
| 388 | + } else { |
| 389 | + return new EqualTo(expr.toSlot(), expr.child(0)); |
| 390 | + } |
| 391 | + } |
382 | 392 | } |
0 commit comments