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

zyk 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 3ddaa39983 [IOTDB-5391] Implement SchemaReader using iterative 
Traverser (#8816)
3ddaa39983 is described below

commit 3ddaa39983f64e9b43d384abcf9818908614be64
Author: Chen YZ <[email protected]>
AuthorDate: Tue Jan 10 22:16:47 2023 +0800

    [IOTDB-5391] Implement SchemaReader using iterative Traverser (#8816)
    
    [IOTDB-5391] Implement SchemaReader using iterative Traverser (#8816)
---
 .../schemaregion/rocksdb/RSchemaRegion.java        |  62 ++-----
 .../metadata/tagSchemaRegion/TagSchemaRegion.java  |  48 ++----
 .../iotdb/db/metadata/mtree/IMTreeBelowSG.java     |   4 -
 .../db/metadata/mtree/MTreeBelowSGCachedImpl.java  | 191 +++++++++++----------
 .../db/metadata/mtree/MTreeBelowSGMemoryImpl.java  | 152 ++++++++--------
 .../schemaregion/result/ShowTimeSeriesResult.java  |  10 +-
 .../metadata/query/info/ITimeSeriesSchemaInfo.java |   5 +-
 .../db/metadata/schemaregion/ISchemaRegion.java    |  65 +------
 .../schemaregion/SchemaRegionMemoryImpl.java       |  94 +++++-----
 .../schemaregion/SchemaRegionSchemaFileImpl.java   | 103 +++++------
 .../apache/iotdb/db/metadata/tag/TagManager.java   |   3 +-
 .../schema/source/TimeSeriesSchemaSource.java      |   5 +-
 .../schemaRegion/SchemaRegionAliasAndTagTest.java  |  32 ++--
 .../schemaRegion/SchemaRegionBasicTest.java        |  45 +++--
 .../schemaRegion/SchemaRegionManagementTest.java   |  43 +++--
 .../schemaRegion/SchemaRegionTemplateTest.java     |  10 +-
 .../schemaRegion/SchemaRegionTestUtil.java         |  36 +++-
 .../schema/SchemaQueryScanOperatorTest.java        |   4 +-
 18 files changed, 430 insertions(+), 482 deletions(-)

diff --git 
a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
 
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
index 04d55df60f..0887f34850 100644
--- 
a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
+++ 
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
@@ -46,7 +46,6 @@ import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
@@ -54,7 +53,9 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPla
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeactivateTemplatePlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTemplatePlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.query.reader.ISchemaReader;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.schemaregion.SchemaRegionUtils;
@@ -911,43 +912,6 @@ public class RSchemaRegion implements ISchemaRegion {
     return result;
   }
 
-  @Override
-  public List<ShowDevicesResult> getMatchedDevices(IShowDevicesPlan plan) 
throws MetadataException {
-    List<ShowDevicesResult> res = Collections.synchronizedList(new 
ArrayList<>());
-    BiFunction<byte[], byte[], Boolean> function =
-        (a, b) -> {
-          String fullPath = RSchemaUtils.getPathByInnerName(new String(a));
-          res.add(new ShowDevicesResult(fullPath, RSchemaUtils.isAligned(b)));
-          return true;
-        };
-    traverseOutcomeBasins(
-        plan.getPath().getNodes(), MAX_PATH_DEPTH, function, new Character[] 
{NODE_TYPE_ENTITY});
-
-    return res;
-  }
-
-  public List<MeasurementPath> getMeasurementPaths(
-      PartialPath pathPattern, boolean isPrefixMath, boolean withTags) throws 
MetadataException {
-    if (withTags) {
-      Map<MeasurementPath, Pair<Map<String, String>, Map<String, String>>> 
results =
-          getMatchedMeasurementPathWithTags(pathPattern.getNodes());
-      return new ArrayList<>(results.keySet());
-    }
-    List<MeasurementPath> allResult = Collections.synchronizedList(new 
ArrayList<>());
-    BiFunction<byte[], byte[], Boolean> function =
-        (a, b) -> {
-          allResult.add(
-              new RMeasurementMNode(
-                      RSchemaUtils.getPathByInnerName(new String(a)), b, 
readWriteHandler)
-                  .getMeasurementPath());
-          return true;
-        };
-    traverseOutcomeBasins(
-        pathPattern.getNodes(), MAX_PATH_DEPTH, function, new Character[] 
{NODE_TYPE_MEASUREMENT});
-
-    return allResult;
-  }
-
   @Override
   public List<MeasurementPath> fetchSchema(
       PartialPath pathPattern, Map<Integer, Template> templateMap, boolean 
withTags)
@@ -955,16 +919,6 @@ public class RSchemaRegion implements ISchemaRegion {
     throw new UnsupportedOperationException();
   }
 
-  @Override
-  public List<ShowTimeSeriesResult> showTimeseries(IShowTimeSeriesPlan plan)
-      throws MetadataException {
-    if (plan.getKey() != null && plan.getValue() != null) {
-      return showTimeseriesWithIndex(plan);
-    } else {
-      return showTimeseriesWithoutIndex(plan);
-    }
-  }
-
   private List<ShowTimeSeriesResult> 
showTimeseriesWithIndex(IShowTimeSeriesPlan plan) {
     // temporarily unsupported
     throw new UnsupportedOperationException(
@@ -1548,6 +1502,18 @@ public class RSchemaRegion implements ISchemaRegion {
     throw new UnsupportedOperationException();
   }
 
+  @Override
+  public ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
+      IShowTimeSeriesPlan showTimeSeriesPlan) throws MetadataException {
+    throw new UnsupportedOperationException();
+  }
+
   @Override
   public ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan 
showNodesPlan)
       throws MetadataException {
diff --git 
a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
 
b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
index e088635ad5..2624de345e 100644
--- 
a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
+++ 
b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
@@ -41,7 +41,6 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWri
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
@@ -49,7 +48,9 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPla
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeactivateTemplatePlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTemplatePlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.query.reader.ISchemaReader;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.schemaregion.SchemaRegionUtils;
@@ -394,11 +395,6 @@ public class TagSchemaRegion implements ISchemaRegion {
     return measurementPaths;
   }
 
-  @Override
-  public List<ShowDevicesResult> getMatchedDevices(IShowDevicesPlan plan) 
throws MetadataException {
-    throw new UnsupportedOperationException("getMatchedDevices");
-  }
-
   public List<MeasurementPath> getMeasurementPaths(
       PartialPath pathPattern, boolean isPrefixMatch, boolean withTags) throws 
MetadataException {
     PartialPath devicePath = pathPattern.getDevicePath();
@@ -439,34 +435,6 @@ public class TagSchemaRegion implements ISchemaRegion {
     return getMeasurementPaths(deviceIDs);
   }
 
-  @Override
-  public List<ShowTimeSeriesResult> showTimeseries(IShowTimeSeriesPlan plan)
-      throws MetadataException {
-    List<ShowTimeSeriesResult> showTimeSeriesResults = new ArrayList<>();
-    String path = plan.getPath().getFullPath();
-    // point query
-    if (!path.endsWith(TAIL)) {
-      path = PathTagConverterUtils.pathToTagsSortPath(storageGroupFullPath, 
path);
-      DeviceEntry deviceEntry = idTableWithDeviceIDList.getDeviceEntry(path);
-      if (deviceEntry != null) {
-        Map<String, SchemaEntry> measurementMap = 
deviceEntry.getMeasurementMap();
-        for (String m : measurementMap.keySet()) {
-          SchemaEntry schemaEntry = measurementMap.get(m);
-          showTimeSeriesResults.add(
-              ShowTimeSeriesResultUtils.generateShowTimeSeriesResult(
-                  storageGroupFullPath, path, m, schemaEntry));
-        }
-      }
-      return showTimeSeriesResults;
-    }
-    // batch query
-    List<IDeviceID> deviceIDs = getDeviceIdFromInvertedIndex(plan.getPath());
-    for (IDeviceID deviceID : deviceIDs) {
-      getTimeSeriesResultOfDeviceFromIDTable(showTimeSeriesResults, deviceID);
-    }
-    return showTimeSeriesResults;
-  }
-
   private void getTimeSeriesResultOfDeviceFromIDTable(
       List<ShowTimeSeriesResult> ShowTimeSeriesResults, IDeviceID deviceID) {
     Map<String, SchemaEntry> measurementMap =
@@ -585,6 +553,18 @@ public class TagSchemaRegion implements ISchemaRegion {
     return 0;
   }
 
+  @Override
+  public ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
+      IShowTimeSeriesPlan showTimeSeriesPlan) throws MetadataException {
+    throw new UnsupportedOperationException();
+  }
+
   @Override
   public ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan 
showNodesPlan)
       throws MetadataException {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java
index 3525a4650e..a20967bdab 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java
@@ -23,8 +23,6 @@ import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
-import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -143,8 +141,6 @@ public interface IMTreeBelowSG {
    */
   IMNode getDeviceNodeWithAutoCreating(PartialPath deviceId) throws 
MetadataException;
 
-  List<ShowDevicesResult> getDevices(IShowDevicesPlan plan) throws 
MetadataException;
-
   /**
    * Fetch all measurement path
    *
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
index e35cec440d..dd1cad6cee 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
@@ -55,7 +55,9 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowNodesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.query.reader.ISchemaReader;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaFormatUtils;
@@ -94,10 +96,6 @@ import java.util.function.Function;
  *   <li>Timeseries operation, including create and delete
  *   <li>Entity/Device operation
  *   <li>Interfaces and Implementation for metadata info Query
- *       <ol>
- *         <li>Interfaces for Device info Query
- *         <li>Interfaces for timeseries, measurement and schema info Query
- *       </ol>
  *   <li>Interfaces and Implementation for MNode Query
  *   <li>Interfaces and Implementation for Template check
  * </ol>
@@ -106,7 +104,7 @@ public class MTreeBelowSGCachedImpl implements 
IMTreeBelowSG {
 
   private final CachedMTreeStore store;
   private volatile IStorageGroupMNode storageGroupMNode;
-  private volatile IMNode rootNode;
+  private final IMNode rootNode;
   private final Function<IMeasurementMNode, Map<String, String>> tagGetter;
   private final int levelOfSG;
 
@@ -705,71 +703,38 @@ public class MTreeBelowSGCachedImpl implements 
IMTreeBelowSG {
 
   // region Interfaces and Implementation for metadata info Query
 
-  // region Interfaces for Device info Query
-
   @Override
-  public List<ShowDevicesResult> getDevices(IShowDevicesPlan plan) throws 
MetadataException {
-    List<ShowDevicesResult> res = new ArrayList<>();
-    try (EntityCollector<ShowDevicesResult> collector =
-        new EntityCollector<ShowDevicesResult>(
-            rootNode, plan.getPath(), store, plan.isPrefixMatch()) {
-          @Override
-          protected ShowDevicesResult collectEntity(IEntityMNode node) {
-            PartialPath device = getPartialPathFromRootToNode(node);
-            return new ShowDevicesResult(device.getFullPath(), 
node.isAligned());
-          }
-        }) {
-      if (plan.usingSchemaTemplate()) {
-        collector.setSchemaTemplateFilter(plan.getSchemaTemplateId());
-      }
-      TraverserWithLimitOffsetWrapper<ShowDevicesResult> traverser =
-          new TraverserWithLimitOffsetWrapper<>(collector, plan.getLimit(), 
plan.getOffset());
-      while (traverser.hasNext()) {
-        res.add(traverser.next());
-      }
-    }
-
-    return res;
-  }
-  // endregion
-
-  // region Interfaces for timeseries, measurement and schema info Query
-
-  public List<ShowTimeSeriesResult> getAllMeasurementSchema(
-      IShowTimeSeriesPlan plan,
-      Function<Long, Pair<Map<String, String>, Map<String, String>>> 
tagAndAttributeProvider)
+  public List<MeasurementPath> fetchSchema(
+      PartialPath pathPattern, Map<Integer, Template> templateMap, boolean 
withTags)
       throws MetadataException {
-    List<ShowTimeSeriesResult> result = new LinkedList<>();
-    try (MeasurementCollector<ShowTimeSeriesResult> collector =
-        new MeasurementCollector<ShowTimeSeriesResult>(
-            rootNode, plan.getPath(), store, plan.isPrefixMatch()) {
+    List<MeasurementPath> result = new LinkedList<>();
+    try (MeasurementCollector<Void> collector =
+        new MeasurementCollector<Void>(rootNode, pathPattern, store, false) {
           @Override
-          protected ShowTimeSeriesResult collectMeasurement(IMeasurementMNode 
node) {
-            Pair<Map<String, String>, Map<String, String>> tagAndAttribute =
-                tagAndAttributeProvider.apply(node.getOffset());
-            return new ShowTimeSeriesResult(
-                getPartialPathFromRootToNode(node).getFullPath(),
-                node.getAlias(),
-                (MeasurementSchema) node.getSchema(),
-                tagAndAttribute.left,
-                tagAndAttribute.right,
-                getParentOfNextMatchedNode().getAsEntityMNode().isAligned());
+          protected Void collectMeasurement(IMeasurementMNode node) {
+            if (node.isPreDeleted()) {
+              return null;
+            }
+            MeasurementPath path = getCurrentMeasurementPathInTraverse(node);
+            if (nodes[nodes.length - 1].equals(node.getAlias())) {
+              // only when user query with alias, the alias in path will be set
+              path.setMeasurementAlias(node.getAlias());
+            }
+            if (withTags) {
+              path.setTagMap(tagGetter.apply(node));
+            }
+            result.add(path);
+            return null;
           }
         }) {
-      collector.setTemplateMap(plan.getRelatedTemplate());
-      TraverserWithLimitOffsetWrapper<ShowTimeSeriesResult> traverser =
-          new TraverserWithLimitOffsetWrapper<>(collector, plan.getLimit(), 
plan.getOffset());
-      while (traverser.hasNext()) {
-        result.add(traverser.next());
-      }
+      collector.setTemplateMap(templateMap);
+      collector.traverse();
     }
     return result;
   }
 
   // endregion
 
-  // endregion
-
   // region Interfaces and Implementation for MNode Query
   /**
    * Get node by the path
@@ -814,36 +779,6 @@ public class MTreeBelowSGCachedImpl implements 
IMTreeBelowSG {
     }
   }
 
-  @Override
-  public List<MeasurementPath> fetchSchema(
-      PartialPath pathPattern, Map<Integer, Template> templateMap, boolean 
withTags)
-      throws MetadataException {
-    List<MeasurementPath> result = new LinkedList<>();
-    try (MeasurementCollector<Void> collector =
-        new MeasurementCollector<Void>(rootNode, pathPattern, store, false) {
-          @Override
-          protected Void collectMeasurement(IMeasurementMNode node) {
-            if (node.isPreDeleted()) {
-              return null;
-            }
-            MeasurementPath path = getCurrentMeasurementPathInTraverse(node);
-            if (nodes[nodes.length - 1].equals(node.getAlias())) {
-              // only when user query with alias, the alias in path will be set
-              path.setMeasurementAlias(node.getAlias());
-            }
-            if (withTags) {
-              path.setTagMap(tagGetter.apply(node));
-            }
-            result.add(path);
-            return null;
-          }
-        }) {
-      collector.setTemplateMap(templateMap);
-      collector.traverse();
-    }
-    return result;
-  }
-
   @Override
   public List<IMeasurementMNode> getAllMeasurementMNode() throws 
MetadataException {
     IMNode cur = storageGroupMNode;
@@ -1045,6 +980,84 @@ public class MTreeBelowSGCachedImpl implements 
IMTreeBelowSG {
   // endregion
 
   // region Interfaces for schema reader
+  public ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException {
+    EntityCollector<IDeviceSchemaInfo> collector =
+        new EntityCollector<IDeviceSchemaInfo>(
+            rootNode, showDevicesPlan.getPath(), store, 
showDevicesPlan.isPrefixMatch()) {
+          @Override
+          protected IDeviceSchemaInfo collectEntity(IEntityMNode node) {
+            PartialPath device = getPartialPathFromRootToNode(node);
+            return new ShowDevicesResult(device.getFullPath(), 
node.isAligned());
+          }
+        };
+    if (showDevicesPlan.usingSchemaTemplate()) {
+      collector.setSchemaTemplateFilter(showDevicesPlan.getSchemaTemplateId());
+    }
+    TraverserWithLimitOffsetWrapper<IDeviceSchemaInfo> traverser =
+        new TraverserWithLimitOffsetWrapper<>(
+            collector, showDevicesPlan.getLimit(), 
showDevicesPlan.getOffset());
+    return new ISchemaReader<IDeviceSchemaInfo>() {
+      @Override
+      public void close() {
+        traverser.close();
+      }
+
+      @Override
+      public boolean hasNext() {
+        return traverser.hasNext();
+      }
+
+      @Override
+      public IDeviceSchemaInfo next() {
+        return traverser.next();
+      }
+    };
+  }
+
+  public ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
+      IShowTimeSeriesPlan showTimeSeriesPlan,
+      Function<Long, Pair<Map<String, String>, Map<String, String>>> 
tagAndAttributeProvider)
+      throws MetadataException {
+    MeasurementCollector<ITimeSeriesSchemaInfo> collector =
+        new MeasurementCollector<ITimeSeriesSchemaInfo>(
+            rootNode, showTimeSeriesPlan.getPath(), store, 
showTimeSeriesPlan.isPrefixMatch()) {
+          @Override
+          protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode 
node) {
+            Pair<Map<String, String>, Map<String, String>> tagAndAttribute =
+                tagAndAttributeProvider.apply(node.getOffset());
+            return new ShowTimeSeriesResult(
+                getPartialPathFromRootToNode(node).getFullPath(),
+                node.getAlias(),
+                (MeasurementSchema) node.getSchema(),
+                tagAndAttribute.left,
+                tagAndAttribute.right,
+                getParentOfNextMatchedNode().getAsEntityMNode().isAligned());
+          }
+        };
+
+    collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate());
+    TraverserWithLimitOffsetWrapper<ITimeSeriesSchemaInfo> traverser =
+        new TraverserWithLimitOffsetWrapper<>(
+            collector, showTimeSeriesPlan.getLimit(), 
showTimeSeriesPlan.getOffset());
+    return new ISchemaReader<ITimeSeriesSchemaInfo>() {
+      @Override
+      public void close() {
+        traverser.close();
+      }
+
+      @Override
+      public boolean hasNext() {
+        return traverser.hasNext();
+      }
+
+      @Override
+      public ITimeSeriesSchemaInfo next() {
+        return traverser.next();
+      }
+    };
+  }
+
   public ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan 
showNodesPlan)
       throws MetadataException {
     MNodeCollector<INodeSchemaInfo> collector =
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
index aff1496d27..f263dc3f7c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
@@ -55,7 +55,9 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowNodesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.query.reader.ISchemaReader;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaFormatUtils;
@@ -94,10 +96,6 @@ import java.util.function.Function;
  *   <li>Timeseries operation, including create and delete
  *   <li>Entity/Device operation
  *   <li>Interfaces and Implementation for metadata info Query
- *       <ol>
- *         <li>Interfaces for Device info Query
- *         <li>Interfaces for timeseries, measurement and schema info Query
- *       </ol>
  *   <li>Interfaces and Implementation for MNode Query
  *   <li>Interfaces and Implementation for Template check
  * </ol>
@@ -105,11 +103,11 @@ import java.util.function.Function;
 public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG {
 
   // this implementation is based on memory, thus only MTree write operation 
must invoke MTreeStore
-  private MemMTreeStore store;
+  private final MemMTreeStore store;
   private volatile IStorageGroupMNode storageGroupMNode;
-  private volatile IMNode rootNode;
+  private final IMNode rootNode;
   private final Function<IMeasurementMNode, Map<String, String>> tagGetter;
-  private int levelOfSG;
+  private final int levelOfSG;
 
   // region MTree initialization, clear and serialization
   public MTreeBelowSGMemoryImpl(
@@ -623,35 +621,6 @@ public class MTreeBelowSGMemoryImpl implements 
IMTreeBelowSG {
 
   // region Interfaces and Implementation for metadata info Query
 
-  // region Interfaces for Device info Query
-
-  @Override
-  public List<ShowDevicesResult> getDevices(IShowDevicesPlan plan) throws 
MetadataException {
-    List<ShowDevicesResult> res = new ArrayList<>();
-    try (EntityCollector<ShowDevicesResult> collector =
-        new EntityCollector<ShowDevicesResult>(
-            rootNode, plan.getPath(), store, plan.isPrefixMatch()) {
-          @Override
-          protected ShowDevicesResult collectEntity(IEntityMNode node) {
-            PartialPath device = getPartialPathFromRootToNode(node);
-            return new ShowDevicesResult(device.getFullPath(), 
node.isAligned());
-          }
-        }) {
-      if (plan.usingSchemaTemplate()) {
-        collector.setSchemaTemplateFilter(plan.getSchemaTemplateId());
-      }
-      TraverserWithLimitOffsetWrapper<ShowDevicesResult> traverser =
-          new TraverserWithLimitOffsetWrapper<>(collector, plan.getLimit(), 
plan.getOffset());
-      while (traverser.hasNext()) {
-        res.add(traverser.next());
-      }
-    }
-    return res;
-  }
-  // endregion
-
-  // region Interfaces for timeseries, measurement and schema info Query
-
   @Override
   public List<MeasurementPath> fetchSchema(
       PartialPath pathPattern, Map<Integer, Template> templateMap, boolean 
withTags)
@@ -680,39 +649,6 @@ public class MTreeBelowSGMemoryImpl implements 
IMTreeBelowSG {
     return result;
   }
 
-  public List<ShowTimeSeriesResult> getAllMeasurementSchema(
-      IShowTimeSeriesPlan plan,
-      Function<Long, Pair<Map<String, String>, Map<String, String>>> 
tagAndAttributeProvider)
-      throws MetadataException {
-    List<ShowTimeSeriesResult> result = new LinkedList<>();
-    try (MeasurementCollector<ShowTimeSeriesResult> collector =
-        new MeasurementCollector<ShowTimeSeriesResult>(
-            rootNode, plan.getPath(), store, plan.isPrefixMatch()) {
-          @Override
-          protected ShowTimeSeriesResult collectMeasurement(IMeasurementMNode 
node) {
-            Pair<Map<String, String>, Map<String, String>> tagAndAttribute =
-                tagAndAttributeProvider.apply(node.getOffset());
-            return new ShowTimeSeriesResult(
-                getPartialPathFromRootToNode(node).getFullPath(),
-                node.getAlias(),
-                (MeasurementSchema) node.getSchema(),
-                tagAndAttribute.left,
-                tagAndAttribute.right,
-                getParentOfNextMatchedNode().getAsEntityMNode().isAligned());
-          }
-        }) {
-      collector.setTemplateMap(plan.getRelatedTemplate());
-      TraverserWithLimitOffsetWrapper<ShowTimeSeriesResult> traverser =
-          new TraverserWithLimitOffsetWrapper<>(collector, plan.getLimit(), 
plan.getOffset());
-      while (traverser.hasNext()) {
-        result.add(traverser.next());
-      }
-    }
-    return result;
-  }
-
-  // endregion
-
   // endregion
 
   // region Interfaces and Implementation for MNode Query
@@ -927,6 +863,84 @@ public class MTreeBelowSGMemoryImpl implements 
IMTreeBelowSG {
   // endregion
 
   // region Interfaces for schema reader
+
+  public ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException {
+    EntityCollector<IDeviceSchemaInfo> collector =
+        new EntityCollector<IDeviceSchemaInfo>(
+            rootNode, showDevicesPlan.getPath(), store, 
showDevicesPlan.isPrefixMatch()) {
+          @Override
+          protected IDeviceSchemaInfo collectEntity(IEntityMNode node) {
+            PartialPath device = getPartialPathFromRootToNode(node);
+            return new ShowDevicesResult(device.getFullPath(), 
node.isAligned());
+          }
+        };
+    if (showDevicesPlan.usingSchemaTemplate()) {
+      collector.setSchemaTemplateFilter(showDevicesPlan.getSchemaTemplateId());
+    }
+    TraverserWithLimitOffsetWrapper<IDeviceSchemaInfo> traverser =
+        new TraverserWithLimitOffsetWrapper<>(
+            collector, showDevicesPlan.getLimit(), 
showDevicesPlan.getOffset());
+    return new ISchemaReader<IDeviceSchemaInfo>() {
+      @Override
+      public void close() {
+        traverser.close();
+      }
+
+      @Override
+      public boolean hasNext() {
+        return traverser.hasNext();
+      }
+
+      @Override
+      public IDeviceSchemaInfo next() {
+        return traverser.next();
+      }
+    };
+  }
+
+  public ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
+      IShowTimeSeriesPlan showTimeSeriesPlan,
+      Function<Long, Pair<Map<String, String>, Map<String, String>>> 
tagAndAttributeProvider)
+      throws MetadataException {
+    MeasurementCollector<ITimeSeriesSchemaInfo> collector =
+        new MeasurementCollector<ITimeSeriesSchemaInfo>(
+            rootNode, showTimeSeriesPlan.getPath(), store, 
showTimeSeriesPlan.isPrefixMatch()) {
+          @Override
+          protected ITimeSeriesSchemaInfo collectMeasurement(IMeasurementMNode 
node) {
+            Pair<Map<String, String>, Map<String, String>> tagAndAttribute =
+                tagAndAttributeProvider.apply(node.getOffset());
+            return new ShowTimeSeriesResult(
+                getPartialPathFromRootToNode(node).getFullPath(),
+                node.getAlias(),
+                (MeasurementSchema) node.getSchema(),
+                tagAndAttribute.left,
+                tagAndAttribute.right,
+                getParentOfNextMatchedNode().getAsEntityMNode().isAligned());
+          }
+        };
+    collector.setTemplateMap(showTimeSeriesPlan.getRelatedTemplate());
+    TraverserWithLimitOffsetWrapper<ITimeSeriesSchemaInfo> traverser =
+        new TraverserWithLimitOffsetWrapper<>(
+            collector, showTimeSeriesPlan.getLimit(), 
showTimeSeriesPlan.getOffset());
+    return new ISchemaReader<ITimeSeriesSchemaInfo>() {
+      @Override
+      public void close() {
+        traverser.close();
+      }
+
+      @Override
+      public boolean hasNext() {
+        return traverser.hasNext();
+      }
+
+      @Override
+      public ITimeSeriesSchemaInfo next() {
+        return traverser.next();
+      }
+    };
+  }
+
   public ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan 
showNodesPlan)
       throws MetadataException {
     MNodeCollector<INodeSchemaInfo> collector =
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java
index cde3888ed8..bbd5065166 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java
@@ -22,7 +22,6 @@ import 
org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import java.util.Map;
@@ -68,8 +67,13 @@ public class ShowTimeSeriesResult extends ShowSchemaResult 
implements ITimeSerie
   }
 
   @Override
-  public Pair<Map<String, String>, Map<String, String>> getTagAndAttribute() {
-    return new Pair<>(tags, attributes);
+  public Map<String, String> getTags() {
+    return tags;
+  }
+
+  @Override
+  public Map<String, String> getAttributes() {
+    return attributes;
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/query/info/ITimeSeriesSchemaInfo.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/query/info/ITimeSeriesSchemaInfo.java
index 152d67f5f6..94f487a917 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/query/info/ITimeSeriesSchemaInfo.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/query/info/ITimeSeriesSchemaInfo.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.metadata.query.info;
 
-import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import java.util.Map;
@@ -30,7 +29,9 @@ public interface ITimeSeriesSchemaInfo extends ISchemaInfo {
 
   MeasurementSchema getSchema();
 
-  Pair<Map<String, String>, Map<String, String>> getTagAndAttribute();
+  Map<String, String> getTags();
+
+  Map<String, String> getAttributes();
 
   boolean isUnderAlignedDevice();
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
index b0e2ecc40c..446caf8ca5 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
@@ -27,8 +27,6 @@ import org.apache.iotdb.commons.path.PathPatternTree;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
-import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
@@ -43,7 +41,6 @@ import org.apache.iotdb.db.metadata.template.Template;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -159,30 +156,12 @@ public interface ISchemaRegion {
 
   // region Interfaces for metadata info Query
 
-  // region Interfaces for Entity/Device info Query
-
-  /**
-   * Get all device paths and corresponding database paths as 
ShowDevicesResult.
-   *
-   * @param plan ShowDevicesPlan which contains the path pattern and 
restriction params.
-   * @return ShowDevicesResult
-   */
-  List<ShowDevicesResult> getMatchedDevices(IShowDevicesPlan plan) throws 
MetadataException;
-  // endregion
-
   // region Interfaces for timeseries, measurement and schema info Query
 
   List<MeasurementPath> fetchSchema(
       PartialPath pathPattern, Map<Integer, Template> templateMap, boolean 
withTags)
       throws MetadataException;
 
-  /**
-   * Show timeseries.
-   *
-   * @param plan
-   * @throws MetadataException
-   */
-  List<ShowTimeSeriesResult> showTimeseries(IShowTimeSeriesPlan plan) throws 
MetadataException;
   // endregion
   // endregion
 
@@ -276,45 +255,11 @@ public interface ISchemaRegion {
 
   // region Interfaces for SchemaReader
 
-  default ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
-      throws MetadataException {
-    List<ShowDevicesResult> showDevicesResultList = 
getMatchedDevices(showDevicesPlan);
-    Iterator<ShowDevicesResult> iterator = showDevicesResultList.iterator();
-    return new ISchemaReader<IDeviceSchemaInfo>() {
-      @Override
-      public void close() throws Exception {}
-
-      @Override
-      public boolean hasNext() {
-        return iterator.hasNext();
-      }
-
-      @Override
-      public IDeviceSchemaInfo next() {
-        return iterator.next();
-      }
-    };
-  }
-
-  default ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
-      IShowTimeSeriesPlan showTimeSeriesPlan) throws MetadataException {
-    List<ShowTimeSeriesResult> showTimeSeriesResultList = 
showTimeseries(showTimeSeriesPlan);
-    Iterator<ShowTimeSeriesResult> iterator = 
showTimeSeriesResultList.iterator();
-    return new ISchemaReader<ITimeSeriesSchemaInfo>() {
-      @Override
-      public void close() throws Exception {}
-
-      @Override
-      public boolean hasNext() {
-        return iterator.hasNext();
-      }
-
-      @Override
-      public ITimeSeriesSchemaInfo next() {
-        return iterator.next();
-      }
-    };
-  }
+  ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException;
+
+  ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(IShowTimeSeriesPlan 
showTimeSeriesPlan)
+      throws MetadataException;
 
   ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan showNodesPlan)
       throws MetadataException;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
index 9f7565db98..c9d3633039 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
@@ -50,7 +50,6 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWri
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
@@ -64,7 +63,9 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTempla
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeleteTimeSeriesPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeleteTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.query.reader.ISchemaReader;
 import org.apache.iotdb.db.metadata.rescon.MemoryStatistics;
 import org.apache.iotdb.db.metadata.rescon.SchemaStatisticsManager;
@@ -85,6 +86,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -784,14 +786,6 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
     measurementMNode.setPreDeleted(false);
   }
 
-  private void deleteSingleTimeseriesInternal(PartialPath p) throws 
MetadataException, IOException {
-    deleteOneTimeseriesUpdateStatistics(p);
-    if (!isRecovering) {
-      writeToMLog(
-          
SchemaRegionWritePlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(p)));
-    }
-  }
-
   /**
    * @param path full path from root to leaf node
    * @return After delete if the schema region is empty, return its path, 
otherwise return null
@@ -842,18 +836,6 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
 
   // region Interfaces for Entity/Device info Query
 
-  /**
-   * Get all device paths and according database paths as ShowDevicesResult.
-   *
-   * @param plan ShowDevicesPlan which contains the path pattern and 
restriction params.
-   * @return ShowDevicesResult and the current offset of this region after 
traverse.
-   */
-  @Override
-  public List<ShowDevicesResult> getMatchedDevices(IShowDevicesPlan plan) 
throws MetadataException {
-    return mtree.getDevices(plan);
-  }
-  // endregion
-
   // region Interfaces for timeseries, measurement and schema info Query
 
   @Override
@@ -863,17 +845,6 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
     return mtree.fetchSchema(pathPattern, templateMap, withTags);
   }
 
-  @Override
-  public List<ShowTimeSeriesResult> showTimeseries(IShowTimeSeriesPlan plan)
-      throws MetadataException {
-    // show timeseries with index
-    if (plan.getKey() != null && plan.getValue() != null) {
-      return showTimeseriesWithIndex(plan);
-    } else {
-      return showTimeseriesWithoutIndex(plan);
-    }
-  }
-
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   private List<ShowTimeSeriesResult> 
showTimeseriesWithIndex(IShowTimeSeriesPlan plan)
       throws MetadataException {
@@ -921,24 +892,6 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
     return res;
   }
 
-  /**
-   * Get the result of ShowTimeseriesPlan
-   *
-   * @param plan show time series query plan
-   */
-  private List<ShowTimeSeriesResult> 
showTimeseriesWithoutIndex(IShowTimeSeriesPlan plan)
-      throws MetadataException {
-    return mtree.getAllMeasurementSchema(
-        plan,
-        offset -> {
-          try {
-            return tagManager.readTagFile(offset);
-          } catch (IOException e) {
-            logger.error("Failed to read tag and attribute info because {}", 
e.getMessage(), e);
-            return new Pair<>(Collections.emptyMap(), Collections.emptyMap());
-          }
-        });
-  }
   // endregion
   // endregion
 
@@ -1223,6 +1176,47 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
     return result;
   }
 
+  @Override
+  public ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException {
+    return mtree.getDeviceReader(showDevicesPlan);
+  }
+
+  @Override
+  public ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
+      IShowTimeSeriesPlan showTimeSeriesPlan) throws MetadataException {
+    if (showTimeSeriesPlan.getKey() != null && showTimeSeriesPlan.getValue() 
!= null) {
+      List<ShowTimeSeriesResult> showTimeSeriesResultList =
+          showTimeseriesWithIndex(showTimeSeriesPlan);
+      Iterator<ShowTimeSeriesResult> iterator = 
showTimeSeriesResultList.iterator();
+      return new ISchemaReader<ITimeSeriesSchemaInfo>() {
+        @Override
+        public void close() {}
+
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+
+        @Override
+        public ITimeSeriesSchemaInfo next() {
+          return iterator.next();
+        }
+      };
+    } else {
+      return mtree.getTimeSeriesReader(
+          showTimeSeriesPlan,
+          offset -> {
+            try {
+              return tagManager.readTagFile(offset);
+            } catch (IOException e) {
+              logger.error("Failed to read tag and attribute info because {}", 
e.getMessage(), e);
+              return new Pair<>(Collections.emptyMap(), 
Collections.emptyMap());
+            }
+          });
+    }
+  }
+
   @Override
   public ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan 
