You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/08/24 06:22:16 UTC
[doris] branch dev-1.1.2 updated: [dev-1.1.2](join)the hash join node would get the wrong nullable if the child node is cross join node (#12028)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
new 8ccd5faa59 [dev-1.1.2](join)the hash join node would get the wrong nullable if the child node is cross join node (#12028)
8ccd5faa59 is described below
commit 8ccd5faa591f3ea2c4268db1e32af16d56a2402f
Author: starocean999 <40...@users.noreply.github.com>
AuthorDate: Wed Aug 24 14:22:11 2022 +0800
[dev-1.1.2](join)the hash join node would get the wrong nullable if the child node is cross join node (#12028)
---
.../main/java/org/apache/doris/planner/HashJoinNode.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
index f0c20ebec1..49db8ce504 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
@@ -366,6 +366,11 @@ public class HashJoinNode extends PlanNode {
int rightNullableNumber = 0;
if (copyLeft) {
for (TupleDescriptor leftTupleDesc : analyzer.getDescTbl().getTupleDesc(getChild(0).getOutputTblRefIds())) {
+ // if the child is cross join node, the only way to get the correct nullable info of its output slots
+ // is to check if the output tuple ids are outer joined or not.
+ // then pass this nullable info to hash join node will be correct.
+ boolean needSetToNullable =
+ getChild(0) instanceof CrossJoinNode && analyzer.isOuterJoined(leftTupleDesc.getId());
for (SlotDescriptor leftSlotDesc : leftTupleDesc.getSlots()) {
if (!isMaterailizedByChild(leftSlotDesc, getChild(0).getOutputSmap())) {
continue;
@@ -376,6 +381,9 @@ public class HashJoinNode extends PlanNode {
outputSlotDesc.setIsNullable(true);
leftNullableNumber++;
}
+ if (needSetToNullable) {
+ outputSlotDesc.setIsNullable(true);
+ }
srcTblRefToOutputTupleSmap.put(new SlotRef(leftSlotDesc), new SlotRef(outputSlotDesc));
}
}
@@ -383,6 +391,8 @@ public class HashJoinNode extends PlanNode {
if (copyRight) {
for (TupleDescriptor rightTupleDesc :
analyzer.getDescTbl().getTupleDesc(getChild(1).getOutputTblRefIds())) {
+ boolean needSetToNullable =
+ getChild(1) instanceof CrossJoinNode && analyzer.isOuterJoined(rightTupleDesc.getId());
for (SlotDescriptor rightSlotDesc : rightTupleDesc.getSlots()) {
if (!isMaterailizedByChild(rightSlotDesc, getChild(1).getOutputSmap())) {
continue;
@@ -393,6 +403,9 @@ public class HashJoinNode extends PlanNode {
outputSlotDesc.setIsNullable(true);
rightNullableNumber++;
}
+ if (needSetToNullable) {
+ outputSlotDesc.setIsNullable(true);
+ }
srcTblRefToOutputTupleSmap.put(new SlotRef(rightSlotDesc), new SlotRef(outputSlotDesc));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org