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

jackietien 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 8f15cceca31 Refactor DeviceEntry's attributeValues from List<Binary> 
to Binary[] to reduce the cost of ramBytesUsed()
8f15cceca31 is described below

commit 8f15cceca31485c94beadc6044d862a8d8705115
Author: Caideyipi <[email protected]>
AuthorDate: Sat Mar 15 21:36:54 2025 +0800

    Refactor DeviceEntry's attributeValues from List<Binary> to Binary[] to 
reduce the cost of ramBytesUsed()
---
 .../relational/AbstractAggTableScanOperator.java   | 17 +++----
 .../relational/AbstractTableScanOperator.java      |  2 +-
 .../relational/LastQueryAggTableScanOperator.java  |  6 +--
 .../relational/metadata/AlignedDeviceEntry.java    | 20 ++------
 .../plan/relational/metadata/DeviceEntry.java      | 26 +++++------
 .../metadata/NonAlignedAlignedDeviceEntry.java     | 20 ++------
 .../fetcher/DeviceInCacheFilterVisitor.java        |  4 +-
 .../metadata/fetcher/TableDeviceSchemaFetcher.java |  5 +-
 .../distribute/TableDistributedPlanGenerator.java  |  8 ++--
 .../read/resp/info/impl/ShowDevicesResult.java     |  2 +-
 .../analyzer/MockTableModelDataPartition.java      | 54 ++++++++++++----------
 .../plan/relational/analyzer/TSBSMetadata.java     | 22 ++++-----
 .../plan/relational/analyzer/TestMatadata.java     | 12 ++---
 13 files changed, 81 insertions(+), 117 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
index ac4b611b2fd..640b38cf698 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
@@ -56,7 +56,6 @@ import org.apache.tsfile.write.schema.IMeasurementSchema;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
@@ -175,7 +174,7 @@ public abstract class AbstractAggTableScanOperator extends 
AbstractDataSourceOpe
 
     if (this.deviceEntries.isEmpty() || 
this.deviceEntries.get(this.currentDeviceIndex) == null) {
       // for device which is not exist
-      deviceEntry = new AlignedDeviceEntry(new StringArrayDeviceID(""), 
Collections.emptyList());
+      deviceEntry = new AlignedDeviceEntry(new StringArrayDeviceID(""), new 
Binary[0]);
     } else {
       deviceEntry = this.deviceEntries.get(this.currentDeviceIndex);
     }
@@ -361,10 +360,8 @@ public abstract class AbstractAggTableScanOperator extends 
AbstractDataSourceOpe
             id == null ? null : new Binary(id, TSFileConfig.STRING_CHARSET));
       case ATTRIBUTE:
         Binary attr =
-            deviceEntries
-                .get(currentDeviceIndex)
-                .getAttributeColumnValues()
-                .get(aggColumnsIndexArray[columnIdx]);
+            deviceEntries.get(currentDeviceIndex)
+                .getAttributeColumnValues()[aggColumnsIndexArray[columnIdx]];
         return 
getIdOrAttrColumn(inputRegion.getTimeColumn().getPositionCount(), attr);
       case FIELD:
         return inputRegion.getColumn(aggColumnsIndexArray[columnIdx]);
@@ -428,10 +425,8 @@ public abstract class AbstractAggTableScanOperator extends 
AbstractDataSourceOpe
             timeStatistics, id == null ? null : new Binary(id, 
TSFileConfig.STRING_CHARSET));
       case ATTRIBUTE:
         Binary attr =
-            deviceEntries
-                .get(currentDeviceIndex)
-                .getAttributeColumnValues()
-                .get(aggColumnsIndexArray[columnIdx]);
+            deviceEntries.get(currentDeviceIndex)
+                .getAttributeColumnValues()[aggColumnsIndexArray[columnIdx]];
         return getStatistics(timeStatistics, attr);
       case FIELD:
         return valueStatistics[aggColumnsIndexArray[columnIdx]];
