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

tanxinyu pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/ty/TableModelGrammar by this 
push:
     new 002d779e68c Feat/table support show cluster regions datanodes 
confignodes (#12852)
002d779e68c is described below

commit 002d779e68cd002dffd731052dce80d445871f03
Author: Christofer Dutz <[email protected]>
AuthorDate: Fri Jul 19 08:55:56 2024 +0200

    Feat/table support show cluster regions datanodes confignodes (#12852)
---
 .../protocol/thrift/impl/ClientRPCServiceImpl.java |   5 +-
 .../iotdb/db/queryengine/plan/Coordinator.java     |  14 ++-
 .../execution/config/TableConfigTaskVisitor.java   |  45 +++++++++
 ...TaskVisitor.java => TreeConfigTaskVisitor.java} |   2 +-
 .../config/executor/ClusterConfigTaskExecutor.java |  67 ++++++++++++++
 .../config/executor/IConfigTaskExecutor.java       |  12 +++
 .../metadata/relational/ShowConfigNodesTask.java   |  80 ++++++++++++++++
 .../metadata/relational/ShowDataNodesTask.java     |  85 +++++++++++++++++
 .../plan/relational/sql/ast/AstVisitor.java        |  16 ++++
 .../plan/relational/sql/ast/ShowCluster.java       |  90 ++++++++++++++++++
 .../plan/relational/sql/ast/ShowConfigNodes.java   |  66 +++++++++++++
 .../plan/relational/sql/ast/ShowDataNodes.java     |  66 +++++++++++++
 .../plan/relational/sql/ast/ShowRegions.java       | 103 +++++++++++++++++++++
 .../plan/relational/sql/parser/AstBuilder.java     |  37 +++++++-
 .../db/relational/grammar/sql/RelationalSql.g4     |   4 +-
 15 files changed, 681 insertions(+), 11 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 4187aadb8dc..13d6e9d4216 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -354,9 +354,12 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
                   TSStatusCode.SQL_PARSE_ERROR, "This operation type is not 
supported"));
         }
 
-        queryId = SESSION_MANAGER.requestQueryId(clientSession, 
req.statementId);
+        // TODO: permission check
 
         // TODO audit log, quota, StatementType
