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

Wei-hao-Li pushed a commit to branch mvTableScanNode
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 003ed8ff39880087b278f5dd0f9aa8ccfb0bad01
Author: Weihao Li <[email protected]>
AuthorDate: Sat May 9 16:06:41 2026 +0800

    fix
    
    Signed-off-by: Weihao Li <[email protected]>
---
 .../plan/relational/metadata/QualifiedObjectName.java  | 18 ++++++++++++------
 .../plan/relational/planner/node/TableScanNode.java    | 18 +++---------------
 .../optimizations/PushAggregationIntoTableScan.java    | 16 +++++++++++++++-
 3 files changed, 30 insertions(+), 22 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
similarity index 88%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
rename to 
iotdb-core/calc-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
index 76446cdf648..8082d759eff 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
+++ 
b/iotdb-core/calc-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/QualifiedObjectName.java
@@ -21,13 +21,13 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.metadata;
 
 import com.google.errorprone.annotations.Immutable;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
-import static 
org.apache.iotdb.db.queryengine.plan.relational.metadata.MetadataUtil.checkObjectName;
 
 @Immutable
 public class QualifiedObjectName {
@@ -50,7 +50,8 @@ public class QualifiedObjectName {
   private final String objectName;
 
   public QualifiedObjectName(String dbName, String objectName) {
-    checkObjectName(dbName, objectName);
+    checkLowerCase(dbName, "dbName");
+    checkLowerCase(objectName, "objectName");
     this.dbName = dbName;
     this.objectName = objectName;
   }
@@ -63,10 +64,6 @@ public class QualifiedObjectName {
     return objectName;
   }
 
-  public QualifiedTablePrefix asQualifiedTablePrefix() {
-    return new QualifiedTablePrefix(dbName, objectName);
-  }
-
   @Override
   public boolean equals(Object obj) {
     if (obj == this) {
@@ -103,4 +100,13 @@ public class QualifiedObjectName {
     }
     return "\"" + name.replace("\"", "\"\"") + "\"";
   }
+
+  private static String checkLowerCase(String value, String name) {
+    if (value == null) {
+      throw new NullPointerException(String.format("%s is null", name));
+    }
+    checkArgument(
+        value.equals(value.toLowerCase(Locale.ENGLISH)), "%s is not lowercase: 
%s", name, value);
+    return value;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
 
b/iotdb-core/calc-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/calc-commons/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
index 79ed9dd09f7..c9ac4107de5 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
+++ 
b/iotdb-core/calc-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).visitSourceNode(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> getIdColumnsInTableStore(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
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 99a3aca6c5a..1f0ae3363f5 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.getIdColumnsInTableStore(metadata, 
session))) {
+              .containsAll(getIdColumnsInTableStore(tableScanNode, metadata, 
session))) {
         // If all ID 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> getIdColumnsInTableStore(
+        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,

Reply via email to