showNodesPlan)
       throws MetadataException {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
index 02845fed00..eeabf63f1a 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
@@ -48,7 +48,6 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWri
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowNodesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
-import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
@@ -60,20 +59,20 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeactivateTemplateP
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeleteTimeSeriesPlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTemplatePlan;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.query.reader.ISchemaReader;
 import org.apache.iotdb.db.metadata.rescon.MemoryStatistics;
 import org.apache.iotdb.db.metadata.rescon.SchemaStatisticsManager;
 import org.apache.iotdb.db.metadata.tag.TagManager;
 import org.apache.iotdb.db.metadata.template.Template;
-import org.apache.iotdb.db.metadata.utils.MetaUtils;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.external.api.ISeriesNumerMonitor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.utils.Pair;
-import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import org.slf4j.Logger;
@@ -84,6 +83,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -111,7 +111,6 @@ import static 
org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARA
  *   <li>Interfaces for auto create device
  *   <li>Interfaces for metadata info Query
  *       <ol>
- *         <li>Interfaces for Entity/Device info Query
  *         <li>Interfaces for timeseries, measurement and schema info Query
  *       </ol>
  *   <li>Interfaces for alias and tag/attribute operations
@@ -835,14 +834,6 @@ public class SchemaRegionSchemaFileImpl implements 
ISchemaRegion {
     }
   }
 
