You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/08/09 05:38:55 UTC

[shardingsphere] branch master updated: feature : #11603 Add distSQL syntax:'show sharding algorithms' (#11609)

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

menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 74860db  feature : #11603 Add distSQL syntax:'show sharding algorithms' (#11609)
74860db is described below

commit 74860db6815ae7a5f58e8c60cd581c74e3e9472f
Author: lanchengx <52...@users.noreply.github.com>
AuthorDate: Mon Aug 9 13:38:21 2021 +0800

    feature : #11603 Add distSQL syntax:'show sharding algorithms' (#11609)
    
    * feature : #11603 Add distSQL syntax:'show sharding algorithms'
    
    * feature : Restore indentation
    
    * feature : Restore indentation
    
    * Restore indentation
    
    * Restore indentation
    
    * Restore indentation
    
    * Add show algorithms document
    
    * update show algorithms document
    
    * update comments & use PropertiesConverter.java
---
 .../dist-sql/syntax/rql/rql-sharding-rule.cn.md    | 23 ++++++
 .../dist-sql/syntax/rql/rql-sharding-rule.en.md    | 24 +++++++
 .../query/ShardingAlgorithmQueryResultSet.java     | 83 ++++++++++++++++++++++
 ...dingsphere.infra.distsql.query.DistSQLResultSet |  1 +
 .../query/ShardingAlgorithmQueryResultSetTest.java | 65 +++++++++++++++++
 .../src/main/antlr4/imports/sharding/Keyword.g4    |  4 ++
 .../main/antlr4/imports/sharding/RQLStatement.g4   |  4 ++
 .../parser/autogen/ShardingRuleStatement.g4        |  1 +
 .../core/ShardingRuleSQLStatementVisitor.java      | 13 +++-
 .../ShowShardingAlgorithmsStatement.java}          | 37 ++++------
 .../distsql/rql/impl/ShowRulesStatementAssert.java |  5 ++
 .../ShowDatabaseDiscoveryRulesStatementAssert.java |  4 +-
 .../impl/rule/ShowEncryptRulesStatementAssert.java |  4 +-
 ...ShowReadwriteSplittingRulesStatementAssert.java |  4 +-
 ... => ShowShardingAlgorithmsStatementAssert.java} | 16 ++---
 ...owShardingBindingTableRulesStatementAssert.java |  4 +-
 ...ShardingBroadcastTableRulesStatementAssert.java |  4 +-
 .../ShowShardingTableRulesStatementAssert.java     |  4 +-
 .../jaxb/cases/domain/SQLParserTestCases.java      |  5 ++
 .../ShowShardingAlgorithmsStatementTestCase.java   | 40 +++++------
 .../src/main/resources/case/rql/show.xml           |  8 ++-
 .../src/main/resources/sql/supported/rql/show.xml  |  1 +
 22 files changed, 280 insertions(+), 74 deletions(-)

diff --git a/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.cn.md b/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.cn.md
index aea29ad..8f5b404 100644
--- a/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.cn.md
+++ b/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.cn.md
@@ -10,10 +10,13 @@ weight = 2
 ```sql
 SHOW SHARDING TABLE tableRule | RULES [FROM schemaName]
 
+SHOW SHARDING ALGORITHMS [FROM schemaName]
+
 tableRule:
     RULE tableName
 ```
 -  支持查询所有数据分片规则和指定表查询
+-  支持查询所有分片算法
 
 ### Sharding Binding Table Rule
 
@@ -48,6 +51,14 @@ SHOW SHARDING BROADCAST TABLE RULES [FROM schemaName]
 | keyGeneratorType               | 分布式主键生成器类型                   |
 | keyGeneratorProps              | 分布式主键生成器参数                   |
 
+### Sharding Algorithms
+
+| 列     | 说明          |
+| ------| --------------|
+| name  | 分片算法名称    |
+| type  | 分片算法类型    |
+| props | 分片算法参数    |
+
 ### Sharding Binding Table Rule
 
 | 列                    | 说明      |
