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));
}