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

jackietien 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 6ade33a6b9a Support getting tailing null from DeviceEntry
6ade33a6b9a is described below

commit 6ade33a6b9a90820d0f2d536d81136b4af6a98c7
Author: Jackie Tien <[email protected]>
AuthorDate: Fri Aug 2 13:58:48 2024 +0800

    Support getting tailing null from DeviceEntry
---
 .../execution/operator/source/relational/TableScanOperator.java    | 2 +-
 .../iotdb/db/queryengine/plan/relational/metadata/DeviceEntry.java | 6 ++++++
 .../relational/metadata/fetcher/DeviceInCacheFilterVisitor.java    | 7 +------
 .../planner/distribute/TableDistributedPlanGenerator.java          | 2 +-
 4 files changed, 9 insertions(+), 8 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
index 3d340e09d31..90982549716 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
@@ -210,7 +210,7 @@ public class TableScanOperator extends 
AbstractSeriesScanOperator {
         case ID:
           // +1 for skip the table name segment
           String idColumnValue =
-              (String) 
currentDeviceEntry.getDeviceID().segment(columnsIndexArray[i] + 1);
+              (String) currentDeviceEntry.getNthSegment(columnsIndexArray[i] + 
1);
           valueColumns[i] = getIdOrAttributeValueColumn(idColumnValue, 
positionCount);
           break;
         case ATTRIBUTE:
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/DeviceEntry.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/DeviceEntry.java
index 8eba1ba4f17..f8b94bee52a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/DeviceEntry.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/DeviceEntry.java
@@ -48,6 +48,12 @@ public class DeviceEntry implements Accountable {
     return deviceID;
   }
 
+  // if segmentIndex >= deviceID.segmentNum(), just return null, because we 
already trimmed tailing
+  // null in DeviceID
+  public Object getNthSegment(int segmentIndex) {
+    return segmentIndex < deviceID.segmentNum() ? 
deviceID.segment(segmentIndex) : null;
+  }
+
   public List<String> getAttributeColumnValues() {
     return attributeColumnValues;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/DeviceInCacheFilterVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/DeviceInCacheFilterVisitor.java
index f812b087302..479669b0573 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/DeviceInCacheFilterVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/DeviceInCacheFilterVisitor.java
@@ -26,8 +26,6 @@ import 
org.apache.iotdb.commons.schema.filter.impl.singlechild.AttributeFilter;
 import org.apache.iotdb.commons.schema.filter.impl.singlechild.IdFilter;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry;
 
-import org.apache.tsfile.file.metadata.IDeviceID;
-
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -50,15 +48,12 @@ public class DeviceInCacheFilterVisitor extends 
SchemaFilterVisitor<DeviceEntry>
 
   @Override
   public boolean visitIdFilter(final IdFilter filter, final DeviceEntry 
deviceEntry) {
-    final IDeviceID deviceID = deviceEntry.getDeviceID();
     // The first segment is "tableName", skip it
     final int index = filter.getIndex() + 1;
     // If index out of array bound, means that value will be null
     return filter
         .getChild()
-        .accept(
-            StringValueFilterVisitor.getInstance(),
-            deviceID.segmentNum() <= index ? null : (String) 
deviceID.segment(index));
+        .accept(StringValueFilterVisitor.getInstance(), (String) 
deviceEntry.getNthSegment(index));
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
index bcd5aa96dc6..cfecdae1a85 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
@@ -437,7 +437,7 @@ public class TableDistributedPlanGenerator
       if (tableScanNode.getAssignments().get(symbol).getColumnCategory()
           == TsTableColumnCategory.ID) {
         // segments[0] is always tableName
-        orderingRules.add(deviceEntry -> (String) 
deviceEntry.getDeviceID().getSegments()[idx + 1]);
+        orderingRules.add(deviceEntry -> (String) 
deviceEntry.getNthSegment(idx + 1));
       } else {
         orderingRules.add(deviceEntry -> 
deviceEntry.getAttributeColumnValues().get(idx));
       }

Reply via email to