@@ -88,6 +99,18 @@ mysql> show sharding table rule t_order;
 1 row in set (0.01 sec)
 ```
 
+*SHOW SHARDING ALGORITHMS*
+```sql
+mysql> show sharding algorithms;
++-------------------------+--------+-----------------------------------------------------+
+| name                    | type   | props                                               |
++-------------------------+--------------------------------------------------------------+
+| t_order_inline          | INLINE | algorithm-expression=t_order_${order_id % 2}        |
+| t_order_item_inline     | INLINE | algorithm-expression=t_order_item_${order_id % 2}   |
++-------------------------+--------+-----------------------------------------------------+
+2 row in set (0.01 sec)
+```
+
 ### Sharding Binding Table Rule
 
 ```sql
diff --git a/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.en.md b/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.en.md
index 5095ebc..ada7d4c 100644
--- a/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.en.md
+++ b/docs/document/content/features/dist-sql/syntax/rql/rql-sharding-rule.en.md
@@ -10,10 +10,13 @@ weight = 2
 ```sql
 SHOW SHARDING TABLE tableRule | RULES [FROM schemaName]
 
+SHOW SHARDING ALGORITHMS [FROM schemaName]
+
 tableRule:
     RULE tableName
 ```
 -  Support query all data fragmentation rules and specified table query
+-  Support query all sharding algorithms
 
 ### Sharding Binding Table Rule
 
@@ -48,6 +51,15 @@ SHOW SHARDING BROADCAST TABLE RULES [FROM schemaName]
 | keyGeneratorType               | Distributed primary key generation type                  |
 | keyGeneratorProps              | Distributed primary key generation parameter             |
 
+### Sharding Algorithms
+
+| Column | Description                  |
+| -------| -----------------------------|
+| name   | Sharding algorithm name      |
+| type   | Sharding algorithm type      |
+| props  | Sharding algorithm parameters|
+
+
 ### Sharding Binding Table Rule
 
 | Column                | Description                 | 