@@ -656,7 +651,7 @@ public abstract class AbstractAggTableScanOperator extends 
AbstractDataSourceOpe
         }
       } else {
         Binary attribute =
-            
deviceEntries.get(deviceIndex).getAttributeColumnValues().get(groupingKeyIndex[i]);
+            
deviceEntries.get(deviceIndex).getAttributeColumnValues()[groupingKeyIndex[i]];
         if (attribute == null) {
           columnBuilders[i].appendNull();
         } else {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractTableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractTableScanOperator.java
index d8f7a5f3359..f8de2d57572 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractTableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractTableScanOperator.java
@@ -217,7 +217,7 @@ public abstract class AbstractTableScanOperator extends 
AbstractSeriesScanOperat
           break;
         case ATTRIBUTE:
           Binary attributeColumnValue =
-              
currentDeviceEntry.getAttributeColumnValues().get(columnsIndexArray[i]);
+              
currentDeviceEntry.getAttributeColumnValues()[columnsIndexArray[i]];
           valueColumns[i] = getIdOrAttributeValueColumn(attributeColumnValue, 
positionCount);
           break;
         case FIELD:
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/LastQueryAggTableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/LastQueryAggTableScanOperator.java
index b74fb4bdf54..dd1dac4e652 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/LastQueryAggTableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/LastQueryAggTableScanOperator.java
@@ -191,10 +191,8 @@ public class LastQueryAggTableScanOperator extends 
AbstractAggTableScanOperator
           break;
         case ATTRIBUTE:
           Binary attribute =
-              cachedDeviceEntries
-                  .get(currentHitCacheIndex)
-                  .getAttributeColumnValues()
-                  .get(aggColumnsIndexArray[columnIdx]);
+              cachedDeviceEntries.get(currentHitCacheIndex)
+                  .getAttributeColumnValues()[aggColumnsIndexArray[columnIdx]];
           if (attribute == null) {
             if (aggregator.getStep().isOutputPartial()) {
               columnBuilder.writeBinary(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/AlignedDeviceEntry.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/AlignedDeviceEntry.java
index fcb9375dd55..8335167fb05 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/AlignedDeviceEntry.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/AlignedDeviceEntry.java
@@ -22,12 +22,11 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.metadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.utils.Binary;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.Arrays;
 
 public class AlignedDeviceEntry extends DeviceEntry {
 
-  public AlignedDeviceEntry(IDeviceID deviceID, List<Binary> 
attributeColumnValues) {
+  public AlignedDeviceEntry(IDeviceID deviceID, Binary[] 
attributeColumnValues) {
     super(deviceID, attributeColumnValues);
   }
 
@@ -37,20 +36,7 @@ public class AlignedDeviceEntry extends DeviceEntry {
         + "deviceID="
         + deviceID
         + ", attributeColumnValues="
-        + attributeColumnValues
+        + Arrays.toString(attributeColumnValues)
         + '}';
   }
-
-  @Override
-  public boolean equals(final Object obj) {
-    if (this == obj) {
-      return true;
-    }
-    if (obj == null || getClass() != obj.getClass()) {
-      return false;
-    }
-    final AlignedDeviceEntry that = (AlignedDeviceEntry) obj;
-    return Objects.equals(deviceID, that.deviceID)
-        && Objects.equals(attributeColumnValues, that.attributeColumnValues);
-  }
 }
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 f6d8f594d9a..3030df74ae1 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
@@ -31,8 +31,7 @@ import org.apache.tsfile.utils.RamUsageEstimator;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Arrays;
 import java.util.Objects;
 
 import static org.apache.tsfile.utils.ReadWriteIOUtils.readBytes;
@@ -51,9 +50,9 @@ public abstract class DeviceEntry implements Accountable {
       RamUsageEstimator.shallowSizeOfInstance(DeviceEntry.class);
 
   protected final IDeviceID deviceID;
-  protected final List<Binary> attributeColumnValues;
+  protected final Binary[] attributeColumnValues;
 
-  public DeviceEntry(final IDeviceID deviceID, final List<Binary> 
attributeColumnValues) {
+  public DeviceEntry(final IDeviceID deviceID, final Binary[] 
attributeColumnValues) {
     this.deviceID = deviceID;
     this.attributeColumnValues = attributeColumnValues;
   }
@@ -68,13 +67,13 @@ public abstract class DeviceEntry implements Accountable {
     return segmentIndex < deviceID.segmentNum() ? 
deviceID.segment(segmentIndex) : null;
   }
 
-  public List<Binary> getAttributeColumnValues() {
+  public Binary[] getAttributeColumnValues() {
     return attributeColumnValues;
   }
 
   public void serialize(final ByteBuffer byteBuffer) {
     deviceID.serialize(byteBuffer);
-    write(attributeColumnValues.size(), byteBuffer);
+    write(attributeColumnValues.length, byteBuffer);
     for (final Binary value : attributeColumnValues) {
       serializeBinary(byteBuffer, value);
     }
@@ -87,7 +86,7 @@ public abstract class DeviceEntry implements Accountable {
 
   public void serialize(final DataOutputStream stream) throws IOException {
     deviceID.serialize(stream);
-    write(attributeColumnValues.size(), stream);
+    write(attributeColumnValues.length, stream);
     for (final Binary value : attributeColumnValues) {
       serializeBinary(stream, value);
     }
@@ -101,9 +100,10 @@ public abstract class DeviceEntry implements Accountable {
   public static DeviceEntry deserialize(final ByteBuffer byteBuffer) {
     final IDeviceID iDeviceID = StringArrayDeviceID.deserialize(byteBuffer);
     int size = readInt(byteBuffer);
-    final List<Binary> attributeColumnValues = new ArrayList<>(size);
+    final Binary[] attributeColumnValues = new Binary[size];
     while (size-- > 0) {
-      attributeColumnValues.add(deserializeBinary(byteBuffer));
+      attributeColumnValues[attributeColumnValues.length - size - 1] =
+          deserializeBinary(byteBuffer);
     }
     return constructDeviceEntry(iDeviceID, attributeColumnValues, 
readInt(byteBuffer));
   }
@@ -140,7 +140,7 @@ public abstract class DeviceEntry implements Accountable {
   }
 
   private static DeviceEntry constructDeviceEntry(
-      IDeviceID deviceID, List<Binary> attributeColumnValues, int ordinal) {
+      IDeviceID deviceID, Binary[] attributeColumnValues, int ordinal) {
     switch (DeviceEntryType.values()[ordinal]) {
       case ALIGNED:
         return new AlignedDeviceEntry(deviceID, attributeColumnValues);
@@ -156,7 +156,7 @@ public abstract class DeviceEntry implements Accountable {
   public long ramBytesUsed() {
     return INSTANCE_SIZE
         + deviceID.ramBytesUsed()
-        + RamUsageEstimator.sizeOfCollection(attributeColumnValues);
+        + RamUsageEstimator.sizeOf(attributeColumnValues);
   }
 
   @Override
@@ -169,11 +169,11 @@ public abstract class DeviceEntry implements Accountable {
     }
     final DeviceEntry that = (DeviceEntry) obj;
     return Objects.equals(deviceID, that.deviceID)
-        && Objects.equals(attributeColumnValues, that.attributeColumnValues);
+        && Arrays.equals(attributeColumnValues, that.attributeColumnValues);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(deviceID, attributeColumnValues);
+    return Objects.hash(deviceID, Arrays.hashCode(attributeColumnValues));
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/NonAlignedAlignedDeviceEntry.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/NonAlignedAlignedDeviceEntry.java
index 9c6a2863922..6ed2d97a4ed 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/NonAlignedAlignedDeviceEntry.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/NonAlignedAlignedDeviceEntry.java
@@ -22,12 +22,11 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.metadata;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.utils.Binary;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.Arrays;
 
 public class NonAlignedAlignedDeviceEntry extends DeviceEntry {
 
-  public NonAlignedAlignedDeviceEntry(IDeviceID deviceID, List<Binary> 
attributeColumnValues) {
+  public NonAlignedAlignedDeviceEntry(IDeviceID deviceID, Binary[] 
attributeColumnValues) {
     super(deviceID, attributeColumnValues);
   }
 
@@ -37,20 +36,7 @@ public class NonAlignedAlignedDeviceEntry extends 
DeviceEntry {
         + "deviceID="
         + deviceID
         + ", attributeColumnValues="
-        + attributeColumnValues
+        + Arrays.toString(attributeColumnValues)
         + '}';
   }
-
-  @Override
-  public boolean equals(final Object obj) {
-    if (this == obj) {
-      return true;
-    }
-    if (obj == null || getClass() != obj.getClass()) {
-      return false;
-    }
-    final NonAlignedAlignedDeviceEntry that = (NonAlignedAlignedDeviceEntry) 
obj;
-    return Objects.equals(deviceID, that.deviceID)
-        && Objects.equals(attributeColumnValues, that.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 fbdf8298d50..29979b8a676 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
@@ -63,9 +63,7 @@ public class DeviceInCacheFilterVisitor extends 
SchemaFilterVisitor<DeviceEntry>
         .getChild()
         .accept(
             StringValueFilterVisitor.getInstance(),
-            deviceEntry
-                .getAttributeColumnValues()
-                .get(attributeIndexMap.get(filter.getKey()))
+            
deviceEntry.getAttributeColumnValues()[attributeIndexMap.get(filter.getKey())]
                 .getStringValue(TSFileConfig.STRING_CHARSET));
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
index 1ed1767ff4b..0731c725432 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
@@ -340,8 +340,7 @@ public class TableDeviceSchemaFetcher {
 
     final DeviceEntry deviceEntry =
         new AlignedDeviceEntry(
-            deviceID,
-            
attributeColumns.stream().map(attributeMap::get).collect(Collectors.toList()));
+            deviceID, 
attributeColumns.stream().map(attributeMap::get).toArray(Binary[]::new));
     // TODO table metadata: process cases that selected attr columns different 
from those used for
     // predicate
     if (check.test(deviceEntry)) {
@@ -432,7 +431,7 @@ public class TableDeviceSchemaFetcher {
           final DeviceEntry deviceEntry =
               new AlignedDeviceEntry(
                   deviceID,
-                  
attributeColumns.stream().map(attributeMap::get).collect(Collectors.toList()));
+                  
attributeColumns.stream().map(attributeMap::get).toArray(Binary[]::new));
           mppQueryContext.reserveMemoryForFrontEnd(deviceEntry.ramBytesUsed());
           deviceEntryList.add(deviceEntry);
           // Only cache those exact device query
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 f18d9b398fa..ef4e3936aa0 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
@@ -1081,12 +1081,10 @@ public class TableDistributedPlanGenerator
       } else {
         orderingRules.add(
             deviceEntry ->
-                deviceEntry.getAttributeColumnValues().get(idx) == null
+                deviceEntry.getAttributeColumnValues()[idx] == null
                     ? null
-                    : deviceEntry
-                        .getAttributeColumnValues()
-                        .get(idx)
-                        .getStringValue(TSFileConfig.STRING_CHARSET));
+                    : 
deviceEntry.getAttributeColumnValues()[idx].getStringValue(
+                        TSFileConfig.STRING_CHARSET));
       }
     }
     Comparator<DeviceEntry> comparator = null;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
index d9003b4f450..3ff8add3728 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java
@@ -87,7 +87,7 @@ public class ShowDevicesResult extends ShowSchemaResult 
implements IDeviceSchema
             entry.getDeviceID().toString(), null, -1, (String[]) 
entry.getDeviceID().getSegments());
     final Map<String, Binary> attributeProviderMap = new HashMap<>();
     for (int i = 0; i < attributeColumns.size(); ++i) {
-      attributeProviderMap.put(attributeColumns.get(i), 
entry.getAttributeColumnValues().get(i));
+      attributeProviderMap.put(attributeColumns.get(i), 
entry.getAttributeColumnValues()[i]);
     }
     result.setAttributeProvider(attributeProviderMap::get);
     return result;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/MockTableModelDataPartition.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/MockTableModelDataPartition.java
index c7fddc62d30..a3ced149f84 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/MockTableModelDataPartition.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/MockTableModelDataPartition.java
@@ -64,30 +64,36 @@ public class MockTableModelDataPartition {
     DEVICES_REGION_GROUP.add(Arrays.asList(DEVICE_2, DEVICE_1));
   }
 
-  static final List<Binary> DEVICE_1_ATTRIBUTES =
-      Arrays.asList(
-          new Binary("high", TSFileConfig.STRING_CHARSET),
-          new Binary("big", TSFileConfig.STRING_CHARSET));
-  static final List<Binary> DEVICE_2_ATTRIBUTES =
-      Arrays.asList(
-          new Binary("high", TSFileConfig.STRING_CHARSET),
-          new Binary("small", TSFileConfig.STRING_CHARSET));
-  static final List<Binary> DEVICE_3_ATTRIBUTES =
-      Arrays.asList(
-          new Binary("low", TSFileConfig.STRING_CHARSET),
-          new Binary("small", TSFileConfig.STRING_CHARSET));
-  static final List<Binary> DEVICE_4_ATTRIBUTES =
-      Arrays.asList(
-          new Binary("low", TSFileConfig.STRING_CHARSET),
-          new Binary("big", TSFileConfig.STRING_CHARSET));
-  static final List<Binary> DEVICE_5_ATTRIBUTES =
-      Arrays.asList(
-          new Binary("mid", TSFileConfig.STRING_CHARSET),
-          new Binary("big", TSFileConfig.STRING_CHARSET));
-  static final List<Binary> DEVICE_6_ATTRIBUTES =
-      Arrays.asList(
-          new Binary("mid", TSFileConfig.STRING_CHARSET),
-          new Binary("small", TSFileConfig.STRING_CHARSET));
+  static final Binary[] DEVICE_1_ATTRIBUTES =
+      new Binary[] {
+        new Binary("high", TSFileConfig.STRING_CHARSET),
+        new Binary("big", TSFileConfig.STRING_CHARSET)
+      };
+  static final Binary[] DEVICE_2_ATTRIBUTES =
+      new Binary[] {
+        new Binary("high", TSFileConfig.STRING_CHARSET),
+        new Binary("small", TSFileConfig.STRING_CHARSET)
+      };
+  static final Binary[] DEVICE_3_ATTRIBUTES =
+      new Binary[] {
+        new Binary("low", TSFileConfig.STRING_CHARSET),
+        new Binary("small", TSFileConfig.STRING_CHARSET)
+      };
+  static final Binary[] DEVICE_4_ATTRIBUTES =
+      new Binary[] {
+        new Binary("low", TSFileConfig.STRING_CHARSET),
+        new Binary("big", TSFileConfig.STRING_CHARSET)
+      };
+  static final Binary[] DEVICE_5_ATTRIBUTES =
+      new Binary[] {
+        new Binary("mid", TSFileConfig.STRING_CHARSET),
+        new Binary("big", TSFileConfig.STRING_CHARSET)
+      };
+  static final Binary[] DEVICE_6_ATTRIBUTES =
+      new Binary[] {
+        new Binary("mid", TSFileConfig.STRING_CHARSET),
+        new Binary("small", TSFileConfig.STRING_CHARSET)
+      };
 
   private static final TRegionReplicaSet DATA_REGION_GROUP_1 = 
genDataRegionGroup(10, 1, 2);
   private static final TRegionReplicaSet DATA_REGION_GROUP_2 = 
genDataRegionGroup(11, 3, 2);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
index b6006cb00b6..53bb94b2ef8 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
@@ -291,10 +291,8 @@ public class TSBSMetadata implements Metadata {
         && attributeColumns.isEmpty()) {
       // r01, r02
       return ImmutableList.of(
-          new AlignedDeviceEntry(
-              new StringArrayDeviceID(T1_DEVICE_1.split("\\.")), 
ImmutableList.of()),
-          new AlignedDeviceEntry(
-              new StringArrayDeviceID(T1_DEVICE_2.split("\\.")), 
ImmutableList.of()));
+          new AlignedDeviceEntry(new 
StringArrayDeviceID(T1_DEVICE_1.split("\\.")), new Binary[0]),
+          new AlignedDeviceEntry(new 
StringArrayDeviceID(T1_DEVICE_2.split("\\.")), new Binary[0]));
     } else if (expressionList.size() == 1
         && expressionList.get(0).toString().equals("(\"fleet\" = 'South')")
         && attributeColumns.size() == 1
@@ -303,32 +301,32 @@ public class TSBSMetadata implements Metadata {
       return ImmutableList.of(
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T1_DEVICE_1.split("\\.")),
-              ImmutableList.of(new Binary("2000", 
TSFileConfig.STRING_CHARSET))),
+              new Binary[] {new Binary("2000", TSFileConfig.STRING_CHARSET)}),
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T1_DEVICE_2.split("\\.")),
-              ImmutableList.of(new Binary("1000", 
TSFileConfig.STRING_CHARSET))));
+              new Binary[] {new Binary("1000", TSFileConfig.STRING_CHARSET)}));
     } else {
       // others (The return result maybe not correct in actual, but it is 
convenient for test of
       // DistributionPlan)
       return Arrays.asList(
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T1_DEVICE_1.split("\\.")),
-              ImmutableList.of(Binary.EMPTY_VALUE, Binary.EMPTY_VALUE)),
+              new Binary[] {Binary.EMPTY_VALUE, Binary.EMPTY_VALUE}),
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T1_DEVICE_2.split("\\.")),
-              ImmutableList.of(Binary.EMPTY_VALUE, Binary.EMPTY_VALUE)),
+              new Binary[] {Binary.EMPTY_VALUE, Binary.EMPTY_VALUE}),
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T1_DEVICE_3.split("\\.")),
-              ImmutableList.of(Binary.EMPTY_VALUE, Binary.EMPTY_VALUE)),
+              new Binary[] {Binary.EMPTY_VALUE, Binary.EMPTY_VALUE}),
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T2_DEVICE_1.split("\\.")),
-              ImmutableList.of(Binary.EMPTY_VALUE, Binary.EMPTY_VALUE)),
+              new Binary[] {Binary.EMPTY_VALUE, Binary.EMPTY_VALUE}),
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T2_DEVICE_2.split("\\.")),
-              ImmutableList.of(Binary.EMPTY_VALUE, Binary.EMPTY_VALUE)),
+              new Binary[] {Binary.EMPTY_VALUE, Binary.EMPTY_VALUE}),
           new AlignedDeviceEntry(
               new StringArrayDeviceID(T2_DEVICE_3.split("\\.")),
-              ImmutableList.of(Binary.EMPTY_VALUE, Binary.EMPTY_VALUE)));
+              new Binary[] {Binary.EMPTY_VALUE, Binary.EMPTY_VALUE}));
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
index ada3122f055..b5bc2c66f5c 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
@@ -66,6 +66,7 @@ import org.apache.tsfile.file.metadata.StringArrayDeviceID;
 import org.apache.tsfile.read.common.type.StringType;
 import org.apache.tsfile.read.common.type.Type;
 import org.apache.tsfile.read.common.type.TypeFactory;
+import org.apache.tsfile.utils.Binary;
 import org.mockito.Mockito;
 
 import java.util.Arrays;
@@ -284,18 +285,17 @@ public class TestMatadata implements Metadata {
       if (expressionList.isEmpty()) {
         return ImmutableList.of(
             new AlignedDeviceEntry(
-                IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_3), 
ImmutableList.of()),
+                IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_3), new 
Binary[0]),
             new AlignedDeviceEntry(
-                IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_6), 
ImmutableList.of()),
+                IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_6), new 
Binary[0]),
             new NonAlignedAlignedDeviceEntry(
-                IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_5), 
ImmutableList.of()));
+                IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_5), new 
Binary[0]));
       }
 
       return ImmutableList.of(
+          new 
AlignedDeviceEntry(IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_3), new 
Binary[0]),
           new AlignedDeviceEntry(
-              IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_3), 
ImmutableList.of()),
-          new AlignedDeviceEntry(
-              IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_6), 
ImmutableList.of()));
+              IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_6), new 
Binary[0]));
     }
 
     if (expressionList.size() == 2) {

Reply via email to