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 2020/12/13 05:47:32 UTC

[shardingsphere] branch master updated: Support SHOW SHARDING RULE FROM schema_name (#8600)

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 7b120d5  Support SHOW SHARDING RULE FROM schema_name (#8600)
7b120d5 is described below

commit 7b120d577636d71a798f17ed7b80bfabe19e2911
Author: Liang Zhang <te...@163.com>
AuthorDate: Sun Dec 13 13:47:10 2020 +0800

    Support SHOW SHARDING RULE FROM schema_name (#8600)
    
    * Use database type map instead of single database type
    
    * Add MetaDataContexts.getAllSchemas
    
    * Remove MetaDataContexts.getDatabaseTypes()
    
    * Add ShardingSphereResource.databaseType
    
    * Remove MetaDataContexts.getDatabaseType()
    
    * Remove StandardMetaDataContexts.databaseTypes
    
    * Use MetaDataContexts.getDefaultMetaData
    
    * Use MetaDataContexts.getDefaultMetaData
    
    * Add MetaDataContexts.getMetaData(String schemaName)
    
    * Remove MetaDataContexts.getMetaDataMap()
    
    * refactor MetaDataContextsBuilder
    
    * Adjust RDL statement G4
    
    * Add showShardingRule for g4
    
    * Add ShowShardingRuleStatement
    
    * Add ShowShardingRule visitor
    
    * Add show shardingrule RDL for proxy
---
 .../src/main/antlr4/imports/Keyword.g4             | 10 ++-
 .../src/main/antlr4/imports/RDLStatement.g4        | 73 ++++++++++++----------
 .../distsql/parser/autogen/DistSQLStatement.g4     |  1 +
 .../distsql/parser/core/DistSQLVisitor.java        | 21 ++++++-
 .../statement/rdl/ShowShardingRuleStatement.java}  | 28 ++++-----
 .../rdl/ShowShardingRuleStatementContext.java      | 27 ++++----
 .../parser/ShardingSphereSQLParserEngine.java      |  5 +-
 .../text/metadata/rdl/RDLBackendHandler.java       | 55 +++++++++++++++-
 8 files changed, 147 insertions(+), 73 deletions(-)

diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4 b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
index 1046a44..7275a0e 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
@@ -22,7 +22,7 @@ import Alphabet;
 WS
     : [ \t\r\n] + ->skip
     ;
-    
+
 CREATE
     : C R E A T E
     ;
@@ -34,3 +34,11 @@ DATASOURCES
 SHARDINGRULE
     : S H A R D I N G R U L E
     ;
+
+SHOW
+    : S H O W
+    ;
+
+FROM
+    : F R O M
+    ;
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RDLStatement.g4 b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RDLStatement.g4
index 407ca37..5e06b85 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RDLStatement.g4
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RDLStatement.g4
@@ -23,22 +23,50 @@ createDataSources
     : CREATE DATASOURCES LP dataSource (COMMA dataSource)* RP
     ;
 
-createShardingRule
-    : CREATE SHARDINGRULE LP tableRule (COMMA tableRule)* RP
+dataSource
+    : dataSourceName EQ dataSourceDefinition
     ;
 
-tableRule
-    : tableName EQ tableRuleDefinition
+dataSourceName
+    : IDENTIFIER
     ;
 
-dataSource
-    : dataSourceName EQ dataSourceDefinition
-    ;
-       
 dataSourceDefinition
     : hostName COLON port COLON dbName (COLON user (COLON password)?)?
     ;
 
+hostName
+    : IDENTIFIER | ip
+    ;
+
+ip
+    : NUMBER+
+    ;
+
+port
+    : INT
+    ;
+
+dbName
+    : IDENTIFIER
+    ;
+
+user
+    : IDENTIFIER | NUMBER
+    ;
+
+password
+    : IDENTIFIER | NUMBER | STRING
+    ;
+
+createShardingRule
+    : CREATE SHARDINGRULE LP tableRule (COMMA tableRule)* RP
+    ;
+
+tableRule
+    : tableName EQ tableRuleDefinition
+    ;
+
 tableRuleDefinition
     : strategyType LP strategyDefinition RP
     ;
@@ -54,15 +82,11 @@ strategyDefinition
 strategyProps
     : strategyProp (COMMA strategyProp)*
     ;
-    
+
 strategyProp
     : IDENTIFIER | NUMBER | INT
     ;
 
-dataSourceName
-    : IDENTIFIER
-    ;
-
 tableName
     : IDENTIFIER
     ;
@@ -71,25 +95,10 @@ columName
     : IDENTIFIER
     ;
 
-hostName
-    : IDENTIFIER | ip
+showShardingRule
+    : SHOW SHARDINGRULE (FROM schemaName)?
     ;
 
-ip
-    : NUMBER+
-    ;
-port
-    : INT
-    ;
-    
-dbName
+schemaName
     : IDENTIFIER
-    ;
-
-user
-    : IDENTIFIER | NUMBER
-    ;
-
-password
-    : IDENTIFIER | NUMBER | STRING
-    ;
+    ;
\ No newline at end of file
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DistSQLStatement.g4 b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DistSQLStatement.g4
index d8363e6..1933a3d 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DistSQLStatement.g4
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DistSQLStatement.g4
@@ -22,5 +22,6 @@ import Symbol, RDLStatement;
 execute
     : (createDataSources
     | createShardingRule
+    | showShardingRule
     ) SEMI?
     ;
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java
index 25b9006..94a165f 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java
@@ -22,15 +22,20 @@ import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.C
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.CreateShardingRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.DataSourceContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.DataSourceDefinitionContext;
+import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.SchemaNameContext;
+import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowShardingRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.StrategyPropContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.StrategyPropsContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.TableRuleContext;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateDataSourcesStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateShardingRuleStatement;
 import org.apache.shardingsphere.distsql.parser.segment.rdl.DataSourceConnectionSegment;
 import org.apache.shardingsphere.distsql.parser.segment.rdl.TableRuleSegment;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateDataSourcesStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateShardingRuleStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.ShowShardingRuleStatement;
 import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -91,10 +96,20 @@ public final class DistSQLVisitor extends DistSQLStatementBaseVisitor<ASTNode> {
     
     @Override
     public ASTNode visitStrategyProps(final StrategyPropsContext ctx) {
-        CollectionValue<String> result = new CollectionValue();
+        CollectionValue<String> result = new CollectionValue<>();
         for (StrategyPropContext each : ctx.strategyProp()) {
             result.getValue().add(each.getText());
         }
         return result;
     }
+    
+    @Override
+    public ASTNode visitShowShardingRule(final ShowShardingRuleContext ctx) {
+        return null == ctx.schemaName() ? new ShowShardingRuleStatement(null) : new ShowShardingRuleStatement((SchemaSegment) visit(ctx.schemaName()));
+    }
+
+    @Override
+    public ASTNode visitSchemaName(final SchemaNameContext ctx) {
+        return new SchemaSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), new IdentifierValue(ctx.getText()));
+    }
 }
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4 b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ShowShardingRuleStatement.java
similarity index 66%
copy from shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
copy to shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ShowShardingRuleStatement.java
index 1046a44..f8bdbef 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ShowShardingRuleStatement.java
@@ -15,22 +15,18 @@
  * limitations under the License.
  */
 