@@ -88,6 +100,18 @@ mysql> show sharding table rule t_order;
 1 row in set (0.01 sec)
 ```
 
+*SHOW SHARDING ALGORITHMS*
+```sql
+mysql> show sharding algorithms;
++-------------------------+--------+-----------------------------------------------------+
+| name                    | type   | props                                               |
++-------------------------+--------------------------------------------------------------+
+| t_order_inline          | INLINE | algorithm-expression=t_order_${order_id % 2}        |
+| t_order_item_inline     | INLINE | algorithm-expression=t_order_item_${order_id % 2}   |
++-------------------------+--------+-----------------------------------------------------+
+2 row in set (0.01 sec)
+```
+
 ### Sharding Binding Table Rule
 
 ```sql
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShardingAlgorithmQueryResultSet.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShardingAlgorithmQueryResultSet.java
new file mode 100644
index 0000000..fc3416e
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShardingAlgorithmQueryResultSet.java
@@ -0,0 +1,83 @@
+/*
+ * 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.shardingsphere.sharding.distsql.handler.query;
+
+import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.properties.PropertiesConverter;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingAlgorithmsStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Properties;
+
+/**
+ * Result set for show sharding algorithm.
+ */
+public final class ShardingAlgorithmQueryResultSet implements DistSQLResultSet {
+    
+    private Iterator<Entry<String, ShardingSphereAlgorithmConfiguration>> data;
+    
+    @Override
+    public void init(final ShardingSphereMetaData metaData, final SQLStatement sqlStatement) {
+        Optional<ShardingRuleConfiguration> ruleConfig = metaData.getRuleMetaData().getConfigurations()
+                .stream().filter(each -> each instanceof ShardingRuleConfiguration).map(each -> (ShardingRuleConfiguration) each).findAny();
+        data = ruleConfig.map(option -> option.getShardingAlgorithms()).orElse(Collections.emptyMap()).entrySet().iterator();
+    }
+    
+    @Override
+    public Collection<String> getColumnNames() {
+        return Arrays.asList("name", "type", "props");
+    }
+    
+    @Override
+    public boolean next() {
+        return data.hasNext();
+    }
+    
+    @Override
+    public Collection<Object> getRowData() {
+        return buildTableRowData(data.next());
+    }
+    
+    private Collection<Object> buildTableRowData(final Entry<String, ShardingSphereAlgorithmConfiguration> data) {
+        Collection<Object> result = new LinkedList<>();
+        result.add(data.getKey());
+        result.add(data.getValue().getType());
+        result.add(buildProps(data.getValue().getProps()));
+        return result;
+    }
+    
+    private Object buildProps(final Properties props) {
+        return Objects.nonNull(props) ? PropertiesConverter.convert(props) : "";
+    }
+    
+    @Override
+    public String getType() {
+        return ShowShardingAlgorithmsStatement.class.getCanonicalName();
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
index 188d27e..b412594 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
@@ -18,3 +18,4 @@
 org.apache.shardingsphere.sharding.distsql.handler.query.ShardingTableRuleQueryResultSet
 org.apache.shardingsphere.sharding.distsql.handler.query.ShardingBindingTableRuleQueryResultSet
 org.apache.shardingsphere.sharding.distsql.handler.query.ShardingBroadcastTableRuleQueryResultSet
+org.apache.shardingsphere.sharding.distsql.handler.query.ShardingAlgorithmQueryResultSet
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShardingAlgorithmQueryResultSetTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShardingAlgorithmQueryResultSetTest.java
new file mode 100644
index 0000000..ff4e0df
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShardingAlgorithmQueryResultSetTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.shardingsphere.sharding.distsql.query;
+
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.apache.shardingsphere.sharding.distsql.handler.query.ShardingAlgorithmQueryResultSet;
+import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingAlgorithmsStatement;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public final class ShardingAlgorithmQueryResultSetTest {
+    
+    @Test
+    public void assertGetRowData() {
+        ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, RETURNS_DEEP_STUBS);
+        when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createRuleConfiguration()));
+        ShardingAlgorithmQueryResultSet resultSet = new ShardingAlgorithmQueryResultSet();
+        resultSet.init(metaData, mock(ShowShardingAlgorithmsStatement.class));
+        List<Object> actual = new ArrayList<>(resultSet.getRowData());
+        assertThat(actual.size(), is(3));
+        assertThat(actual.get(0), is("database_inline"));
+        assertThat(actual.get(1), is("INLINE"));
+        assertThat(actual.get(2), is("algorithm-expression=ds_${user_id % 2}"));
+    }
+    
+    private RuleConfiguration createRuleConfiguration() {
+        ShardingRuleConfiguration result = new ShardingRuleConfiguration();
+        Properties properties1 = new Properties();
+        properties1.put("algorithm-expression", "ds_${user_id % 2}");
+        Map<String, ShardingSphereAlgorithmConfiguration> map = new LinkedHashMap<>(1);
+        map.put("database_inline", new ShardingSphereAlgorithmConfiguration("INLINE", properties1));
+        result.setShardingAlgorithms(map);
+        return result;
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/Keyword.g4 b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/Keyword.g4
index 64dcd4a..b602ae4 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/Keyword.g4
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/Keyword.g4
@@ -106,3 +106,7 @@ COLUMNS
 ALGORITHM
     : A L G O R I T H M
     ;
+
+ALGORITHMS
+    : A L G O R I T H M S
+    ;
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4 b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
index aa3e22f..1622951 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
@@ -31,6 +31,10 @@ showShardingBroadcastTableRules
     : SHOW SHARDING BROADCAST TABLE RULES (FROM schemaName)?
     ;
 
+showShardingAlgorithms
+    : SHOW SHARDING ALGORITHMS (FROM schemaName)?
+    ;
+
 tableRule
     : RULE tableName
     ;
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShardingRuleStatement.g4 b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShardingRuleStatement.g4
index 6800dcc..c8b7f73 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShardingRuleStatement.g4
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShardingRuleStatement.g4
@@ -33,5 +33,6 @@ execute
     | showShardingTableRules
     | showShardingBindingTableRules
     | showShardingBroadcastTableRules
+    | showShardingAlgorithms
     ) SEMI?
     ;
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingRuleSQLStatementVisitor.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingRuleSQLStatementVisitor.java
index 3ef40f8..95673aa 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingRuleSQLStatementVisitor.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingRuleSQLStatementVisitor.java
@@ -21,6 +21,7 @@ import com.google.common.base.Joiner;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.TerminalNode;
 import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementBaseVisitor;