-  private void deleteSingleTimeseriesInternal(PartialPath p) throws 
MetadataException, IOException {
-    deleteOneTimeseriesUpdateStatistics(p);
-    if (!isRecovering) {
-      writeToMLog(
-          
SchemaRegionWritePlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(p)));
-    }
-  }
-
   /**
    * @param path full path from root to leaf node
    * @return After delete if the schema region is empty, return its path, 
otherwise return null
@@ -892,20 +883,6 @@ public class SchemaRegionSchemaFileImpl implements 
ISchemaRegion {
 
   // region Interfaces for metadata info Query
 
-  // region Interfaces for Entity/Device info Query
-
-  /**
-   * Get all device paths and according database paths as ShowDevicesResult.
-   *
-   * @param plan ShowDevicesPlan which contains the path pattern and 
restriction params.
-   * @return ShowDevicesResult and the current offset of this region after 
traverse.
-   */
-  @Override
-  public List<ShowDevicesResult> getMatchedDevices(IShowDevicesPlan plan) 
throws MetadataException {
-    return mtree.getDevices(plan);
-  }
-  // endregion
-
   // region Interfaces for timeseries, measurement and schema info Query
 
   @Override
@@ -915,17 +892,6 @@ public class SchemaRegionSchemaFileImpl implements 
ISchemaRegion {
     return mtree.fetchSchema(pathPattern, templateMap, withTags);
   }
 