-lexer grammar Keyword;
+package org.apache.shardingsphere.distsql.parser.statement.rdl;
 
-import Alphabet;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
-WS
-    : [ \t\r\n] + ->skip
-    ;
-    
-CREATE
-    : C R E A T E
-    ;
-
-DATASOURCES
-    : D A T A S O U R C E S
-    ;
+/**
+ * Show sharding rule statement.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class ShowShardingRuleStatement extends RDLStatement {
     
-SHARDINGRULE
-    : S H A R D I N G R U L E
-    ;
+    private final SchemaSegment schemaName;
+}
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4 b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/rdl/ShowShardingRuleStatementContext.java
similarity index 60%
copy from shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
copy to shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/rdl/ShowShardingRuleStatementContext.java
index 1046a44..45d3aa0 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/Keyword.g4
+++ b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/rdl/ShowShardingRuleStatementContext.java
@@ -15,22 +15,17 @@
  * limitations under the License.
  */
 
-lexer grammar Keyword;
+package org.apache.shardingsphere.infra.binder.statement.rdl;
 
-import Alphabet;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.ShowShardingRuleStatement;
+import org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
 
-WS
-    : [ \t\r\n] + ->skip
-    ;
-    
-CREATE
-    : C R E A T E
-    ;
-
-DATASOURCES
-    : D A T A S O U R C E S
-    ;
+/**
+ * Show sharding rule statement context.
+ */
+public final class ShowShardingRuleStatementContext extends CommonSQLStatementContext<ShowShardingRuleStatement> {
     
-SHARDINGRULE
-    : S H A R D I N G R U L E
-    ;
+    public ShowShardingRuleStatementContext(final ShowShardingRuleStatement sqlStatement) {
+        super(sqlStatement);
+    }
+}
diff --git a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
index e96645d..2f93521 100644
--- a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
@@ -17,11 +17,12 @@
 
 package org.apache.shardingsphere.infra.parser;
 
