This is an automated email from the ASF dual-hosted git repository. xingtanzjr pushed a commit to branch xingtanzjr/polish_node in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit dd1bd71af3d2811f9b5ed6cd937b72c7006be9a9 Author: Jinrui.Zhang <[email protected]> AuthorDate: Mon Mar 28 20:42:16 2022 +0800 polish implement of PlanNode --- .../db/mpp/sql/planner/plan/PlanFragment.java | 2 +- .../db/mpp/sql/planner/plan/node/PlanNode.java | 25 +++++- .../plan/node/metedata/read/ShowDevicesNode.java | 9 ++- .../node/metedata/write/AlterTimeSeriesNode.java | 9 ++- .../write/CreateAlignedTimeSeriesNode.java | 9 ++- .../node/metedata/write/CreateTimeSeriesNode.java | 9 ++- .../planner/plan/node/process/AggregateNode.java | 12 ++- .../planner/plan/node/process/DeviceMergeNode.java | 20 ++++- .../planner/plan/node/process/ExchangeNode.java | 14 ++-- .../sql/planner/plan/node/process/FillNode.java | 15 +++- .../sql/planner/plan/node/process/FilterNode.java | 20 +++-- .../planner/plan/node/process/FilterNullNode.java | 22 +++--- .../plan/node/process/GroupByLevelNode.java | 11 ++- .../sql/planner/plan/node/process/LimitNode.java | 10 +-- .../sql/planner/plan/node/process/OffsetNode.java | 20 +++-- .../sql/planner/plan/node/process/SortNode.java | 20 +++-- .../planner/plan/node/process/TimeJoinNode.java | 10 +-- .../sql/planner/plan/node/sink/CsvSinkNode.java | 67 ---------------- .../planner/plan/node/sink/FragmentSinkNode.java | 15 ++-- .../sql/planner/plan/node/sink/ThriftSinkNode.java | 69 ----------------- .../planner/plan/node/source/CsvSourceNode.java | 90 ---------------------- .../plan/node/source/SeriesAggregateScanNode.java | 9 ++- .../planner/plan/node/source/SeriesScanNode.java | 6 +- .../plan/node/write/InsertMultiTabletNode.java | 9 ++- .../sql/planner/plan/node/write/InsertRowNode.java | 9 ++- .../planner/plan/node/write/InsertRowsNode.java | 9 ++- .../plan/node/write/InsertRowsOfOneDeviceNode.java | 9 ++- .../planner/plan/node/write/InsertTabletNode.java | 9 ++- 28 files changed, 189 insertions(+), 349 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/PlanFragment.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/PlanFragment.java index ed75a0a..f2a7132 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/PlanFragment.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/PlanFragment.java @@ -98,7 +98,7 @@ public class PlanFragment { PlanNode root = PlanNodeType.deserialize(byteBuffer); int childrenCount = byteBuffer.getInt(); for (int i = 0; i < childrenCount; i++) { - root.addChildren(deserializeHelper(byteBuffer)); + root.addChild(deserializeHelper(byteBuffer)); } return root; } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanNode.java index 7d99a38..ac7adee 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/PlanNode.java @@ -18,6 +18,8 @@ */ package org.apache.iotdb.db.mpp.sql.planner.plan.node; +import org.apache.commons.lang.Validate; + import java.nio.ByteBuffer; import java.util.List; @@ -26,8 +28,11 @@ import static java.util.Objects.requireNonNull; /** The base class of query executable operators, which is used to compose logical query plan. */ // TODO: consider how to restrict the children type for each type of ExecOperator public abstract class PlanNode { + protected static final int NO_CHILD_ALLOWED = 0; + protected static final int ONE_CHILD = 1; + protected static final int CHILD_COUNT_NO_LIMIT = -1; - private PlanNodeId id; + private final PlanNodeId id; protected PlanNode(PlanNodeId id) { requireNonNull(id, "id is null"); @@ -40,11 +45,25 @@ public abstract class PlanNode { public abstract List<PlanNode> getChildren(); - public abstract void addChildren(PlanNode child); + public abstract void addChild(PlanNode child); public abstract PlanNode clone(); - public abstract PlanNode cloneWithChildren(List<PlanNode> children); + public PlanNode cloneWithChildren(List<PlanNode> children) { + Validate.isTrue(children == null || allowedChildCount() == CHILD_COUNT_NO_LIMIT || children.size() == allowedChildCount(), + String.format("Child count is not correct for PlanNode. Expected: %d, Value: %d", allowedChildCount(), getChildrenCount(children))); + PlanNode node = clone(); + if (children != null) { + children.forEach(node::addChild); + } + return node; + } + + private int getChildrenCount(List<PlanNode> children) { + return children == null ? 0 : children.size(); + } + + public abstract int allowedChildCount(); public abstract List<String> getOutputColumnNames(); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/read/ShowDevicesNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/read/ShowDevicesNode.java index 90f4023..c00130b 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/read/ShowDevicesNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/read/ShowDevicesNode.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.metedata.read; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -36,16 +37,16 @@ public class ShowDevicesNode extends ShowNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("Clone of ShowDevicesNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/AlterTimeSeriesNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/AlterTimeSeriesNode.java index cf4ddaa..7e426bb 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/AlterTimeSeriesNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/AlterTimeSeriesNode.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.sql.statement.metadata.AlterTimeSeriesStatement.AlterType; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -117,16 +118,16 @@ public class AlterTimeSeriesNode extends PlanNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("Clone of AlterTimeSeriesNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java index a8252f0..c24cf8d 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateAlignedTimeSeriesNode.java @@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.metedata.write; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; @@ -142,16 +143,16 @@ public class CreateAlignedTimeSeriesNode extends PlanNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("Clone of CreateAlignedTimeSeriesNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateTimeSeriesNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateTimeSeriesNode.java index 7458e98..5ba57ea 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateTimeSeriesNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/metedata/write/CreateTimeSeriesNode.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.metedata.write; import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; @@ -143,16 +144,16 @@ public class CreateTimeSeriesNode extends PlanNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("Clone of CreateTimeSeriesNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/AggregateNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/AggregateNode.java index 5a9e23b..841978b 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/AggregateNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/AggregateNode.java @@ -23,8 +23,10 @@ import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.query.expression.unary.FunctionExpression; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -64,16 +66,18 @@ public class AggregateNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + throw new NotImplementedException("addChild of AggregateNode is not implemented"); + } @Override public PlanNode clone() { - return null; + throw new NotImplementedException("Clone of AggregateNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return CHILD_COUNT_NO_LIMIT; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/DeviceMergeNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/DeviceMergeNode.java index 5d98d33..7cc4b53 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/DeviceMergeNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/DeviceMergeNode.java @@ -60,6 +60,12 @@ public class DeviceMergeNode extends ProcessNode { public DeviceMergeNode(PlanNodeId id) { super(id); + this.children = new ArrayList<>(); + } + + public DeviceMergeNode(PlanNodeId id, OrderBy mergeOrder) { + this(id); + this.mergeOrder = mergeOrder; } @Override @@ -68,16 +74,18 @@ public class DeviceMergeNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.children.add(child); + } @Override public PlanNode clone() { - return null; + return new DeviceMergeNode(getId(), mergeOrder); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return CHILD_COUNT_NO_LIMIT; } @Override @@ -119,4 +127,8 @@ public class DeviceMergeNode extends ProcessNode { attributes.add("MergeOrder: " + (this.getMergeOrder() == null ? "null" : this.getMergeOrder())); return new Pair<>(title, attributes); } + + public void setChildren(List<PlanNode> children) { + this.children = children; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java index 0df6d36..3e016be 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/ExchangeNode.java @@ -32,6 +32,8 @@ import java.util.List; public class ExchangeNode extends PlanNode { private PlanNode child; + // The remoteSourceNode is used to record the remote source info for current ExchangeNode + // It is not the child of current ExchangeNode private FragmentSinkNode remoteSourceNode; // In current version, one ExchangeNode will only have one source. @@ -54,7 +56,9 @@ public class ExchangeNode extends PlanNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { @@ -68,12 +72,8 @@ public class ExchangeNode extends PlanNode { } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - ExchangeNode node = (ExchangeNode) clone(); - if (children != null && children.size() > 0) { - node.setChild(children.get(0)); - } - return node; + public int allowedChildCount() { + return CHILD_COUNT_NO_LIMIT; } public void setUpstream(EndPoint endPoint, FragmentInstanceId instanceId, PlanNodeId nodeId) { diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FillNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FillNode.java index f79a1c0..4dae79f 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FillNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FillNode.java @@ -43,22 +43,29 @@ public class FillNode extends ProcessNode { super(id); } + public FillNode(PlanNodeId id, FillPolicy policy) { + this(id); + this.fillPolicy = policy; + } + @Override public List<PlanNode> getChildren() { return ImmutableList.of(child); } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { - return null; + return new FillNode(getId(), fillPolicy); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNode.java index 46a26cc..53c2cba 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNode.java @@ -34,32 +34,38 @@ import java.util.List; /** The FilterNode is responsible to filter the RowRecord from TsBlock. */ public class FilterNode extends ProcessNode { - private final PlanNode child; + private PlanNode child; private final QueryFilter predicate; - public FilterNode(PlanNodeId id, PlanNode child, QueryFilter predicate) { + public FilterNode(PlanNodeId id, QueryFilter predicate) { super(id); - this.child = child; this.predicate = predicate; } + public FilterNode(PlanNodeId id, PlanNode child, QueryFilter predicate) { + this(id, predicate); + this.child = child; + } + @Override public List<PlanNode> getChildren() { return ImmutableList.of(child); } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { - return null; + return new FilterNode(getId(), predicate); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNullNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNullNode.java index 661d735..9da0c31 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNullNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/FilterNullNode.java @@ -46,14 +46,14 @@ public class FilterNullNode extends ProcessNode { this.child = child; } - public FilterNullNode( - PlanNodeId id, - PlanNode child, - FilterNullPolicy discardPolicy, - List<String> filterNullColumnNames) { + public FilterNullNode(PlanNodeId id, FilterNullPolicy policy) { super(id); + this.discardPolicy = policy; + } + + public FilterNullNode(PlanNodeId id, PlanNode child, FilterNullPolicy discardPolicy, List<String> filterNullColumnNames) { + this(id, discardPolicy); this.child = child; - this.discardPolicy = discardPolicy; this.filterNullColumnNames = filterNullColumnNames; } @@ -63,16 +63,18 @@ public class FilterNullNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { - return null; + return new FilterNullNode(getId(), discardPolicy); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/GroupByLevelNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/GroupByLevelNode.java index ed49bb1..4e7b144 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/GroupByLevelNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/GroupByLevelNode.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanVisitor; import org.apache.iotdb.tsfile.utils.Pair; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -65,16 +66,18 @@ public class GroupByLevelNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + throw new NotImplementedException("addChild of GroupByLevelNode is not implemented"); + } @Override public PlanNode clone() { - return null; + throw new NotImplementedException("Clone of GroupByLevelNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return CHILD_COUNT_NO_LIMIT; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/LimitNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/LimitNode.java index 2b15a0f..5b888d8 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/LimitNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/LimitNode.java @@ -54,7 +54,9 @@ public class LimitNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { @@ -62,10 +64,8 @@ public class LimitNode extends ProcessNode { } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - LimitNode root = (LimitNode) this.clone(); - root.setChild(children.get(0)); - return root; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/OffsetNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/OffsetNode.java index 9f9fd1f..294b6a6 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/OffsetNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/OffsetNode.java @@ -35,31 +35,37 @@ import java.util.List; public class OffsetNode extends ProcessNode { // The limit count - private final PlanNode child; + private PlanNode child; private final int offset; - public OffsetNode(PlanNodeId id, PlanNode child, int offset) { + public OffsetNode(PlanNodeId id, int offset) { super(id); - this.child = child; this.offset = offset; } + public OffsetNode(PlanNodeId id, PlanNode child, int offset) { + this(id, offset); + this.child = child; + } + @Override public List<PlanNode> getChildren() { return null; } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { - return null; + return new OffsetNode(getId(), offset); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/SortNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/SortNode.java index 25a98da..0994d53 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/SortNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/SortNode.java @@ -37,35 +37,41 @@ import java.util.List; */ public class SortNode extends ProcessNode { - private final PlanNode child; + private PlanNode child; private final List<String> orderBy; private OrderBy sortOrder; - public SortNode(PlanNodeId id, PlanNode child, List<String> orderBy, OrderBy sortOrder) { + public SortNode(PlanNodeId id, List<String> orderBy, OrderBy sortOrder) { super(id); - this.child = child; this.orderBy = orderBy; this.sortOrder = sortOrder; } + public SortNode(PlanNodeId id, PlanNode child, List<String> orderBy, OrderBy sortOrder) { + this(id, orderBy, sortOrder); + this.child = child; + } + @Override public List<PlanNode> getChildren() { return ImmutableList.of(child); } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { - return null; + return new SortNode(getId(), orderBy, sortOrder); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/TimeJoinNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/TimeJoinNode.java index cb40125..67e874e 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/TimeJoinNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/process/TimeJoinNode.java @@ -73,19 +73,14 @@ public class TimeJoinNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} - - @Override public PlanNode clone() { return new TimeJoinNode( PlanNodeIdAllocator.generateId(), this.mergeOrder, this.filterNullPolicy); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - TimeJoinNode node = (TimeJoinNode) this.clone(); - node.setChildren(children); - return node; + public int allowedChildCount() { + return CHILD_COUNT_NO_LIMIT; } @Override @@ -107,6 +102,7 @@ public class TimeJoinNode extends ProcessNode { @Override public void serialize(ByteBuffer byteBuffer) {} + @Override public void addChild(PlanNode child) { this.children.add(child); } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/CsvSinkNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/CsvSinkNode.java deleted file mode 100644 index 78cbc7a..0000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/CsvSinkNode.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.sql.planner.plan.node.sink; - -import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; -import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; - -import java.nio.ByteBuffer; -import java.util.List; - -public class CsvSinkNode extends SinkNode { - public CsvSinkNode(PlanNodeId id) { - super(id); - } - - @Override - public List<PlanNode> getChildren() { - return null; - } - - @Override - public void addChildren(PlanNode child) {} - - @Override - public PlanNode clone() { - return null; - } - - @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; - } - - @Override - public List<String> getOutputColumnNames() { - return null; - } - - public static CsvSinkNode deserialize(ByteBuffer byteBuffer) { - return null; - } - - @Override - public void serialize(ByteBuffer byteBuffer) {} - - @Override - public void close() throws Exception {} - - @Override - public void send() {} -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java index aeb129f..0189e82 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/FragmentSinkNode.java @@ -48,7 +48,9 @@ public class FragmentSinkNode extends SinkNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { @@ -59,15 +61,8 @@ public class FragmentSinkNode extends SinkNode { } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - Validate.isTrue( - children == null || children.size() == 1, - "Children size of FragmentSinkNode should be 0 or 1"); - FragmentSinkNode sinkNode = (FragmentSinkNode) clone(); - if (children != null) { - sinkNode.setChild(children.get(0)); - } - return sinkNode; + public int allowedChildCount() { + return ONE_CHILD; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/ThriftSinkNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/ThriftSinkNode.java deleted file mode 100644 index 173ed11..0000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/sink/ThriftSinkNode.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.sql.planner.plan.node.sink; - -import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; -import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; - -import java.nio.ByteBuffer; -import java.util.List; - -/** not implemented in current IoTDB yet */ -public class ThriftSinkNode extends SinkNode { - - public ThriftSinkNode(PlanNodeId id) { - super(id); - } - - @Override - public List<PlanNode> getChildren() { - return null; - } - - @Override - public void addChildren(PlanNode child) {} - - @Override - public PlanNode clone() { - return null; - } - - @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; - } - - @Override - public List<String> getOutputColumnNames() { - return null; - } - - public static ThriftSinkNode deserialize(ByteBuffer byteBuffer) { - return null; - } - - @Override - public void serialize(ByteBuffer byteBuffer) {} - - @Override - public void close() throws Exception {} - - @Override - public void send() {} -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/CsvSourceNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/CsvSourceNode.java deleted file mode 100644 index 17d8be3..0000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/CsvSourceNode.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.mpp.sql.planner.plan.node.source; - -import org.apache.iotdb.commons.partition.DataRegionReplicaSet; -import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; -import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; - -import java.nio.ByteBuffer; -import java.util.List; - -/** Not implemented in current version. */ -public class CsvSourceNode extends SourceNode { - - public CsvSourceNode(PlanNodeId id) { - super(id); - } - - @Override - public List<PlanNode> getChildren() { - return null; - } - - @Override - public void addChildren(PlanNode child) {} - - @Override - public PlanNode clone() { - return null; - } - - @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; - } - - @Override - public List<String> getOutputColumnNames() { - return null; - } - - public static CsvSourceNode deserialize(ByteBuffer byteBuffer) { - return null; - } - - @Override - public void serialize(ByteBuffer byteBuffer) {} - - @Override - public void close() throws Exception {} - - @Override - public void open() throws Exception {} - - @Override - public DataRegionReplicaSet getDataRegionReplicaSet() { - throw new UnsupportedOperationException(); - } - - @Override - public void setDataRegionReplicaSet(DataRegionReplicaSet dataRegionReplicaSet) { - throw new UnsupportedOperationException(); - } - - @Override - public String getDeviceName() { - throw new UnsupportedOperationException(); - } - - @Override - protected String getExpressionString() { - throw new UnsupportedOperationException(); - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesAggregateScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesAggregateScanNode.java index e9414ef..fa2009d 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesAggregateScanNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesAggregateScanNode.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.query.expression.unary.FunctionExpression; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.read.filter.basic.Filter; import org.apache.iotdb.tsfile.utils.Pair; @@ -77,16 +78,16 @@ public class SeriesAggregateScanNode extends SourceNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("clone of SeriesAggregateScanNode is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesScanNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesScanNode.java index d4d54e6..c5bb958 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesScanNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/SeriesScanNode.java @@ -142,7 +142,7 @@ public class SeriesScanNode extends SourceNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { @@ -150,8 +150,8 @@ public class SeriesScanNode extends SourceNode { } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return this.clone(); + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertMultiTabletNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertMultiTabletNode.java index 5fea515..48bd2f8 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertMultiTabletNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertMultiTabletNode.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.write; import org.apache.iotdb.db.mpp.sql.analyze.Analysis; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -42,16 +43,16 @@ public class InsertMultiTabletNode extends InsertNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("clone of Insert is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowNode.java index 585000c..e881ff1 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowNode.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.write; import org.apache.iotdb.db.mpp.sql.analyze.Analysis; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -42,16 +43,16 @@ public class InsertRowNode extends InsertNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("clone of Insert is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsNode.java index d061de6..1f3b6c1 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsNode.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.write; import org.apache.iotdb.db.mpp.sql.analyze.Analysis; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -37,16 +38,16 @@ public class InsertRowsNode extends InsertNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("clone of Insert is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsOfOneDeviceNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsOfOneDeviceNode.java index 34b6e79..0c8d78f 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsOfOneDeviceNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertRowsOfOneDeviceNode.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.write; import org.apache.iotdb.db.mpp.sql.analyze.Analysis; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -37,16 +38,16 @@ public class InsertRowsOfOneDeviceNode extends InsertNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("clone of Insert is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertTabletNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertTabletNode.java index f9decf4..f1e4744 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertTabletNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/write/InsertTabletNode.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.write; import org.apache.iotdb.db.mpp.sql.analyze.Analysis; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; +import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.utils.BitMap; import java.nio.ByteBuffer; @@ -56,16 +57,16 @@ public class InsertTabletNode extends InsertNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { - return null; + throw new NotImplementedException("clone of Insert is not implemented"); } @Override - public PlanNode cloneWithChildren(List<PlanNode> children) { - return null; + public int allowedChildCount() { + return NO_CHILD_ALLOWED; } @Override