+
+        queryId = SESSION_MANAGER.requestQueryId(clientSession, 
req.statementId);
+
         result =
             COORDINATOR.executeForTableModel(
                 s,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 4a79cad8b27..a036d886e77 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -43,8 +43,8 @@ import 
org.apache.iotdb.db.queryengine.plan.execution.ExecutionResult;
 import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
 import org.apache.iotdb.db.queryengine.plan.execution.QueryExecution;
 import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigExecution;
-import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskVisitor;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.TableConfigTaskVisitor;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.TreeConfigTaskVisitor;
 import org.apache.iotdb.db.queryengine.plan.planner.TreeModelPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.RelationalModelPlanner;
@@ -53,7 +53,11 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateTable;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DescribeTable;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropTable;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
@@ -217,7 +221,7 @@ public class Coordinator {
           queryContext,
           statement.getType(),
           executor,
-          statement.accept(new ConfigTaskVisitor(), queryContext));
+          statement.accept(new TreeConfigTaskVisitor(), queryContext));
     }
     TreeModelPlanner treeModelPlanner =
         new TreeModelPlanner(
@@ -273,7 +277,11 @@ public class Coordinator {
         || statement instanceof CreateTable
         || statement instanceof DescribeTable
         || statement instanceof ShowTables
-        || statement instanceof DropTable) {
+        || statement instanceof DropTable
+        || statement instanceof ShowCluster
+        || statement instanceof ShowRegions
+        || statement instanceof ShowDataNodes
+        || statement instanceof ShowConfigNodes) {
       return new ConfigExecution(
           queryContext,
           null,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
index e05a2d740ba..d2024cadc39 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
@@ -25,11 +25,15 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.protocol.session.IClientSession;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterTask;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowRegionTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.CreateDBTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.CreateTableTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.DescribeTableTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.DropDBTask;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.ShowConfigNodesTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.ShowDBTask;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.ShowDataNodesTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.ShowTablesTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.UseDBTask;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -47,10 +51,16 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LongLiteral;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Node;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Property;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import 
org.apache.iotdb.db.queryengine.plan.relational.type.TypeNotFoundException;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowClusterStatement;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowRegionStatement;
 
 import org.apache.tsfile.enums.TSDataType;
 
@@ -105,6 +115,41 @@ public class TableConfigTaskVisitor extends 
AstVisitor<IConfigTask, MPPQueryCont
     return new ShowDBTask(node);
   }
 
+  @Override
+  protected IConfigTask visitShowCluster(ShowCluster showCluster, 
MPPQueryContext context) {
+    context.setQueryType(QueryType.READ);
+    // As the implementation is identical, we'll simply translate to the
+    // corresponding tree-model variant and execute that.
+    ShowClusterStatement treeStatement = new ShowClusterStatement();
+    treeStatement.setDetails(showCluster.getDetails().orElse(false));
+    return new ShowClusterTask(treeStatement);
+  }
+
+  @Override
+  protected IConfigTask visitShowRegions(ShowRegions showRegions, 
MPPQueryContext context) {
+    context.setQueryType(QueryType.READ);
+    // As the implementation is identical, we'll simply translate to the
+    // corresponding tree-model variant and execute that.
+    ShowRegionStatement treeStatement = new ShowRegionStatement();
+    treeStatement.setRegionType(showRegions.getRegionType());
+    treeStatement.setStorageGroups(showRegions.getDatabases());
+    treeStatement.setNodeIds(showRegions.getNodeIds());
+    return new ShowRegionTask(treeStatement);
+  }
+
+  @Override
+  protected IConfigTask visitShowDataNodes(
+      ShowDataNodes showDataNodesStatement, MPPQueryContext context) {
+    context.setQueryType(QueryType.READ);
+    return new ShowDataNodesTask(showDataNodesStatement);
+  }
+
+  protected IConfigTask visitShowConfigNodes(
+      ShowConfigNodes showConfigNodesStatement, MPPQueryContext context) {
+    context.setQueryType(QueryType.READ);
+    return new ShowConfigNodesTask(showConfigNodesStatement);
+  }
+
   @Override
   protected IConfigTask visitCreateTable(final CreateTable node, final 
MPPQueryContext context) {
     context.setQueryType(QueryType.WRITE);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
similarity index 99%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
index e9b36c80c91..1704d034b01 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
@@ -163,7 +163,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.sys.quota.ShowThrottleQuot
 
 import org.apache.tsfile.exception.NotImplementedException;
 
-public class ConfigTaskVisitor extends StatementVisitor<IConfigTask, 
MPPQueryContext> {
+public class TreeConfigTaskVisitor extends StatementVisitor<IConfigTask, 
MPPQueryContext> {
 
   @Override
   public IConfigTask visitNode(StatementNode node, MPPQueryContext context) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index aebd1792034..71f4f12df8e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -174,7 +174,11 @@ import 
org.apache.iotdb.db.queryengine.plan.expression.visitor.TransformToViewEx
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.AlterLogicalViewNode;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDatabaseStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotListStatement;
@@ -2790,6 +2794,69 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
     return future;
   }
 
+  @Override
+  public SettableFuture<ConfigTaskResult> showCluster(ShowCluster showCluster) 
{
+    // As the implementation is identical, we'll simply translate to the
+    // corresponding tree-model variant and execute that.
+    ShowClusterStatement treeStatement = new ShowClusterStatement();
+    treeStatement.setDetails(showCluster.getDetails().orElse(false));
+    return showCluster(treeStatement);
+  }
+
+  @Override
+  public SettableFuture<ConfigTaskResult> showRegions(ShowRegions showRegions) 
{
+    // As the implementation is identical, we'll simply translate to the
+    // corresponding tree-model variant and execute that.
+    ShowRegionStatement treeStatement = new ShowRegionStatement();
+    treeStatement.setRegionType(showRegions.getRegionType());
+    treeStatement.setStorageGroups(showRegions.getDatabases());
+    treeStatement.setNodeIds(showRegions.getNodeIds());
+    return showRegion(treeStatement);
+  }
+
+  @Override
+  public SettableFuture<ConfigTaskResult> showDataNodes(ShowDataNodes 
showDataNodes) {
+    SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+    TShowDataNodesResp showDataNodesResp = new TShowDataNodesResp();
+    try (ConfigNodeClient client =
+        
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
+      showDataNodesResp = client.showDataNodes();
+      if (showDataNodesResp.getStatus().getCode() != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+        future.setException(
+            new IoTDBException(
+                showDataNodesResp.getStatus().message, 
showDataNodesResp.getStatus().code));
+        return future;
+      }
+    } catch (ClientManagerException | TException e) {
+      future.setException(e);
+    }
+    // build TSBlock
+    ShowDataNodesTask.buildTSBlock(showDataNodesResp, future);
+    return future;
+  }
+
+  @Override
+  public SettableFuture<ConfigTaskResult> showConfigNodes(ShowConfigNodes 
showConfigNodes) {
+    SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+    TShowConfigNodesResp showConfigNodesResp = new TShowConfigNodesResp();
+    try (ConfigNodeClient client =
+        
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
+      showConfigNodesResp = client.showConfigNodes();
+      if (showConfigNodesResp.getStatus().getCode()
+          != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+        future.setException(
+            new IoTDBException(
+                showConfigNodesResp.getStatus().message, 
showConfigNodesResp.getStatus().code));
+        return future;
+      }
+    } catch (ClientManagerException | TException e) {
+      future.setException(e);
+    }
+    // build TSBlock
+    ShowConfigNodesTask.buildTSBlock(showConfigNodesResp, future);
+    return future;
+  }
+
   @Override
   public SettableFuture<ConfigTaskResult> useDatabase(Use useDB, 
IClientSession clientSession) {
     SettableFuture<ConfigTaskResult> future = SettableFuture.create();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
index e43111a7b92..954f74f3897 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
@@ -33,7 +33,11 @@ import 
org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.AlterLogicalViewNode;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDatabaseStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotListStatement;
@@ -258,6 +262,14 @@ public interface IConfigTaskExecutor {
 
   SettableFuture<ConfigTaskResult> showDatabases(ShowDB showDB);
 
+  SettableFuture<ConfigTaskResult> showCluster(ShowCluster showCluster);
+
+  SettableFuture<ConfigTaskResult> showRegions(ShowRegions showRegions);
+
+  SettableFuture<ConfigTaskResult> showDataNodes(ShowDataNodes showDataNodes);
+
+  SettableFuture<ConfigTaskResult> showConfigNodes(ShowConfigNodes 
showConfigNodes);
+
   SettableFuture<ConfigTaskResult> useDatabase(Use useDB, IClientSession 
clientSession);
 
   SettableFuture<ConfigTaskResult> dropDatabase(DropDB dropDB);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowConfigNodesTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowConfigNodesTask.java
new file mode 100644
index 00000000000..5b0ac00068d
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowConfigNodesTask.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational;
+
+import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeInfo;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
+import org.apache.iotdb.db.queryengine.common.header.ColumnHeader;
+import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant;
+import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
+import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory;
+import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
+import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
+import org.apache.iotdb.rpc.TSStatusCode;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.tsfile.utils.BytesUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class ShowConfigNodesTask implements IConfigTask {
+
+  private final ShowConfigNodes showConfigNodes;
+
+  public ShowConfigNodesTask(ShowConfigNodes showConfigNodes) {
+    this.showConfigNodes = showConfigNodes;
+  }
+
+  @Override
+  public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor 
configTaskExecutor)
+      throws InterruptedException {
+    return configTaskExecutor.showConfigNodes(showConfigNodes);
+  }
+
+  public static void buildTSBlock(
+      TShowConfigNodesResp showConfigNodesResp, 
SettableFuture<ConfigTaskResult> future) {
+    List<TSDataType> outputDataTypes =
+        ColumnHeaderConstant.showConfigNodesColumnHeaders.stream()
+            .map(ColumnHeader::getColumnType)
+            .collect(Collectors.toList());
+    TsBlockBuilder builder = new TsBlockBuilder(outputDataTypes);
+    if (showConfigNodesResp.getConfigNodesInfoList() != null) {
+      for (TConfigNodeInfo configNodeInfo : 
showConfigNodesResp.getConfigNodesInfoList()) {
+        builder.getTimeColumnBuilder().writeLong(0L);
+        builder.getColumnBuilder(0).writeInt(configNodeInfo.getConfigNodeId());
+        
builder.getColumnBuilder(1).writeBinary(BytesUtils.valueOf(configNodeInfo.getStatus()));
+        builder
+            .getColumnBuilder(2)
+            
.writeBinary(BytesUtils.valueOf(configNodeInfo.getInternalAddress()));
+        builder.getColumnBuilder(3).writeInt(configNodeInfo.getInternalPort());
+        
builder.getColumnBuilder(4).writeBinary(BytesUtils.valueOf(configNodeInfo.getRoleType()));
+        builder.declarePosition();
+      }
+    }
+    DatasetHeader datasetHeader = 
DatasetHeaderFactory.getShowConfigNodesHeader();
+    future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS, 
builder.build(), datasetHeader));
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDataNodesTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDataNodesTask.java
new file mode 100644
index 00000000000..1ea2533296f
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/relational/ShowDataNodesTask.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational;
+
+import org.apache.iotdb.confignode.rpc.thrift.TDataNodeInfo;
+import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
+import org.apache.iotdb.db.queryengine.common.header.ColumnHeader;
+import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant;
+import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
+import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory;
+import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
+import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask;
+import 
org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes;
+import org.apache.iotdb.rpc.TSStatusCode;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.tsfile.utils.BytesUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class ShowDataNodesTask implements IConfigTask {
+
+  private final ShowDataNodes showDataNodes;
+
+  public ShowDataNodesTask(ShowDataNodes showDataNodes) {
+    this.showDataNodes = showDataNodes;
+  }
+
+  @Override
+  public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor 
configTaskExecutor)
+      throws InterruptedException {
+    return configTaskExecutor.showDataNodes(showDataNodes);
+  }
+
+  public static void buildTSBlock(
+      TShowDataNodesResp showDataNodesResp, SettableFuture<ConfigTaskResult> 
future) {
+    List<TSDataType> outputDataTypes =
+        ColumnHeaderConstant.showDataNodesColumnHeaders.stream()
+            .map(ColumnHeader::getColumnType)
+            .collect(Collectors.toList());
+    TsBlockBuilder builder = new TsBlockBuilder(outputDataTypes);
+    if (showDataNodesResp.getDataNodesInfoList() != null) {
+      for (TDataNodeInfo dataNodeInfo : 
showDataNodesResp.getDataNodesInfoList()) {
+        builder.getTimeColumnBuilder().writeLong(0L);
+        builder.getColumnBuilder(0).writeInt(dataNodeInfo.getDataNodeId());
+        builder
+            .getColumnBuilder(1)
+            .writeBinary(
+                BytesUtils.valueOf(
+                    dataNodeInfo.getStatus() == null ? "" : 
dataNodeInfo.getStatus()));
+
+        
builder.getColumnBuilder(2).writeBinary(BytesUtils.valueOf(dataNodeInfo.getRpcAddresss()));
+        builder.getColumnBuilder(3).writeInt(dataNodeInfo.getRpcPort());
+        builder.getColumnBuilder(4).writeInt(dataNodeInfo.getDataRegionNum());
+
+        
builder.getColumnBuilder(5).writeInt(dataNodeInfo.getSchemaRegionNum());
+        builder.declarePosition();
+      }
+    }
+    DatasetHeader datasetHeader = 
DatasetHeaderFactory.getShowDataNodesHeader();
+    future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS, 
builder.build(), datasetHeader));
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
index d9b54da1f6f..dcf2c6c36d5 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java
@@ -331,6 +331,22 @@ public abstract class AstVisitor<R, C> {
     return visitStatement(node, context);
   }
 
+  protected R visitShowCluster(ShowCluster node, C context) {
+    return visitStatement(node, context);
+  }
+
+  protected R visitShowRegions(ShowRegions node, C context) {
+    return visitStatement(node, context);
+  }
+
+  protected R visitShowDataNodes(ShowDataNodes node, C context) {
+    return visitStatement(node, context);
+  }
+
+  protected R visitShowConfigNodes(ShowConfigNodes node, C context) {
+    return visitStatement(node, context);
+  }
+
   protected R visitRenameTable(RenameTable node, C context) {
     return visitStatement(node, context);
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java
new file mode 100644
index 00000000000..d7ea18642b6
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.requireNonNull;
+
+public class ShowCluster extends Statement {
+
+  private final boolean details;
+
+  public ShowCluster() {
+    super(null);
+    this.details = false;
+  }
+
+  public ShowCluster(NodeLocation location) {
+    super(requireNonNull(location, "location is null"));
+    this.details = false;
+  }
+
+  public ShowCluster(Boolean withDetails) {
+    super(null);
+    this.details = requireNonNull(withDetails, "details is null");
+  }
+
+  public ShowCluster(NodeLocation location, Boolean withDetails) {
+    super(requireNonNull(location, "location is null"));
+    this.details = requireNonNull(withDetails, "details is null");
+  }
+
+  public Optional<Boolean> getDetails() {
+    return Optional.of(details);
+  }
+
+  @Override
+  public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
+    return visitor.visitShowCluster(this, context);
+  }
+
+  @Override
+  public List<Node> getChildren() {
+    return ImmutableList.of();
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(details);
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if ((obj == null) || (getClass() != obj.getClass())) {
+      return false;
+    }
+    ShowCluster o = (ShowCluster) obj;
+    return Objects.equals(details, o.details);
+  }
+
+  @Override
+  public String toString() {
+    return toStringHelper(this).add("details", details).toString();
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java
new file mode 100644
index 00000000000..8139789f77b
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.requireNonNull;
+
+public class ShowConfigNodes extends Statement {
+
+  public ShowConfigNodes() {
+    super(null);
+  }
+
+  public ShowConfigNodes(NodeLocation location) {
+    super(requireNonNull(location, "location is null"));
+  }
+
+  @Override
+  public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
+    return visitor.visitShowConfigNodes(this, context);
+  }
+
+  @Override
+  public List<Node> getChildren() {
+    return ImmutableList.of();
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    return (obj != null) && (getClass() == obj.getClass());
+  }
+
+  @Override
+  public String toString() {
+    return toStringHelper(this).toString();
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java
new file mode 100644
index 00000000000..c95f5b9cbab
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.requireNonNull;
+
+public class ShowDataNodes extends Statement {
+
+  public ShowDataNodes() {
+    super(null);
+  }
+
+  public ShowDataNodes(NodeLocation location) {
+    super(requireNonNull(location, "location is null"));
+  }
+
+  @Override
+  public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
+    return visitor.visitShowDataNodes(this, context);
+  }
+
+  @Override
+  public List<Node> getChildren() {
+    return ImmutableList.of();
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    return (obj != null) && (getClass() == obj.getClass());
+  }
+
+  @Override
+  public String toString() {
+    return toStringHelper(this).toString();
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java
new file mode 100644
index 00000000000..475dcdb6057
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
+
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
+import org.apache.iotdb.commons.path.PartialPath;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.requireNonNull;
+
+public class ShowRegions extends Statement {
+
+  private final TConsensusGroupType regionType;
+  private final List<PartialPath> databases;
+  private final List<Integer> nodeIds;
+
+  public ShowRegions(
+      TConsensusGroupType regionType, List<PartialPath> databases, 
List<Integer> nodeIds) {
+    super(null);
+    this.regionType = regionType;
+    this.databases = databases;
+    this.nodeIds = nodeIds;
+  }
+
+  public ShowRegions(
+      NodeLocation location,
+      TConsensusGroupType regionType,
+      List<PartialPath> storageGroups,
+      List<Integer> nodeIds) {
+    super(requireNonNull(location, "location is null"));
+    this.regionType = regionType;
+    this.databases = requireNonNull(storageGroups, "databases is null");
+    this.nodeIds = requireNonNull(nodeIds, "nodeIds is null");
+  }
+
+  public TConsensusGroupType getRegionType() {
+    return regionType;
+  }
+
+  public List<PartialPath> getDatabases() {
+    return databases;
+  }
+
+  public List<Integer> getNodeIds() {
+    return nodeIds;
+  }
+
+  @Override
+  public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
+    return visitor.visitShowRegions(this, context);
+  }
+
+  @Override
+  public List<Node> getChildren() {
+    return ImmutableList.of();
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    ShowRegions that = (ShowRegions) o;
+    return regionType == that.regionType
+        && Objects.equals(databases, that.databases)
+        && Objects.equals(nodeIds, that.nodeIds);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(regionType, databases, nodeIds);
+  }
+
+  @Override
+  public String toString() {
+    return toStringHelper(this)
+        .add("regionType", regionType)
+        .add("databases", databases)
+        .add("nodeIds", nodeIds)
+        .toString();
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
index ef2a3dfe5e8..f69ba470c95 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
@@ -19,6 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.parser;
 
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
+import org.apache.iotdb.commons.exception.IllegalPathException;
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
 import org.apache.iotdb.db.exception.sql.SemanticException;
@@ -101,8 +104,12 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SearchedCaseExpre
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SelectItem;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowIndex;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SimpleCaseExpression;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SimpleGroupBy;
@@ -141,6 +148,7 @@ import javax.annotation.Nullable;
 import java.time.ZoneId;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Deque;
 import java.util.Iterator;
 import java.util.List;
@@ -409,23 +417,44 @@ public class AstBuilder extends 
RelationalSqlBaseVisitor<Node> {
 
   @Override
   public Node 
visitShowClusterStatement(RelationalSqlParser.ShowClusterStatementContext ctx) {
-    return super.visitShowClusterStatement(ctx);
+    boolean details = ctx.DETAILS() != null;
+    return new ShowCluster(details);
   }
 
   @Override
   public Node 
visitShowRegionsStatement(RelationalSqlParser.ShowRegionsStatementContext ctx) {
-    return super.visitShowRegionsStatement(ctx);
+    TConsensusGroupType regionType = null;
+    if (ctx.DATA() != null) {
+      regionType = TConsensusGroupType.DataRegion;
+    } else if (ctx.SCHEMA() != null) {
+      regionType = TConsensusGroupType.SchemaRegion;
+    }
+    List<PartialPath> databases = null;
+    if (ctx.identifier() != null) {
+      try {
+        // When using the table model, only single level databases are allowed 
to be used.
+        // Therefore, the "root." prefix is omitted from the query syntax, but 
we need to
+        // add it back before querying the server.
+        databases =
+            Collections.singletonList(new PartialPath("root." + 
ctx.identifier().getText()));
+      } catch (IllegalPathException e) {
+        throw new RuntimeException(e);
+      }
+    }
+    // TODO: This will be left untouched for now, well add filtering later on.
+    List<Integer> nodeIds = null;
+    return new ShowRegions(regionType, databases, nodeIds);
   }
 
   @Override
   public Node 
visitShowDataNodesStatement(RelationalSqlParser.ShowDataNodesStatementContext 
ctx) {
-    return super.visitShowDataNodesStatement(ctx);
+    return new ShowDataNodes();
   }
 
   @Override
   public Node visitShowConfigNodesStatement(
       RelationalSqlParser.ShowConfigNodesStatementContext ctx) {
-    return super.visitShowConfigNodesStatement(ctx);
+    return new ShowConfigNodes();
   }
 
   @Override
diff --git 
a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
 
b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
index 4e7d8ebff85..05d2a881735 100644
--- 
a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
+++ 
b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
@@ -253,8 +253,8 @@ showClusterStatement
     ;
 
 showRegionsStatement
-    : SHOW (SCHEMA | DATA)? REGIONS (OF DATABASE identifier? (',' 
identifier)*)?
-          (ON NODEID INTEGER_VALUE (',' INTEGER_VALUE)*)?
+    : SHOW (SCHEMA | DATA)? REGIONS ((FROM | IN) identifier)?
+          // ((LIKE pattern=string) | (WHERE expression))?
     ;
 
 showDataNodesStatement


Reply via email to