This is an automated email from the ASF dual-hosted git repository.
JackieTien97 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 487b7cd3a31 Move TableScaNode to node-commons (#17627)
487b7cd3a31 is described below
commit 487b7cd3a3149da3845cb2f1d02a6f54f8e44105
Author: Weihao Li <[email protected]>
AuthorDate: Mon May 11 15:17:28 2026 +0800
Move TableScaNode to node-commons (#17627)
---
.../plan/planner/plan/node/PlanVisitor.java | 5 ---
.../PushAggregationIntoTableScan.java | 16 ++++++-
.../planner/plan/node/ICoreQueryPlanVisitor.java | 5 +++
.../plan/relational/metadata/MetadataUtil.java | 52 ----------------------
.../relational/metadata/QualifiedObjectName.java | 4 --
.../relational/planner/node/TableScanNode.java | 18 ++------
6 files changed, 23 insertions(+), 77 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
index 93ded06e49a..54ee9d17a94 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
@@ -126,7 +126,6 @@ import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CteScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.InformationSchemaTableScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.NonAlignedAggregationTreeDeviceViewScanNode;
-import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TreeAlignedDeviceViewScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TreeDeviceViewScanNode;
import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TreeNonAlignedDeviceViewScanNode;
@@ -646,10 +645,6 @@ public interface PlanVisitor<R, C> extends
ICoreQueryPlanVisitor<R, C> {
// =============================== Used for Table Model
====================================
- default R visitTableScan(TableScanNode node, C context) {
- return visitPlan(node, context);
- }
-
default R visitDeviceTableScan(DeviceTableScanNode node, C context) {
return visitTableScan(node, context);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushAggregationIntoTableScan.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushAggregationIntoTableScan.java
index 0b52844179c..30ed96dd7a9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushAggregationIntoTableScan.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushAggregationIntoTableScan.java
@@ -42,7 +42,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import static
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.TAG;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode.combineAggregationAndTableScan;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.Util.split;
@@ -190,7 +193,7 @@ public class PushAggregationIntoTableScan implements
PlanOptimizer {
return PushDownLevel.NOOP;
} else if (singleDeviceEntry
|| ImmutableSet.copyOf(groupingKeys)
- .containsAll(tableScanNode.getTagColumnsInTableStore(metadata,
session))) {
+ .containsAll(getTagColumnsInTableStore(tableScanNode, metadata,
session))) {
// If all tag columns appear in groupingKeys and no Measurement column
appears, we can push
// down completely.
return PushDownLevel.COMPLETE;
@@ -199,6 +202,17 @@ public class PushAggregationIntoTableScan implements
PlanOptimizer {
}
}
+ private List<Symbol> getTagColumnsInTableStore(
+ DeviceTableScanNode tableScanNode, Metadata metadata, SessionInfo
session) {
+ return Objects.requireNonNull(
+ metadata.getTableSchema(session,
tableScanNode.getQualifiedObjectName()).orElse(null))
+ .getColumns()
+ .stream()
+ .filter(columnSchema -> columnSchema.getColumnCategory() == TAG)
+ .map(columnSchema -> Symbol.of(columnSchema.getName()))
+ .collect(Collectors.toList());
+ }
+
private boolean isDateBinFunctionOfTime(
Expression expression,
List<FunctionCall> dateBinFunctionsOfTime,
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/planner/plan/node/ICoreQueryPlanVisitor.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/planner/plan/node/ICoreQueryPlanVisitor.java
index 3cab75faf1f..788fe613b61 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/planner/plan/node/ICoreQueryPlanVisitor.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/queryengine/plan/planner/plan/node/ICoreQueryPlanVisitor.java
@@ -58,6 +58,7 @@ import
org.apache.iotdb.commons.queryengine.plan.relational.planner.node.UnionNo
import
org.apache.iotdb.commons.queryengine.plan.relational.planner.node.ValueFillNode;
import
org.apache.iotdb.commons.queryengine.plan.relational.planner.node.ValuesNode;
import
org.apache.iotdb.commons.queryengine.plan.relational.planner.node.WindowNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
public interface ICoreQueryPlanVisitor<R, C> extends IPlanVisitor<R, C> {
@@ -90,6 +91,10 @@ public interface ICoreQueryPlanVisitor<R, C> extends
IPlanVisitor<R, C> {
}
// =============================== Used for Table Model
====================================
+ default R visitTableScan(TableScanNode node, C context) {
+ return visitPlan(node, context);
+ }
+
default R visitFilter(FilterNode node, C context) {
return visitSingleChildProcess(node, context);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
similarity index 62%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
rename to
iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
index 41d1bcb172e..a1a309ea8f7 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/MetadataUtil.java
@@ -21,13 +21,9 @@ package
org.apache.iotdb.db.queryengine.plan.relational.metadata;
import org.apache.iotdb.commons.exception.SemanticException;
import org.apache.iotdb.commons.queryengine.common.SessionInfo;
-import
org.apache.iotdb.commons.queryengine.plan.relational.metadata.ColumnMetadata;
import
org.apache.iotdb.commons.queryengine.plan.relational.sql.ast.QualifiedName;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
-import org.apache.tsfile.read.common.type.Type;
import java.util.List;
import java.util.Optional;
@@ -88,52 +84,4 @@ public class MetadataUtil {
return new QualifiedObjectName(databaseName, objectName);
}
-
- public static boolean tableExists(Metadata metadata, SessionInfo session,
String table) {
- if (!session.getDatabaseName().isPresent()) {
- return false;
- }
- QualifiedObjectName name = new
QualifiedObjectName(session.getDatabaseName().get(), table);
- return metadata.tableExists(name);
- }
-
- public static class TableMetadataBuilder {
- public static TableMetadataBuilder tableMetadataBuilder(String tableName) {
- return new TableMetadataBuilder(tableName);
- }
-
- private final String tableName;
- private final ImmutableList.Builder<ColumnMetadata> columns =
ImmutableList.builder();
- private final ImmutableMap.Builder<String, Object> properties =
ImmutableMap.builder();
- private final Optional<String> comment;
-
- private TableMetadataBuilder(String tableName) {
- this(tableName, Optional.empty());
- }
-
- private TableMetadataBuilder(String tableName, Optional<String> comment) {
- this.tableName = tableName;
- this.comment = comment;
- }
-
- public TableMetadataBuilder column(String columnName, Type type) {
- columns.add(new ColumnMetadata(columnName, type));
- return this;
- }
-
- public TableMetadataBuilder hiddenColumn(String columnName, Type type) {
- columns.add(
-
ColumnMetadata.builder().setName(columnName).setType(type).setHidden(true).build());
- return this;
- }
-
- public TableMetadataBuilder property(String name, Object value) {
- properties.put(name, value);
- return this;
- }
-
- public TableMetadata build() {
- return new TableMetadata(tableName, columns.build(),
properties.buildOrThrow(), comment);
- }
- }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
similarity index 96%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
rename to
iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
index 76446cdf648..8aa99e10126 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
@@ -63,10 +63,6 @@ public class QualifiedObjectName {
return objectName;
}
- public QualifiedTablePrefix asQualifiedTablePrefix() {
- return new QualifiedTablePrefix(dbName, objectName);
- }
-
@Override
public boolean equals(Object obj) {
if (obj == this) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
similarity index 93%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
rename to
iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
index 1bc50ee179b..9a2c6a665be 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
@@ -20,7 +20,7 @@
package org.apache.iotdb.db.queryengine.plan.relational.planner.node;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
-import org.apache.iotdb.commons.queryengine.common.SessionInfo;
+import
org.apache.iotdb.commons.queryengine.plan.planner.plan.node.ICoreQueryPlanVisitor;
import
org.apache.iotdb.commons.queryengine.plan.planner.plan.node.IPlanVisitor;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.commons.queryengine.plan.planner.plan.node.PlanNodeId;
@@ -28,9 +28,6 @@ import
org.apache.iotdb.commons.queryengine.plan.planner.plan.node.source.Source
import
org.apache.iotdb.commons.queryengine.plan.relational.metadata.ColumnSchema;
import org.apache.iotdb.commons.queryengine.plan.relational.planner.Symbol;
import org.apache.iotdb.commons.queryengine.plan.relational.sql.ast.Expression;
-import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
-import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
import
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
import com.google.common.collect.ImmutableList;
@@ -107,8 +104,9 @@ public abstract class TableScanNode extends SourceNode {
protected TableScanNode() {}
@Override
+ @SuppressWarnings("unchecked")
public <R, C> R accept(IPlanVisitor<R, C> visitor, C context) {
- return ((PlanVisitor<R, C>) visitor).visitTableScan(this, context);
+ return ((ICoreQueryPlanVisitor<R, C>) visitor).visitTableScan(this,
context);
}
@Override
@@ -129,16 +127,6 @@ public abstract class TableScanNode extends SourceNode {
return
outputSymbols.stream().map(Symbol::getName).collect(Collectors.toList());
}
- public List<Symbol> getTagColumnsInTableStore(Metadata metadata, SessionInfo
session) {
- return Objects.requireNonNull(
- metadata.getTableSchema(session, qualifiedObjectName).orElse(null))
- .getColumns()
- .stream()
- .filter(columnSchema -> columnSchema.getColumnCategory() ==
TsTableColumnCategory.TAG)
- .map(columnSchema -> Symbol.of(columnSchema.getName()))
- .collect(Collectors.toList());
- }
-
public boolean isMeasurementOrTimeColumn(Symbol symbol) {
ColumnSchema columnSchema = assignments.get(symbol);
return columnSchema != null