morrySnow commented on code in PR #30133:
URL: https://github.com/apache/doris/pull/30133#discussion_r1467264542
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubqueryToApply.java:
##########
@@ -322,7 +338,8 @@ private ImmutableList<RelatedInfo>
collectRelatedInfo(List<Expression> subqueryC
private LogicalPlan subqueryToApply(List<SubqueryExpr> subqueryExprs,
LogicalPlan childPlan,
Map<SubqueryExpr,
Optional<MarkJoinSlotReference>> subqueryToMarkJoinSlot,
CascadesContext ctx,
- Optional<Expression> conjunct, boolean
isProject) {
+ Optional<Expression> conjunct, boolean
isProject,
+ boolean isMarkJoinSlotNotNull) {
Review Comment:
add more comment to explain the effect of isMarkJoinSlotNotNull
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java:
##########
@@ -62,13 +62,16 @@ public class LogicalApply<LEFT_CHILD_TYPE extends Plan,
RIGHT_CHILD_TYPE extends
// Whether adding the subquery's output to projects
private final boolean needAddSubOutputToProjects;
+ private final boolean isMarkJoinSlotNotNull;
Review Comment:
explain it
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java:
##########
@@ -1270,7 +1292,7 @@ public PlanFragment visitPhysicalHashJoin(
List<SlotDescriptor> rightIntermediateSlotDescriptor =
Lists.newArrayList();
TupleDescriptor intermediateDescriptor = context.generateTupleDesc();
- if (hashJoin.getOtherJoinConjuncts().isEmpty()
+ if (hashJoin.getOtherJoinConjuncts().isEmpty() &&
(isHashJoinConjunctsEmpty ^ isMarkJoinConjunctsEmpty)
Review Comment:
```suggestion
if (hashJoin.getOtherJoinConjuncts().isEmpty() &&
(isHashJoinConjunctsEmpty != isMarkJoinConjunctsEmpty)
```
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java:
##########
@@ -47,6 +46,7 @@ public class UsingJoin<LEFT_CHILD_TYPE extends Plan,
RIGHT_CHILD_TYPE extends Pl
private final JoinType joinType;
private final ImmutableList<Expression> otherJoinConjuncts;
private final ImmutableList<Expression> hashJoinConjuncts;
+ private final ImmutableList<Expression> markJoinConjuncts;
Review Comment:
why update UsingJoin? it could not be mark join at all
##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubqueryToApply.java:
##########
@@ -216,12 +226,18 @@ public List<Rule> buildRules() {
ReplaceSubquery replaceSubquery = new
ReplaceSubquery(ctx.statementContext, true);
SubqueryContext context = new
SubqueryContext(subqueryExprs);
Expression conjunct =
replaceSubquery.replace(subqueryConjuncts.get(i), context);
-
+ boolean isMarkSlotNotNull =
conjunct.containsType(MarkJoinSlotReference.class)
+ ? ExpressionUtils
+ .canInferNotNullForMarkSlot(
+
TrySimplifyPredicateWithMarkJoinSlot.INSTANCE
+
.rewrite(conjunct,
+ null))
+ : false;
Review Comment:
nit: optimize the wrap
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]