You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/07/04 10:55:02 UTC

[iotdb] branch master updated: Add scanOrder in FillNode

This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new ccf895a20e Add scanOrder in FillNode
ccf895a20e is described below

commit ccf895a20e66965739e9ce1a16a5f4f72310a46b
Author: liuminghui233 <36...@users.noreply.github.com>
AuthorDate: Mon Jul 4 18:54:55 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);