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 ec819b53077088a526be1acdb695cd132165d7a2 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 | 21 ++++-- .../planner/plan/node/process/ExchangeNode.java | 14 ++-- .../sql/planner/plan/node/process/FillNode.java | 20 +++--- .../sql/planner/plan/node/process/FilterNode.java | 20 ++++-- .../planner/plan/node/process/FilterNullNode.java | 15 ++-- .../plan/node/process/GroupByLevelNode.java | 11 +-- .../sql/planner/plan/node/process/LimitNode.java | 10 +-- .../sql/planner/plan/node/process/OffsetNode.java | 21 ++++-- .../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 | 80 ---------------------- .../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, 191 insertions(+), 337 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 96dc317..68300eb 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 @@ -25,6 +25,7 @@ import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.mpp.sql.statement.component.OrderBy; import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -57,6 +58,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 @@ -65,16 +72,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 @@ -104,4 +113,8 @@ public class DeviceMergeNode extends ProcessNode { this.childDeviceNodeMap.put(deviceName, childNode); this.children.add(childNode); } + + 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 99a2718..cd37d77 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 @@ -18,6 +18,7 @@ */ package org.apache.iotdb.db.mpp.sql.planner.plan.node.process; +import org.apache.commons.lang.Validate; import org.apache.iotdb.db.mpp.common.FillPolicy; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.sql.planner.plan.node.PlanNodeId; @@ -40,22 +41,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 @@ -75,8 +83,4 @@ public class FillNode extends ProcessNode { @Override public void serialize(ByteBuffer byteBuffer) {} - public FillNode(PlanNodeId id, FillPolicy fillPolicy) { - this(id); - this.fillPolicy = fillPolicy; - } } 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 123948e..f6c7202 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 @@ -31,33 +31,39 @@ 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; // TODO we need to rename it to something like expression in order to distinguish from Operator // class private final FilterOperator predicate; - public FilterNode(PlanNodeId id, PlanNode child, FilterOperator predicate) { + public FilterNode(PlanNodeId id, FilterOperator predicate) { super(id); - this.child = child; this.predicate = predicate; } + public FilterNode(PlanNodeId id, PlanNode child, FilterOperator 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 c51cecb..e856f2c 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 @@ -43,6 +43,11 @@ public class FilterNullNode extends ProcessNode { this.child = child; } + public FilterNullNode(PlanNodeId id, FilterNullPolicy policy) { + super(id); + this.discardPolicy = policy; + } + public FilterNullNode(PlanNodeId id, PlanNode child, List<String> filterNullColumnNames) { super(id); this.child = child; @@ -55,16 +60,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 a8a3629..b48470f 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 @@ -21,6 +21,7 @@ package org.apache.iotdb.db.mpp.sql.planner.plan.node.process; 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.exception.NotImplementedException; import java.nio.ByteBuffer; import java.util.List; @@ -57,16 +58,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 0771572..42ad60e 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 @@ -51,7 +51,9 @@ public class LimitNode extends ProcessNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) { + this.child = child; + } @Override public PlanNode clone() { @@ -59,10 +61,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 734c0d9..c33814a 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 @@ -18,6 +18,7 @@ */ package org.apache.iotdb.db.mpp.sql.planner.plan.node.process; +import com.sun.scenario.effect.Offset; 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; @@ -32,31 +33,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 c3073d4..893a289 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 @@ -34,35 +34,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 a0ec54e..d38cb58 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 @@ -71,19 +71,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 @@ -105,6 +100,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 e28c4d1..0000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/node/source/CsvSourceNode.java +++ /dev/null @@ -1,80 +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(); - } -} 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 0a45487d..4ee5e28 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 @@ -24,6 +24,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 com.google.common.collect.ImmutableList; @@ -74,16 +75,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 cd33b51..3ffaf23 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 @@ -117,7 +117,7 @@ public class SeriesScanNode extends SourceNode { } @Override - public void addChildren(PlanNode child) {} + public void addChild(PlanNode child) {} @Override public PlanNode clone() { @@ -125,8 +125,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