-  @Override
-  public List<ShowTimeSeriesResult> showTimeseries(IShowTimeSeriesPlan plan)
-      throws MetadataException {
-    // show timeseries with index
-    if (plan.getKey() != null && plan.getValue() != null) {
-      return showTimeseriesWithIndex(plan);
-    } else {
-      return showTimeseriesWithoutIndex(plan);
-    }
-  }
-
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   private List<ShowTimeSeriesResult> 
showTimeseriesWithIndex(IShowTimeSeriesPlan plan)
       throws MetadataException {
@@ -952,9 +918,6 @@ public class SchemaRegionSchemaFileImpl implements 
ISchemaRegion {
         try {
           Pair<Map<String, String>, Map<String, String>> tagAndAttributePair =
               tagManager.readTagFile(leaf.getOffset());
-          IMeasurementSchema measurementSchema = leaf.getSchema();
-          Pair<String, String> deadbandInfo =
-              MetaUtils.parseDeadbandInfo(measurementSchema.getProps());
           res.add(
               new ShowTimeSeriesResult(
                   leaf.getFullPath(),
@@ -975,25 +938,6 @@ public class SchemaRegionSchemaFileImpl implements 
ISchemaRegion {
 
     return res;
   }
-
-  /**
-   * Get the result of ShowTimeseriesPlan
-   *
-   * @param plan show time series query plan
-   */
-  private List<ShowTimeSeriesResult> 
showTimeseriesWithoutIndex(IShowTimeSeriesPlan plan)
-      throws MetadataException {
-    return mtree.getAllMeasurementSchema(
-        plan,
-        offset -> {
-          try {
-            return tagManager.readTagFile(offset);
-          } catch (IOException e) {
-            logger.error("Failed to read tag and attribute info because {}", 
e.getMessage(), e);
-            return new Pair<>(Collections.emptyMap(), Collections.emptyMap());
-          }
-        });
-  }
   // endregion
   // endregion
 
@@ -1315,6 +1259,47 @@ public class SchemaRegionSchemaFileImpl implements 
ISchemaRegion {
     return result;
   }
 
+  @Override
+  public ISchemaReader<IDeviceSchemaInfo> getDeviceReader(IShowDevicesPlan 
showDevicesPlan)
+      throws MetadataException {
+    return mtree.getDeviceReader(showDevicesPlan);
+  }
+
+  @Override
+  public ISchemaReader<ITimeSeriesSchemaInfo> getTimeSeriesReader(
+      IShowTimeSeriesPlan showTimeSeriesPlan) throws MetadataException {
+    if (showTimeSeriesPlan.getKey() != null && showTimeSeriesPlan.getValue() 
!= null) {
+      List<ShowTimeSeriesResult> showTimeSeriesResultList =
+          showTimeseriesWithIndex(showTimeSeriesPlan);
+      Iterator<ShowTimeSeriesResult> iterator = 
showTimeSeriesResultList.iterator();
+      return new ISchemaReader<ITimeSeriesSchemaInfo>() {
+        @Override
+        public void close() {}
+
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+
+        @Override
+        public ITimeSeriesSchemaInfo next() {
+          return iterator.next();
+        }
+      };
+    } else {
+      return mtree.getTimeSeriesReader(
+          showTimeSeriesPlan,
+          offset -> {
+            try {
+              return tagManager.readTagFile(offset);
+            } catch (IOException e) {
+              logger.error("Failed to read tag and attribute info because {}", 
e.getMessage(), e);
+              return new Pair<>(Collections.emptyMap(), 
Collections.emptyMap());
+            }
+          });
+    }
+  }
+
   @Override
   public ISchemaReader<INodeSchemaInfo> getNodeReader(IShowNodesPlan 
showNodesPlan)
       throws MetadataException {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java
index f8a64eacbd..89a2c2cc80 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java
@@ -193,8 +193,7 @@ public class TagManager {
     return timeseries;
   }
 
-  public List<IMeasurementMNode> 
getMatchedTimeseriesInIndex(IShowTimeSeriesPlan plan)
-      throws MetadataException {
+  public List<IMeasurementMNode> 
getMatchedTimeseriesInIndex(IShowTimeSeriesPlan plan) {
     if (!tagIndex.containsKey(plan.getKey())) {
       return Collections.emptyList();
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/source/TimeSeriesSchemaSource.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/source/TimeSeriesSchemaSource.java
index 3ad0bb4cdf..337aaacd0a 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/source/TimeSeriesSchemaSource.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/source/TimeSeriesSchemaSource.java
@@ -91,7 +91,6 @@ public class TimeSeriesSchemaSource implements 
ISchemaSource<ITimeSeriesSchemaIn
   @Override
   public void transformToTsBlockColumns(
       ITimeSeriesSchemaInfo series, TsBlockBuilder builder, String database) {
-    Pair<Map<String, String>, Map<String, String>> tagAndAttribute = 
series.getTagAndAttribute();
     Pair<String, String> deadbandInfo = 
MetaUtils.parseDeadbandInfo(series.getSchema().getProps());
     builder.getTimeColumnBuilder().writeLong(0);
     builder.writeNullableText(0, series.getFullPath());
@@ -100,8 +99,8 @@ public class TimeSeriesSchemaSource implements 
ISchemaSource<ITimeSeriesSchemaIn
     builder.writeNullableText(3, series.getSchema().getType().toString());
     builder.writeNullableText(4, 
series.getSchema().getEncodingType().toString());
     builder.writeNullableText(5, 
series.getSchema().getCompressor().toString());
-    builder.writeNullableText(6, mapToString(tagAndAttribute.left));
-    builder.writeNullableText(7, mapToString(tagAndAttribute.right));
+    builder.writeNullableText(6, mapToString(series.getTags()));
+    builder.writeNullableText(7, mapToString(series.getAttributes()));
     builder.writeNullableText(8, deadbandInfo.left);
     builder.writeNullableText(9, deadbandInfo.right);
     builder.declarePosition();
diff --git 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
index 5f013f9d14..7b0b5362cf 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
@@ -22,7 +22,7 @@ package org.apache.iotdb.db.metadata.schemaRegion;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
-import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -42,7 +42,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-// todo add alias and tag test
 public class SchemaRegionAliasAndTagTest extends AbstractSchemaRegionTest {
 
   private static final Logger logger = 
LoggerFactory.getLogger(SchemaRegionAliasAndTagTest.class);
@@ -144,14 +143,15 @@ public class SchemaRegionAliasAndTagTest extends 
AbstractSchemaRegionTest {
   private void checkAliasAndTagsAndAttributes(
       String fullPath, String alias, Map<String, String> tags, Map<String, 
String> attributes) {
     try {
-      List<ShowTimeSeriesResult> result =
-          schemaRegion.showTimeseries(
+      List<ITimeSeriesSchemaInfo> result =
+          SchemaRegionTestUtil.showTimeseries(
+              schemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new 
PartialPath(fullPath)));
       Assert.assertEquals(1, result.size());
-      Assert.assertEquals(fullPath, result.get(0).getPath());
+      Assert.assertEquals(fullPath, result.get(0).getFullPath());
       Assert.assertEquals(alias, result.get(0).getAlias());
-      Assert.assertEquals(tags, result.get(0).getTag());
-      Assert.assertEquals(attributes, result.get(0).getAttribute());
+      Assert.assertEquals(tags, result.get(0).getTags());
+      Assert.assertEquals(attributes, result.get(0).getAttributes());
     } catch (Exception e) {
       logger.error(e.getMessage(), e);
       Assert.fail(e.getMessage());
@@ -160,12 +160,13 @@ public class SchemaRegionAliasAndTagTest extends 
AbstractSchemaRegionTest {
 
   private void checkAttributes(String fullPath, Map<String, String> 
attributes) {
     try {
-      List<ShowTimeSeriesResult> result =
-          schemaRegion.showTimeseries(
+      List<ITimeSeriesSchemaInfo> result =
+          SchemaRegionTestUtil.showTimeseries(
+              schemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new 
PartialPath(fullPath)));
       Assert.assertEquals(1, result.size());
-      Assert.assertEquals(fullPath, result.get(0).getPath());
-      Assert.assertEquals(attributes, result.get(0).getAttribute());
+      Assert.assertEquals(fullPath, result.get(0).getFullPath());
+      Assert.assertEquals(attributes, result.get(0).getAttributes());
     } catch (Exception e) {
       e.printStackTrace();
       Assert.fail(e.getMessage());
@@ -174,12 +175,13 @@ public class SchemaRegionAliasAndTagTest extends 
AbstractSchemaRegionTest {
 
   private void checkTags(String fullPath, Map<String, String> tags) {
     try {
-      List<ShowTimeSeriesResult> result =
-          schemaRegion.showTimeseries(
+      List<ITimeSeriesSchemaInfo> result =
+          SchemaRegionTestUtil.showTimeseries(
+              schemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new 
PartialPath(fullPath)));
       Assert.assertEquals(1, result.size());
-      Assert.assertEquals(fullPath, result.get(0).getPath());
-      Assert.assertEquals(tags, result.get(0).getTag());
+      Assert.assertEquals(fullPath, result.get(0).getFullPath());
+      Assert.assertEquals(tags, result.get(0).getTags());
     } catch (Exception e) {
       logger.error(e.getMessage(), e);
       Assert.fail(e.getMessage());
diff --git 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
index 5a5aa000cc..a37aa41791 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
@@ -30,7 +30,8 @@ import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionRead
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowNodesResult;
-import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -618,38 +619,44 @@ public class SchemaRegionBasicTest extends 
AbstractSchemaRegionTest {
 
     Assert.assertEquals(
         Collections.emptyList(),
-        schemaRegion.getMatchedDevices(
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.laptop.d0"))));
     Assert.assertEquals(
         Collections.singletonList(new ShowDevicesResult("root.laptop.d1", 
false)),
-        schemaRegion.getMatchedDevices(
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.laptop.d1"))));
     Assert.assertEquals(
         Collections.singletonList(new ShowDevicesResult("root.laptop.d2", 
false)),
-        schemaRegion.getMatchedDevices(
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.laptop.d2"))));
     Assert.assertEquals(
         Collections.singletonList(new ShowDevicesResult("root.laptop", false)),
-        schemaRegion.getMatchedDevices(
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.laptop"))));
     Assert.assertEquals(
         Collections.singletonList(new ShowDevicesResult("root.laptop", false)),
-        schemaRegion.getMatchedDevices(
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.*"))));
 
-    List<ShowDevicesResult> expectedList =
+    List<IDeviceSchemaInfo> expectedList =
         Arrays.asList(
             new ShowDevicesResult("root.laptop", false),
             new ShowDevicesResult("root.laptop.d1", false),
             new ShowDevicesResult("root.laptop.d2", false),
             new ShowDevicesResult("root.laptop.d1.s2", false));
 
-    List<ShowDevicesResult> actualResult =
-        schemaRegion.getMatchedDevices(
+    List<IDeviceSchemaInfo> actualResult =
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.**")));
     // Compare hash sets because the order does not matter.
-    HashSet<ShowDevicesResult> expectedHashset = new HashSet<>(expectedList);
-    HashSet<ShowDevicesResult> actualHashset = new HashSet<>(actualResult);
+    HashSet<IDeviceSchemaInfo> expectedHashset = new HashSet<>(expectedList);
+    HashSet<IDeviceSchemaInfo> actualHashset = new HashSet<>(actualResult);
     Assert.assertEquals(expectedHashset, actualHashset);
 
     expectedList =
@@ -658,7 +665,8 @@ public class SchemaRegionBasicTest extends 
AbstractSchemaRegionTest {
             new ShowDevicesResult("root.laptop.d2", false));
 
     actualResult =
-        schemaRegion.getMatchedDevices(
+        SchemaRegionTestUtil.getMatchedDevices(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowDevicesPlan(new 
PartialPath("root.**.d*")));
     // Compare hash sets because the order does not matter.
     expectedHashset = new HashSet<>(expectedList);
@@ -681,8 +689,10 @@ public class SchemaRegionBasicTest extends 
AbstractSchemaRegionTest {
             "root.laptop.d2.s2"));
 
     // case 01: all timeseries
-    List<ShowTimeSeriesResult> result =
-        schemaRegion.showTimeseries(
+
+    List<ITimeSeriesSchemaInfo> result =
+        SchemaRegionTestUtil.showTimeseries(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new 
PartialPath("root.**")));
     HashSet<String> expectedPathList =
         new HashSet<>(
@@ -697,13 +707,14 @@ public class SchemaRegionBasicTest extends 
AbstractSchemaRegionTest {
     Assert.assertEquals(expectedSize, result.size());
     HashSet<String> actualPathList = new HashSet<>();
     for (int index = 0; index < expectedSize; index++) {
-      actualPathList.add(result.get(index).getPath());
+      actualPathList.add(result.get(index).getFullPath());
     }
     Assert.assertEquals(expectedPathList, actualPathList);
 
     // case 02: some timeseries, pattern "root.**.s*"
     result =
-        schemaRegion.showTimeseries(
+        SchemaRegionTestUtil.showTimeseries(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new 
PartialPath("root.**.s*")));
     expectedPathList =
         new HashSet<>(
@@ -716,7 +727,7 @@ public class SchemaRegionBasicTest extends 
AbstractSchemaRegionTest {
     Assert.assertEquals(expectedSize, result.size());
     actualPathList = new HashSet<>();
     for (int index = 0; index < expectedSize; index++) {
-      actualPathList.add(result.get(index).getPath());
+      actualPathList.add(result.get(index).getFullPath());
     }
     Assert.assertEquals(expectedPathList, actualPathList);
   }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
index 19bd2958f8..c6540041f2 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
@@ -28,7 +28,8 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.MetadataConstant;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
-import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.query.info.ISchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -41,6 +42,7 @@ import org.junit.Test;
 
 import java.io.File;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -94,14 +96,16 @@ public class SchemaRegionManagementTest extends 
AbstractSchemaRegionTest {
 
       schemaRegion.loadSnapshot(snapshotDir);
 
-      List<ShowTimeSeriesResult> result =
-          schemaRegion.showTimeseries(
+      List<ITimeSeriesSchemaInfo> result =
+          SchemaRegionTestUtil.showTimeseries(
+              schemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
                   new PartialPath("root.sg.**"), false, "tag-key", 
"tag-value"));
 
-      ShowTimeSeriesResult seriesResult = result.get(0);
-      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), 
seriesResult.getPath());
-      Map<String, String> resultTagMap = seriesResult.getTag();
+      ITimeSeriesSchemaInfo seriesResult = result.get(0);
+      Assert.assertEquals(
+          new PartialPath("root.sg.d1.s1").getFullPath(), 
seriesResult.getFullPath());
+      Map<String, String> resultTagMap = seriesResult.getTags();
       Assert.assertEquals(1, resultTagMap.size());
       Assert.assertEquals("tag-value", resultTagMap.get("tag-key"));
 
@@ -110,24 +114,29 @@ public class SchemaRegionManagementTest extends 
AbstractSchemaRegionTest {
       ISchemaRegion newSchemaRegion = getSchemaRegion("root.sg", 0);
       newSchemaRegion.loadSnapshot(snapshotDir);
       result =
-          newSchemaRegion.showTimeseries(
+          SchemaRegionTestUtil.showTimeseries(
+              newSchemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
                   new PartialPath("root.sg.**"), false, "tag-key", 
"tag-value"));
 
       seriesResult = result.get(0);
-      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), 
seriesResult.getPath());
-      resultTagMap = seriesResult.getTag();
+      Assert.assertEquals(
+          new PartialPath("root.sg.d1.s1").getFullPath(), 
seriesResult.getFullPath());
+      resultTagMap = seriesResult.getTags();
       Assert.assertEquals(1, resultTagMap.size());
       Assert.assertEquals("tag-value", resultTagMap.get("tag-key"));
 
       result =
-          newSchemaRegion.showTimeseries(
+          SchemaRegionTestUtil.showTimeseries(
+              newSchemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
                   new PartialPath("root.sg.*.s1"),
                   Collections.singletonMap(template.getId(), template)));
-      result.sort(ShowTimeSeriesResult::compareTo);
-      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), 
result.get(0).getPath());
-      Assert.assertEquals(new PartialPath("root.sg.d2.s1").getFullPath(), 
result.get(1).getPath());
+      result.sort(Comparator.comparing(ISchemaInfo::getFullPath));
+      Assert.assertEquals(
+          new PartialPath("root.sg.d1.s1").getFullPath(), 
result.get(0).getFullPath());
+      Assert.assertEquals(
+          new PartialPath("root.sg.d2.s1").getFullPath(), 
result.get(1).getFullPath());
 
     } finally {
       
config.setSchemaRegionConsensusProtocolClass(schemaRegionConsensusProtocolClass);
@@ -167,8 +176,9 @@ public class SchemaRegionManagementTest extends 
AbstractSchemaRegionTest {
 
       schemaRegion.loadSnapshot(snapshotDir);
 
-      List<ShowTimeSeriesResult> result =
-          schemaRegion.showTimeseries(
+      List<ITimeSeriesSchemaInfo> result =
+          SchemaRegionTestUtil.showTimeseries(
+              schemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
                   new PartialPath("root.sg.**"), false, "tag-key", 
"tag-value"));
 
@@ -179,7 +189,8 @@ public class SchemaRegionManagementTest extends 
AbstractSchemaRegionTest {
       ISchemaRegion newSchemaRegion = getSchemaRegion("root.sg", 0);
       newSchemaRegion.loadSnapshot(snapshotDir);
       result =
-          newSchemaRegion.showTimeseries(
+          SchemaRegionTestUtil.showTimeseries(
+              newSchemaRegion,
               SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
                   new PartialPath("root.sg.**"), false, "tag-key", 
"tag-value"));
 
diff --git 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
index f66c083b89..7cd449c039 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
@@ -24,7 +24,8 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.path.PathPatternTree;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
-import 
org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.query.info.ISchemaInfo;
+import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -232,11 +233,12 @@ public class SchemaRegionTemplateTest extends 
AbstractSchemaRegionTest {
     }
 
     // check show timeseries
-    List<ShowTimeSeriesResult> result =
-        schemaRegion.showTimeseries(
+    List<ITimeSeriesSchemaInfo> result =
+        SchemaRegionTestUtil.showTimeseries(
+            schemaRegion,
             SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
                 new PartialPath("root.**"), templateMap));
-    result.sort(ShowTimeSeriesResult::compareTo);
+    result.sort(Comparator.comparing(ISchemaInfo::getFullPath));
     for (int i = 0; i < result.size(); i++) {
       Assert.assertEquals(expectedTimeseries.get(i), 
result.get(i).getFullPath());
     }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
index da23f315d4..75cc827e06 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
@@ -22,6 +22,8 @@ import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
 import 
org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
 import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
@@ -215,8 +217,7 @@ public class SchemaRegionTestUtil {
   }
 
   public static List<String> getPathsUsingTemplate(
-      ISchemaRegion schemaRegion, PartialPath pathPattern, int templateId)
-      throws MetadataException {
+      ISchemaRegion schemaRegion, PartialPath pathPattern, int templateId) {
     List<String> result = new ArrayList<>();
     try (ISchemaReader<IDeviceSchemaInfo> deviceReader =
         schemaRegion.getDeviceReader(
@@ -232,8 +233,7 @@ public class SchemaRegionTestUtil {
   }
 
   public static List<PartialPath> getNodesListInGivenLevel(
-      ISchemaRegion schemaRegion, PartialPath pathPattern, int nodeLevel, 
boolean isPrefixMatch)
-      throws MetadataException {
+      ISchemaRegion schemaRegion, PartialPath pathPattern, int nodeLevel, 
boolean isPrefixMatch) {
     List<PartialPath> result = new ArrayList<>();
     try (ISchemaReader<INodeSchemaInfo> nodeReader =
         schemaRegion.getNodeReader(
@@ -248,7 +248,7 @@ public class SchemaRegionTestUtil {
   }
 
   public static Set<INodeSchemaInfo> getChildNodePathInNextLevel(
-      ISchemaRegion schemaRegion, PartialPath pathPattern) throws 
MetadataException {
+      ISchemaRegion schemaRegion, PartialPath pathPattern) {
     Set<INodeSchemaInfo> result = new HashSet<>();
     try (ISchemaReader<INodeSchemaInfo> nodeReader =
         schemaRegion.getNodeReader(
@@ -262,4 +262,30 @@ public class SchemaRegionTestUtil {
     }
     return result;
   }
+
+  public static List<ITimeSeriesSchemaInfo> showTimeseries(
+      ISchemaRegion schemaRegion, IShowTimeSeriesPlan plan) {
+    List<ITimeSeriesSchemaInfo> result = new ArrayList<>();
+    try (ISchemaReader<ITimeSeriesSchemaInfo> reader = 
schemaRegion.getTimeSeriesReader(plan)) {
+      while (reader.hasNext()) {
+        result.add(reader.next());
+      }
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+    return result;
+  }
+
+  public static List<IDeviceSchemaInfo> getMatchedDevices(
+      ISchemaRegion schemaRegion, IShowDevicesPlan plan) {
+    List<IDeviceSchemaInfo> result = new ArrayList<>();
+    try (ISchemaReader<IDeviceSchemaInfo> reader = 
schemaRegion.getDeviceReader(plan)) {
+      while (reader.hasNext()) {
+        result.add(reader.next());
+      }
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+    return result;
+  }
 }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
 
b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
index 9b90fc14c5..8a3914d8a7 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
@@ -44,7 +44,6 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.read.common.block.column.BinaryColumn;
 import org.apache.iotdb.tsfile.utils.Binary;
-import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import org.junit.Assert;
@@ -181,7 +180,8 @@ public class SchemaQueryScanOperatorTest {
             .thenReturn(
                 new MeasurementSchema(
                     "s" + i, TSDataType.INT32, TSEncoding.PLAIN, 
CompressionType.UNCOMPRESSED));
-        Mockito.when(timeSeriesSchemaInfo.getTagAndAttribute()).thenReturn(new 
Pair<>(null, null));
+        Mockito.when(timeSeriesSchemaInfo.getTags()).thenReturn(null);
+        Mockito.when(timeSeriesSchemaInfo.getAttributes()).thenReturn(null);
         showTimeSeriesResults.add(timeSeriesSchemaInfo);
       }
       Iterator<ITimeSeriesSchemaInfo> iterator = 
showTimeSeriesResults.iterator();

Reply via email to