+import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementParser;
 import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementParser.AlgorithmDefinitionContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementParser.AlgorithmPropertyContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementParser.AlterShardingBindingTableRulesContext;
@@ -41,21 +42,22 @@ import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementPar
 import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementParser.ShowShardingTableRulesContext;
 import org.apache.shardingsphere.distsql.parser.autogen.ShardingRuleStatementParser.TableNameContext;
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.BindingTableRuleSegment;
+import org.apache.shardingsphere.sharding.distsql.parser.segment.TableRuleSegment;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.AlterShardingBindingTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.AlterShardingBroadcastTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.AlterShardingTableRuleStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardingBindingTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardingBroadcastTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardingTableRuleStatement;
+import org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingAlgorithmStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingBindingTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingBroadcastTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingTableRuleStatement;
-import org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingAlgorithmStatement;
+import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingAlgorithmsStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBindingTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBroadcastTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableRulesStatement;
-import org.apache.shardingsphere.sharding.distsql.parser.segment.BindingTableRuleSegment;
-import org.apache.shardingsphere.sharding.distsql.parser.segment.TableRuleSegment;
 import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
@@ -142,6 +144,11 @@ public final class ShardingRuleSQLStatementVisitor extends ShardingRuleStatement
     }
     
     @Override
