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

caogaofei pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/ty/TableModelGrammar by this 
push:
     new 445056239cf add more attribute for TableScanNode, such as scanOrder, 
pushDownPredicate, pushDownLimit, pushDownOffset, etc
     new 5c95c5843a3 Merge branch 'ty/TableModelGrammar' of 
github.com:apache/iotdb into ty/TableModelGrammar
445056239cf is described below

commit 445056239cf271ff861f42388c3b7f6fa3a38b8f
Author: Beyyes <[email protected]>
AuthorDate: Tue Apr 16 11:38:48 2024 +0800

    add more attribute for TableScanNode, such as scanOrder, pushDownPredicate, 
pushDownLimit, pushDownOffset, etc
---
 .../plan/relational/planner/QueryPlanner.java      |  8 +---
 .../relational/planner/node/TableScanNode.java     | 50 ++++++++++++++++++++++
 2 files changed, 52 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
index c92fbdaa66c..616a7c5c2c1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
@@ -112,16 +112,12 @@ public class QueryPlanner {
 
     builder = filter(builder, analysis.getWhere(node), node);
 
-    // TODO prcess aggregate, having later
-
     List<Analysis.SelectExpression> selectExpressions = 
analysis.getSelectExpressions(node);
     List<Expression> expressions =
         selectExpressions.stream()
             .map(Analysis.SelectExpression::getExpression)
             .collect(toImmutableList());
 
-    // TODO process subQuery later
-
     if (hasExpressionsToUnfold(selectExpressions)) {
       // pre-project the folded expressions to preserve any non-deterministic 
semantics of functions
       // that might be referenced
@@ -167,8 +163,6 @@ public class QueryPlanner {
               Iterables.concat(orderBy, outputs), analysis, symbolAllocator, 
idAllocator);
     }
 
-    // TODO handle distinct
-
     Optional<OrderingScheme> orderingScheme =
         orderingScheme(builder, node.getOrderBy(), 
analysis.getOrderByExpressions(node));
     builder = sort(builder, orderingScheme);
@@ -178,6 +172,8 @@ public class QueryPlanner {
 
     return new RelationPlan(
         builder.getRoot(), analysis.getScope(node), computeOutputs(builder, 
outputs));
+
+    // TODO handle aggregate, having, distinct, subQuery later
   }
 
   private static boolean 
hasExpressionsToUnfold(List<Analysis.SelectExpression> selectExpressions) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
index 0f8e3290bfe..7af35991103 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
@@ -1,11 +1,16 @@
 package org.apache.iotdb.db.queryengine.plan.relational.planner.node;
 
+import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
+import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
+import org.apache.iotdb.db.relational.sql.tree.Expression;
+
+import javax.annotation.Nullable;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -23,6 +28,23 @@ public class TableScanNode extends PlanNode {
   private List<DeviceEntry> deviceEntries;
   private Map<Symbol, Integer> attributesMap;
 
+  // The order to traverse the data.
+  // Currently, we only support TIMESTAMP_ASC and TIMESTAMP_DESC here.
+  // The default order is TIMESTAMP_ASC, which means "order by timestamp asc"
+  private Ordering scanOrder = Ordering.ASC;
+
+  // push down predicate for current series, could be null if it doesn't exist
+  @Nullable private Expression pushDownPredicate;
+
+  // push down limit for result set. The default value is -1, which means no 
limit
+  private long pushDownLimit;
+
+  // push down offset for result set. The default value is 0
+  private long pushDownOffset;
+
+  // The id of DataRegion where the node will run
+  private TRegionReplicaSet regionReplicaSet;
+
   public TableScanNode(
       PlanNodeId id,
       String qualifiedTableName,
@@ -72,4 +94,32 @@ public class TableScanNode extends PlanNode {
   public List<Symbol> getOutputSymbols() {
     return outputSymbols;
   }
+
+  public String getQualifiedTableName() {
+    return this.qualifiedTableName;
+  }
+
+  public Map<Symbol, ColumnSchema> getAssignments() {
+    return this.assignments;
+  }
+
+  public Ordering getScanOrder() {
+    return this.scanOrder;
+  }
+
+  public Expression getPushDownPredicate() {
+    return this.pushDownPredicate;
+  }
+
+  public long getPushDownLimit() {
+    return this.pushDownLimit;
+  }
+
+  public long getPushDownOffset() {
+    return this.pushDownOffset;
+  }
+
+  public TRegionReplicaSet getRegionReplicaSet() {
+    return this.regionReplicaSet;
+  }
 }

Reply via email to