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

Reply via email to