This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/ModifyfillNode in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit ab578606e221376d2bff92ee1e036873e77987e0 Author: Minghui Liu <[email protected]> AuthorDate: Mon Jul 4 15:55:23 2022 +0800 add scanOrder in FillNode --- .../db/mpp/plan/planner/LogicalPlanBuilder.java | 6 +++-- .../iotdb/db/mpp/plan/planner/LogicalPlanner.java | 2 +- .../plan/planner/plan/node/process/FillNode.java | 31 +++++++++++++++------- .../plan/plan/node/process/FillNodeSerdeTest.java | 3 ++- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java index b90a5d738a..2eb94df12f 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java @@ -634,12 +634,14 @@ public class LogicalPlanBuilder { return this; } - public LogicalPlanBuilder planFill(FillDescriptor fillDescriptor) { + public LogicalPlanBuilder planFill(FillDescriptor fillDescriptor, OrderBy scanOrder) { if (fillDescriptor == null) { return this; } - this.root = new FillNode(context.getQueryId().genPlanNodeId(), this.getRoot(), fillDescriptor); + this.root = + new FillNode( + context.getQueryId().genPlanNodeId(), this.getRoot(), fillDescriptor, scanOrder); return this; } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanner.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanner.java index 55478b8235..f0b083aa7f 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanner.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanner.java @@ -170,7 +170,7 @@ public class LogicalPlanner { planBuilder = planBuilder .planFilterNull(analysis.getFilterNullParameter()) - .planFill(analysis.getFillDescriptor()) + .planFill(analysis.getFillDescriptor(), queryStatement.getResultOrder()) .planOffset(queryStatement.getRowOffset()) .planLimit(queryStatement.getRowLimit()); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FillNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FillNode.java index c9111d4f25..d5a7fce186 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FillNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FillNode.java @@ -23,6 +23,8 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FillDescriptor; +import org.apache.iotdb.db.mpp.plan.statement.component.OrderBy; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import com.google.common.collect.ImmutableList; @@ -38,19 +40,22 @@ public class FillNode extends ProcessNode { // descriptions of how null values are filled private FillDescriptor fillDescriptor; + private OrderBy scanOrder; + private PlanNode child; public FillNode(PlanNodeId id) { super(id); } - public FillNode(PlanNodeId id, FillDescriptor fillDescriptor) { + public FillNode(PlanNodeId id, FillDescriptor fillDescriptor, OrderBy scanOrder) { this(id); this.fillDescriptor = fillDescriptor; + this.scanOrder = scanOrder; } - public FillNode(PlanNodeId id, PlanNode child, FillDescriptor fillDescriptor) { - this(id, fillDescriptor); + public FillNode(PlanNodeId id, PlanNode child, FillDescriptor fillDescriptor, OrderBy scanOrder) { + this(id, fillDescriptor, scanOrder); this.child = child; } @@ -75,7 +80,7 @@ public class FillNode extends ProcessNode { @Override public PlanNode clone() { - return new FillNode(getPlanNodeId(), fillDescriptor); + return new FillNode(getPlanNodeId(), fillDescriptor, scanOrder); } @Override @@ -92,18 +97,21 @@ public class FillNode extends ProcessNode { protected void serializeAttributes(ByteBuffer byteBuffer) { PlanNodeType.FILL.serialize(byteBuffer); fillDescriptor.serialize(byteBuffer); + ReadWriteIOUtils.write(scanOrder.ordinal(), byteBuffer); } @Override protected void serializeAttributes(DataOutputStream stream) throws IOException { PlanNodeType.FILL.serialize(stream); fillDescriptor.serialize(stream); + ReadWriteIOUtils.write(scanOrder.ordinal(), stream); } public static FillNode deserialize(ByteBuffer byteBuffer) { FillDescriptor fillDescriptor = FillDescriptor.deserialize(byteBuffer); + OrderBy scanOrder = OrderBy.values()[ReadWriteIOUtils.readInt(byteBuffer)]; PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer); - return new FillNode(planNodeId, fillDescriptor); + return new FillNode(planNodeId, fillDescriptor, scanOrder); } @Override @@ -117,17 +125,22 @@ public class FillNode extends ProcessNode { if (!super.equals(o)) { return false; } - FillNode fillNode = (FillNode) o; - return Objects.equals(fillDescriptor, fillNode.fillDescriptor) - && Objects.equals(child, fillNode.child); + FillNode that = (FillNode) o; + return Objects.equals(fillDescriptor, that.fillDescriptor) + && Objects.equals(child, that.child) + && scanOrder == that.scanOrder; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), fillDescriptor, child); + return Objects.hash(super.hashCode(), fillDescriptor, child, scanOrder); } public FillDescriptor getFillDescriptor() { return fillDescriptor; } + + public OrderBy getScanOrder() { + return scanOrder; + } } diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FillNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FillNodeSerdeTest.java index 84f7605d88..4c984e0dd1 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FillNodeSerdeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FillNodeSerdeTest.java @@ -44,7 +44,8 @@ public class FillNodeSerdeTest { new FillNode( new PlanNodeId("TestFillNode"), timeJoinNode, - new FillDescriptor(FillPolicy.VALUE, new LongLiteral("100"))); + new FillDescriptor(FillPolicy.VALUE, new LongLiteral("100")), + OrderBy.TIMESTAMP_ASC); ByteBuffer byteBuffer = ByteBuffer.allocate(1024); fillNode.serialize(byteBuffer);
