This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch ty/getNullSegment in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 1bc290bb26ae947c596cd8906238209306a4718c Author: JackieTien97 <[email protected]> AuthorDate: Fri Aug 2 09:48:55 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)); }