+    public ASTNode visitShowShardingAlgorithms(final ShardingRuleStatementParser.ShowShardingAlgorithmsContext ctx) {
+        return new ShowShardingAlgorithmsStatement(Objects.nonNull(ctx.schemaName()) ? (SchemaSegment) visit(ctx.schemaName()) : null);
+    }
+    
+    @Override
     public ASTNode visitShardingTableRuleDefinition(final ShardingTableRuleDefinitionContext ctx) {
         Collection<String> dataSources = new LinkedList<>();
         if (null != ctx.resources()) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4 b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java
similarity index 62%
copy from shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
copy to shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java
index aa3e22f..3258d4d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java
@@ -15,30 +15,17 @@
  * limitations under the License.
  */
 
-grammar RQLStatement;
+package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
-import Keyword, Literals, Symbol;
+import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
-showShardingTableRules
-    : SHOW SHARDING TABLE (tableRule | RULES) (FROM schemaName)?
-    ;
-
-showShardingBindingTableRules
-    : SHOW SHARDING BINDING TABLE RULES (FROM schemaName)?
-    ;
-
-showShardingBroadcastTableRules
-    : SHOW SHARDING BROADCAST TABLE RULES (FROM schemaName)?
-    ;
-
-tableRule
-    : RULE tableName
-    ;
-
-tableName
-    : IDENTIFIER
-    ;
-
-schemaName
-    : IDENTIFIER
-    ;
+/**
+ * Show sharding algorithms statement.
+ */
+public final class ShowShardingAlgorithmsStatement extends ShowRulesStatement {
+    
+    public ShowShardingAlgorithmsStatement(final SchemaSegment schema) {
+        super(schema);
+    }
+}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/ShowRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/ShowRulesStatementAssert.java
index a5e1825..df2117a 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/ShowRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/ShowRulesStatementAssert.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDataba
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.encrypt.distsql.parser.statement.ShowEncryptRulesStatement;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowReadwriteSplittingRulesStatement;
+import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingAlgorithmsStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBindingTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingBroadcastTableRulesStatement;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableRulesStatement;
@@ -30,6 +31,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAs
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowDatabaseDiscoveryRulesStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowEncryptRulesStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowReadwriteSplittingRulesStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowShardingAlgorithmsStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowShardingBindingTableRulesStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowShardingBroadcastTableRulesStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.impl.rule.ShowShardingTableRulesStatementAssert;
@@ -37,6 +39,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDataBaseDiscoveryRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowEncryptRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowReadWriteSplittingRulesStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingAlgorithmsStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingBindingTableRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingBroadcastTableRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingTableRulesStatementTestCase;
@@ -65,6 +68,8 @@ public final class ShowRulesStatementAssert {
             ShowShardingBindingTableRulesStatementAssert.assertIs(assertContext, (ShowShardingBindingTableRulesStatement) actual, (ShowShardingBindingTableRulesStatementTestCase) expected);
         } else if (actual instanceof ShowShardingBroadcastTableRulesStatement) {
             ShowShardingBroadcastTableRulesStatementAssert.assertIs(assertContext, (ShowShardingBroadcastTableRulesStatement) actual, (ShowShardingBroadcastTableRulesStatementTestCase) expected);
+        } else if (actual instanceof ShowShardingAlgorithmsStatement) {
+            ShowShardingAlgorithmsStatementAssert.assertIs(assertContext, (ShowShardingAlgorithmsStatement) actual, (ShowShardingAlgorithmsStatementTestCase) expected);
         } else if (actual instanceof ShowShardingTableRulesStatement) {
             ShowShardingTableRulesStatementAssert.assertIs(assertContext, (ShowShardingTableRulesStatement) actual, (ShowShardingTableRulesStatementTestCase) expected);
         }
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowDatabaseDiscoveryRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowDatabaseDiscoveryRulesStatementAssert.java
index 91f8fbf..c84b9c8 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowDatabaseDiscoveryRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowDatabaseDiscoveryRulesStatementAssert.java
@@ -37,8 +37,8 @@ public final class ShowDatabaseDiscoveryRulesStatementAssert {
      * Assert show database discovery rule statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show database discovery rules statement
-     * @param expected      expected show database discovery rules statement test case
+     * @param actual actual show database discovery rules statement
+     * @param expected expected show database discovery rules statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ShowDatabaseDiscoveryRulesStatement actual, final ShowDataBaseDiscoveryRulesStatementTestCase expected) {
         if (null != expected.getSchema()) {
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowEncryptRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowEncryptRulesStatementAssert.java
index 2f28eab..7a2347f 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowEncryptRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowEncryptRulesStatementAssert.java
@@ -37,8 +37,8 @@ public final class ShowEncryptRulesStatementAssert {
      * Assert Show encrypt rule statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show encrypt rules statement
-     * @param expected      expected show encrypt rules statement test case
+     * @param actual actual show encrypt rules statement
+     * @param expected expected show encrypt rules statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ShowEncryptRulesStatement actual, final ShowEncryptRulesStatementTestCase expected) {
         if (null != expected.getSchema()) {
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowReadwriteSplittingRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowReadwriteSplittingRulesStatementAssert.java
index 95570a9..25fca47 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowReadwriteSplittingRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowReadwriteSplittingRulesStatementAssert.java
@@ -37,8 +37,8 @@ public final class ShowReadwriteSplittingRulesStatementAssert {
      * Assert show readwrite splitting rule statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show readwrite splitting rules statement
-     * @param expected      expected show readwrite splitting rules statement test case
+     * @param actual actual show readwrite splitting rules statement
+     * @param expected expected show readwrite splitting rules statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ShowReadwriteSplittingRulesStatement actual, final ShowReadWriteSplittingRulesStatementTestCase expected) {
         if (null != expected.getSchema()) {
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingAlgorithmsStatementAssert.java
similarity index 77%
copy from shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java
copy to shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingAlgorithmsStatementAssert.java
index 10a7553..7ddbbc2 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingAlgorithmsStatementAssert.java
@@ -19,28 +19,28 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableRulesStatement;
+import org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingAlgorithmsStatement;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.schema.SchemaAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingTableRulesStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingAlgorithmsStatementTestCase;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 /**
- * Show sharding table rules statement assert.
+ * Show sharding algorithms statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ShowShardingTableRulesStatementAssert {
+public final class ShowShardingAlgorithmsStatementAssert {
 
     /**
-     * Assert show database discovery rule statement is correct with expected parser result.
+     * Assert show sharding algorithms statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show database discovery rules statement
-     * @param expected      expected show database discovery rules statement test case
+     * @param actual actual show sharding algorithms statement
+     * @param expected expected show sharding algorithms statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final ShowShardingTableRulesStatement actual, final ShowShardingTableRulesStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, final ShowShardingAlgorithmsStatement actual, final ShowShardingAlgorithmsStatementTestCase expected) {
         if (null != expected.getSchema()) {
             assertTrue(assertContext.getText("Actual schema should exist."), actual.getSchema().isPresent());
             SchemaAssert.assertIs(assertContext, actual.getSchema().get(), expected.getSchema());
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBindingTableRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBindingTableRulesStatementAssert.java
index 62954e0..beee004 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBindingTableRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBindingTableRulesStatementAssert.java
@@ -37,8 +37,8 @@ public final class ShowShardingBindingTableRulesStatementAssert {
      * Assert show sharding binding table statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show sharding binding table rules statement
-     * @param expected      expected show sharding binding table rules statement test case
+     * @param actual actual show sharding binding table rules statement
+     * @param expected expected show sharding binding table rules statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ShowShardingBindingTableRulesStatement actual, final ShowShardingBindingTableRulesStatementTestCase expected) {
         if (null != expected.getSchema()) {
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBroadcastTableRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBroadcastTableRulesStatementAssert.java
index f33f51f..14b183c 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBroadcastTableRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingBroadcastTableRulesStatementAssert.java
@@ -37,8 +37,8 @@ public final class ShowShardingBroadcastTableRulesStatementAssert {
      * Assert show sharding broadcast table rule statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show sharding broadcast table rules statement
-     * @param expected      expected show sharding broadcast table rules statement test case
+     * @param actual actual show sharding broadcast table rules statement
+     * @param expected expected show sharding broadcast table rules statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ShowShardingBroadcastTableRulesStatement actual, final ShowShardingBroadcastTableRulesStatementTestCase expected) {
         if (null != expected.getSchema()) {
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java
index 10a7553..bad2e98 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rql/impl/rule/ShowShardingTableRulesStatementAssert.java
@@ -37,8 +37,8 @@ public final class ShowShardingTableRulesStatementAssert {
      * Assert show database discovery rule statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual        actual show database discovery rules statement
-     * @param expected      expected show database discovery rules statement test case
+     * @param actual actual show database discovery rules statement
+     * @param expected expected show database discovery rules statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ShowShardingTableRulesStatement actual, final ShowShardingTableRulesStatementTestCase expected) {
         if (null != expected.getSchema()) {
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
index 593a62c..5866a5b 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
@@ -107,6 +107,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDataBaseDiscoveryRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowEncryptRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowReadWriteSplittingRulesStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingAlgorithmsStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingBindingTableRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingBroadcastTableRulesStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowShardingTableRulesStatementTestCase;
@@ -447,6 +448,9 @@ public final class SQLParserTestCases {
     @XmlElement(name = "show-sharding-broadcast-table-rules")
     private final List<ShowShardingBroadcastTableRulesStatementTestCase> showShardingBroadcastTableRulesTestCase = new LinkedList<>();
     
+    @XmlElement(name = "show-sharding-algorithms")
+    private final List<ShowShardingAlgorithmsStatementTestCase> showShardingAlgorithmsTestCase = new LinkedList<>();
+    
     @XmlElement(name = "show-sharding-table-rules")
     private final List<ShowShardingTableRulesStatementTestCase> showShardingTableRulesTestCase = new LinkedList<>();
     
@@ -565,6 +569,7 @@ public final class SQLParserTestCases {
         putAll(showReadWriteSplittingRulesTestCase, result);
         putAll(showShardingBindingTableRulesTestCase, result);
         putAll(showShardingBroadcastTableRulesTestCase, result);
+        putAll(showShardingAlgorithmsTestCase, result);
         putAll(showShardingTableRulesTestCase, result);
         putAll(showShardingTableRuleTestCase, result);
         putAll(showScalingJobListStatementTestCase, result);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4 b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowShardingAlgorithmsStatementTestCase.java
similarity index 55%
copy from shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
copy to shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowShardingAlgorithmsStatementTestCase.java
index aa3e22f..ac17adc 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RQLStatement.g4
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowShardingAlgorithmsStatementTestCase.java
@@ -15,30 +15,22 @@
  * limitations under the License.
  */
 
-grammar RQLStatement;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql;
 
-import Keyword, Literals, Symbol;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.schema.ExpectedSchema;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
-showShardingTableRules
-    : SHOW SHARDING TABLE (tableRule | RULES) (FROM schemaName)?
-    ;
+import javax.xml.bind.annotation.XmlElement;
 
-showShardingBindingTableRules
-    : SHOW SHARDING BINDING TABLE RULES (FROM schemaName)?
-    ;
-
-showShardingBroadcastTableRules
-    : SHOW SHARDING BROADCAST TABLE RULES (FROM schemaName)?
-    ;
-
-tableRule
-    : RULE tableName
-    ;
-
-tableName
-    : IDENTIFIER
-    ;
-
-schemaName
-    : IDENTIFIER
-    ;
+/**
+ * Show sharding algorithms statement test case.
+ */
+@Getter
+@Setter
+public final class ShowShardingAlgorithmsStatementTestCase extends SQLParserTestCase {
+    
+    @XmlElement
+    private ExpectedSchema schema;
+}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rql/show.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rql/show.xml
index feb0932..c789677 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rql/show.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rql/show.xml
@@ -30,14 +30,18 @@
     </show-sharding-table-rules>
     
     <show-sharding-table-rules sql-case-id="show-sharding-table-rule">
-        <table name="t_order" />
+        <table name="t_order"/>
     </show-sharding-table-rules>
     
     <show-sharding-table-rules sql-case-id="show-sharding-table-rule-from">
-        <table name="t_order" />
+        <table name="t_order"/>
         <schema name="schemaName" start-index="38" stop-index="47"/>
     </show-sharding-table-rules>
     
+    <show-sharding-algorithms sql-case-id="show-sharding-algorithms-from">
+        <schema name="schemaName" start-index="30" stop-index="39"/>
+    </show-sharding-algorithms>
+    
     <show-readwrite-splitting-rules sql-case-id="show-readwrite-splitting-rules">
         <schema name="readwrite_splitting_db" start-index="36" stop-index="57"/>
     </show-readwrite-splitting-rules>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rql/show.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rql/show.xml
index 5da501e..922648e 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rql/show.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rql/show.xml
@@ -22,6 +22,7 @@
     <distsql-case id="show-sharding-table-rules" value="SHOW SHARDING TABLE RULES FROM schemaName" />
     <distsql-case id="show-sharding-table-rule" value="SHOW SHARDING TABLE RULE t_order" />
     <distsql-case id="show-sharding-table-rule-from" value="SHOW SHARDING TABLE RULE t_order FROM schemaName" />
+    <distsql-case id="show-sharding-algorithms-from" value="SHOW SHARDING ALGORITHMS FROM schemaName" />
     <distsql-case id="show-readwrite-splitting-rules" value="SHOW READWRITE_SPLITTING RULES FROM readwrite_splitting_db" />
     <distsql-case id="show-db-discovery-rules" value="SHOW DB_DISCOVERY RULES FROM db_discovery_db" />
     <distsql-case id="show-encrypt-rules" value="SHOW ENCRYPT RULES FROM encrypt_db" />