This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 2ed523440f [fix](planner) passthrough child in SetOperationNode is
wrong when enable vector engine (#9991)
2ed523440f is described below
commit 2ed523440f2a04629182d2feafde10b43efd1c65
Author: morrySnow <[email protected]>
AuthorDate: Wed Jun 8 14:12:04 2022 +0800
[fix](planner) passthrough child in SetOperationNode is wrong when enable
vector engine (#9991)
In SetOperationNode we do passthrough, if we child output is same with
itself output.
In method isChildPassthrough we only consider memory layout.
When we use vectorized engine, we need to use SlotDesc offset in TupleDesc
instead of
memory layout to check whether pass-through can be performed
---
.../main/java/org/apache/doris/planner/SetOperationNode.java | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java
b/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java
index e751af42df..12b3a93fe9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java
@@ -25,6 +25,7 @@ import org.apache.doris.analysis.TupleDescriptor;
import org.apache.doris.analysis.TupleId;
import org.apache.doris.common.CheckedMath;
import org.apache.doris.common.UserException;
+import org.apache.doris.common.util.VectorizedUtil;
import org.apache.doris.thrift.TExceptNode;
import org.apache.doris.thrift.TExplainLevel;
import org.apache.doris.thrift.TExpr;
@@ -282,8 +283,14 @@ public abstract class SetOperationNode extends PlanNode {
if (childSlotRef == null) {
return false;
}
- if (!childSlotRef.getDesc().layoutEquals(setOpSlotRef.getDesc())) {
- return false;
+ if (VectorizedUtil.isVectorized()) {
+ if (childSlotRef.getDesc().getSlotOffset() !=
setOpSlotRef.getDesc().getSlotOffset()) {
+ return false;
+ }
+ } else {
+ if
(!childSlotRef.getDesc().layoutEquals(setOpSlotRef.getDesc())) {
+ return false;
+ }
}
}
return true;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]