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;
+ }
}