This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch fix_join in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a3c76326df4d4bb9c39e65f700dab5b34c35e58c Author: Beyyes <[email protected]> AuthorDate: Sat Nov 23 20:04:12 2024 +0800 fix cross join error --- .../iotdb/db/queryengine/plan/relational/planner/node/JoinNode.java | 5 +++++ .../relational/planner/optimizations/PushPredicateIntoTableScan.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/JoinNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/JoinNode.java index 0775075a685..3546c9a76ce 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/JoinNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/JoinNode.java @@ -44,6 +44,7 @@ import java.util.Set; import static com.google.common.base.Preconditions.checkArgument; import static java.lang.String.format; import static java.util.Objects.requireNonNull; +import static org.apache.iotdb.db.queryengine.plan.relational.planner.node.JoinNode.JoinType.INNER; public class JoinNode extends TwoChildProcessNode { @@ -292,6 +293,10 @@ public class JoinNode extends TwoChildProcessNode { return spillable; } + public boolean isCrossJoin() { + return criteria.isEmpty() && !filter.isPresent() && joinType == INNER; + } + @Override public String toString() { return "JoinNode-" + this.getPlanNodeId(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java index f9d2d5edb1a..c23a97d3650 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java @@ -640,6 +640,11 @@ public class PushPredicateIntoTableScan implements PlanOptimizer { node.isSpillable()); } + if (((JoinNode) output).isCrossJoin()) { + throw new IllegalStateException( + "Cross join is not supported in current version, each table must have at least one equiJoinClause"); + } + JoinNode.EquiJoinClause joinCriteria = ((JoinNode) output).getCriteria().get(0); OrderingScheme leftOrderingScheme = new OrderingScheme(