+import org.antlr.v4.runtime.misc.ParseCancellationException;
 import org.apache.shardingsphere.distsql.parser.api.DistSQLStatementParserEngine;
+import org.apache.shardingsphere.infra.parser.hook.ParsingHookRegistry;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngineFactory;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
-import org.apache.shardingsphere.infra.parser.hook.ParsingHookRegistry;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 /**
@@ -72,7 +73,7 @@ public final class ShardingSphereSQLParserEngine {
     private SQLStatement parse0(final String sql, final boolean useCache) {
         try {
             return sqlStatementParserEngine.parse(sql, useCache);
-        } catch (final SQLParsingException originalEx) {
+        } catch (final SQLParsingException | ParseCancellationException originalEx) {
             try {
                 return distSQLStatementParserEngine.parse(sql);
             } catch (final SQLParsingException ignored) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/metadata/rdl/RDLBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/metadata/rdl/RDLBackendHandler.java
index 42011b2..81538c5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/metadata/rdl/RDLBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/metadata/rdl/RDLBackendHandler.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.proxy.backend.text.metadata.rdl;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateDataSourcesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateShardingRuleStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.ShowShardingRuleStatement;
 import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourcePersistEvent;
 import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsPersistEvent;
 import org.apache.shardingsphere.governance.core.event.model.schema.SchemaNamePersistEvent;
@@ -28,21 +29,27 @@ import org.apache.shardingsphere.infra.binder.statement.ddl.CreateDatabaseStatem
 import org.apache.shardingsphere.infra.binder.statement.ddl.DropDatabaseStatementContext;
 import org.apache.shardingsphere.infra.binder.statement.rdl.CreateDataSourcesStatementContext;
 import org.apache.shardingsphere.infra.binder.statement.rdl.CreateShardingRuleStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.rdl.ShowShardingRuleStatementContext;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
+import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.exception.DBCreateExistsException;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
+import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
+import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
 import org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
 import org.apache.shardingsphere.proxy.config.yaml.YamlDataSourceParameter;
 import org.apache.shardingsphere.proxy.converter.CreateDataSourcesStatementContextConverter;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import org.apache.shardingsphere.sharding.converter.CreateShardingRuleStatementContextConverter;
 import org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -50,9 +57,12 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatab
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
 
 import java.sql.SQLException;
+import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * Backend handler for RDL.
@@ -64,10 +74,12 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler {
     
     private final SQLStatement sqlStatement;
     
+    private Iterator<RuleConfiguration> ruleConfigData;
+    
     @Override
     public ResponseHeader execute() throws SQLException {
         SQLStatementContext<?> context = getSQLStatementContext();
-        if (!isRegistryCenterExisted()) {
+        if (!isRegistryCenterExisted() && !isQuery()) {
             throw new SQLException(String.format("No Registry center to execute `%s` SQL", context.getClass().getSimpleName()));
         }
         return getResponseHeader(context);
@@ -108,6 +120,15 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler {
         return new UpdateResponseHeader(context.getSqlStatement());
     }
     
+    private ResponseHeader execute(final ShowShardingRuleStatementContext context) {
+        String schemaName = null == context.getSqlStatement().getSchemaName() ? backendConnection.getSchemaName() : context.getSqlStatement().getSchemaName().getIdentifier().getValue();
+        QueryHeader queryHeader = new QueryHeader(schemaName, "", "ShardingRule", "ShardingRule", Types.CHAR, "CHAR", 255, 0, false, false, false, false);
+        Optional<RuleConfiguration> ruleConfig = 
+                ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations().stream().filter(each -> each instanceof ShardingRuleConfiguration).findAny();
+        ruleConfig.ifPresent(shardingSphereRule -> ruleConfigData = Collections.singleton(shardingSphereRule).iterator());
+        return new QueryResponseHeader(Collections.singletonList(queryHeader));
+    }
+    
     private SQLStatementContext<?> getSQLStatementContext() {
         DatabaseType databaseType = ProxyContext.getInstance().getMetaDataContexts().getMetaData(backendConnection.getSchemaName()).getResource().getDatabaseType();
         if (sqlStatement instanceof CreateDataSourcesStatement) {
@@ -119,7 +140,13 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler {
         if (sqlStatement instanceof CreateDatabaseStatement) {
             return new CreateDatabaseStatementContext((CreateDatabaseStatement) sqlStatement);
         }
-        return new DropDatabaseStatementContext((DropDatabaseStatement) sqlStatement);
+        if (sqlStatement instanceof DropDatabaseStatement) {
+            return new DropDatabaseStatementContext((DropDatabaseStatement) sqlStatement);
+        }
+        if (sqlStatement instanceof ShowShardingRuleStatement) {
+            return new ShowShardingRuleStatementContext((ShowShardingRuleStatement) sqlStatement);
+        }
+        throw new UnsupportedOperationException(sqlStatement.getClass().getName());
     }
     
     private ResponseHeader getResponseHeader(final SQLStatementContext<?> context) {
@@ -132,10 +159,32 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler {
         if (context instanceof DropDatabaseStatementContext) {
             return execute((DropDatabaseStatementContext) context);
         }
-        return execute((CreateShardingRuleStatementContext) context);
+        if (context instanceof CreateShardingRuleStatementContext) {
+            return execute((CreateShardingRuleStatementContext) context);
+        }
+        if (context instanceof ShowShardingRuleStatementContext) {
+            return execute((ShowShardingRuleStatementContext) context);
+        }
+        throw new UnsupportedOperationException(context.getClass().getName());
     }
     
     private boolean isRegistryCenterExisted() {
         return !(ProxyContext.getInstance().getMetaDataContexts() instanceof StandardMetaDataContexts);
     }
+    
+    private boolean isQuery() {
+        return sqlStatement instanceof ShowShardingRuleStatement;
+    }
+    
+    @Override
+    public boolean next() {
+        return null != ruleConfigData && ruleConfigData.hasNext();
+    }
+    
+    @Override
+    public Collection<Object> getRowData() {
+        RuleConfiguration ruleConfig = ruleConfigData.next();
+        YamlRuleConfiguration yamlRuleConfig = new YamlRuleConfigurationSwapperEngine().swapToYamlConfigurations(Collections.singleton(ruleConfig)).iterator().next();
+        return Collections.singleton(YamlEngine.marshal(yamlRuleConfig));
+    }
 }