You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ni...@apache.org on 2021/05/27 12:48:35 UTC

[shardingsphere] branch master updated: Merge show encrypt rules and show encrypt table rule (#10506)

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

nicholasjiang 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 41f1335  Merge show encrypt rules and show encrypt table rule (#10506)
41f1335 is described below

commit 41f1335023c8ca10ba289b8d02ae29967045429d
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Thu May 27 20:47:52 2021 +0800

    Merge show encrypt rules and show encrypt table rule (#10506)
    
    Co-authored-by: menghaoranss <me...@apache.org>
---
 .../src/main/antlr4/imports/RQLStatement.g4        |   6 +-
 .../distsql/parser/autogen/DistSQLStatement.g4     |   1 -
 .../distsql/parser/core/DistSQLVisitor.java        |  10 +-
 .../api/DistSQLStatementParserEngineTest.java      |   9 +-
 .../rql/show/ShowEncryptRulesStatement.java        |   7 +-
 .../rql/show/ShowEncryptTableRuleStatement.java    |  35 -------
 .../text/distsql/rql/RQLBackendHandlerFactory.java |   5 -
 .../rql/impl/EncryptRulesQueryBackendHandler.java  |  23 +++--
 .../impl/EncryptTableRuleQueryBackendHandler.java  |  98 ------------------
 .../EncryptTableRuleQueryBackendHandlerTest.java   | 114 ---------------------
 10 files changed, 29 insertions(+), 279 deletions(-)

diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RQLStatement.g4 b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RQLStatement.g4
index a275d96..13ef0f6 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RQLStatement.g4
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/antlr4/imports/RQLStatement.g4
@@ -40,11 +40,7 @@ showDatabaseDiscoveryRules
     ;
 
 showEncryptRules
-    : SHOW ENCRYPT RULES (FROM schemaName)?
-    ;
-
-showEncryptTableRule
-    : SHOW ENCRYPT TABLE RULE tableName (FROM schemaName)?
+    : SHOW ENCRYPT (TABLE tableRule | RULES) (FROM schemaName)?
     ;
 
 showShardingTableRules
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 a7bb380..7952d21 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
@@ -46,7 +46,6 @@ execute
     | showReadwriteSplittingRules
     | showDatabaseDiscoveryRules
     | showEncryptRules
-    | showEncryptTableRule
     | showShardingTableRules
     | showScalingJobList
     | showScalingJobStatus
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 3af5c2b..5e2deb8 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
@@ -38,7 +38,6 @@ import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.S
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShardingTableRuleDefinitionContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowDatabaseDiscoveryRulesContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowEncryptRulesContext;
-import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowEncryptTableRuleContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowReadwriteSplittingRulesContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowResourcesContext;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser.ShowScalingJobListContext;
@@ -85,7 +84,6 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShar
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingTableRuleStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowDatabaseDiscoveryRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptRulesStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptTableRuleStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowReadwriteSplittingRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowShardingBindingTableRulesStatement;
@@ -416,11 +414,6 @@ public final class DistSQLVisitor extends DistSQLStatementBaseVisitor<ASTNode> {
     }
 
     @Override
-    public ASTNode visitShowEncryptTableRule(final ShowEncryptTableRuleContext ctx) {
-        return new ShowEncryptTableRuleStatement(ctx.tableName().getText(), Objects.nonNull(ctx.schemaName()) ? (SchemaSegment) visit(ctx.schemaName()) : null);
-    }
-
-    @Override
     public ASTNode visitShowShardingTableRules(final ShowShardingTableRulesContext ctx) {
         return new ShowShardingTableRulesStatement(Objects.nonNull(ctx.tableRule()) ? ctx.tableRule().tableName().getText() : null,
                 Objects.nonNull(ctx.schemaName()) ? (SchemaSegment) visit(ctx.schemaName()) : null);
@@ -433,7 +426,8 @@ public final class DistSQLVisitor extends DistSQLStatementBaseVisitor<ASTNode> {
 
     @Override
     public ASTNode visitShowEncryptRules(final ShowEncryptRulesContext ctx) {
-        return new ShowEncryptRulesStatement(Objects.nonNull(ctx.schemaName()) ? (SchemaSegment) visit(ctx.schemaName()) : null);
+        return new ShowEncryptRulesStatement(Objects.nonNull(ctx.tableRule()) ? ctx.tableRule().tableName().getText() : null,
+                Objects.nonNull(ctx.schemaName()) ? (SchemaSegment) visit(ctx.schemaName()) : null);
     }
 
     @Override
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/test/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngineTest.java b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/test/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngineTest.java
index e4b0426..94bb881 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/test/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngineTest.java
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/test/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngineTest.java
@@ -45,7 +45,6 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShar
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.impl.DropShardingTableRuleStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowDatabaseDiscoveryRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptRulesStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptTableRuleStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowReadwriteSplittingRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowShardingBindingTableRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowShardingBroadcastTableRulesStatement;
@@ -58,6 +57,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -464,14 +464,15 @@ public final class DistSQLStatementParserEngineTest {
     public void assertParseShowEncryptRules() {
         SQLStatement sqlStatement = engine.parse(RQL_SHOW_ENCRYPT_RULES);
         assertTrue(sqlStatement instanceof ShowEncryptRulesStatement);
+        assertNull(((ShowEncryptRulesStatement) sqlStatement).getTableName());
         assertThat(((ShowEncryptRulesStatement) sqlStatement).getSchema().get().getIdentifier().getValue(), is("encrypt_db"));
     }
 
     @Test
     public void assertParseShowEncryptTableRule() {
         SQLStatement sqlStatement = engine.parse(RQL_SHOW_ENCRYPT_TABLE_RULE);
-        assertTrue(sqlStatement instanceof ShowEncryptTableRuleStatement);
-        assertThat(((ShowEncryptTableRuleStatement) sqlStatement).getSchema().get().getIdentifier().getValue(), is("encrypt_db"));
-        assertThat(((ShowEncryptTableRuleStatement) sqlStatement).getTableName(), is("t_encrypt"));
+        assertTrue(sqlStatement instanceof ShowEncryptRulesStatement);
+        assertThat(((ShowEncryptRulesStatement) sqlStatement).getSchema().get().getIdentifier().getValue(), is("encrypt_db"));
+        assertThat(((ShowEncryptRulesStatement) sqlStatement).getTableName(), is("t_encrypt"));
     }
 }
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptRulesStatement.java b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptRulesStatement.java
index 03a46fd..ea84ae8 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptRulesStatement.java
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptRulesStatement.java
@@ -17,14 +17,19 @@
 
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
+import lombok.Getter;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show encrypt rules statement.
  */
+@Getter
 public final class ShowEncryptRulesStatement extends ShowRulesStatement {
 
-    public ShowEncryptRulesStatement(final SchemaSegment schema) {
+    private final String tableName;
+
+    public ShowEncryptRulesStatement(final String tableName, final SchemaSegment schema) {
         super(schema);
+        this.tableName = tableName;
     }
 }
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptTableRuleStatement.java b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptTableRuleStatement.java
deleted file mode 100644
index 4235f97..0000000
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowEncryptTableRuleStatement.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.distsql.parser.statement.rql.show;
-
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
-
-/**
- * Show encrypt table rule statement.
- */
-@Getter
-public final class ShowEncryptTableRuleStatement extends ShowRulesStatement {
-
-    private final String tableName;
-
-    public ShowEncryptTableRuleStatement(final String tableName, final SchemaSegment schema) {
-        super(schema);
-        this.tableName = tableName;
-    }
-}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
index 4924b08..72d75ad 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
@@ -21,7 +21,6 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowDatabaseDiscoveryRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptRulesStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptTableRuleStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowReadwriteSplittingRulesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowShardingBindingTableRulesStatement;
@@ -32,7 +31,6 @@ import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DataSourcesQueryBackendHandler;
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DatabaseDiscoveryRulesQueryBackendHandler;
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.EncryptRulesQueryBackendHandler;
-import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.EncryptTableRuleQueryBackendHandler;
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ReadwriteSplittingRulesQueryBackendHandler;
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ShardingBindingTableRulesQueryBackendHandler;
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ShardingBroadcastTableRulesQueryBackendHandler;
@@ -73,9 +71,6 @@ public final class RQLBackendHandlerFactory {
         if (sqlStatement instanceof ShowEncryptRulesStatement) {
             return Optional.of(new EncryptRulesQueryBackendHandler((ShowEncryptRulesStatement) sqlStatement, backendConnection));
         }
-        if (sqlStatement instanceof ShowEncryptTableRuleStatement) {
-            return Optional.of(new EncryptTableRuleQueryBackendHandler((ShowEncryptTableRuleStatement) sqlStatement, backendConnection));
-        }
         if (sqlStatement instanceof ShowShardingTableRulesStatement) {
             return Optional.of(new ShardingTableRulesQueryBackendHandler((ShowShardingTableRulesStatement) sqlStatement, backendConnection));
         }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRulesQueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRulesQueryBackendHandler.java
index 879b383..912b658 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRulesQueryBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptRulesQueryBackendHandler.java
@@ -62,25 +62,32 @@ public final class EncryptRulesQueryBackendHandler extends SchemaRequiredBackend
     
     @Override
     protected ResponseHeader execute(final String schemaName, final ShowEncryptRulesStatement sqlStatement) {
-        loadRuleConfiguration(schemaName);
+        loadRuleConfiguration(schemaName, sqlStatement.getTableName());
         return new QueryResponseHeader(getQueryHeader(schemaName));
     }
     
-    private void loadRuleConfiguration(final String schemaName) {
+    private void loadRuleConfiguration(final String schemaName, final String tableName) {
         Optional<EncryptRuleConfiguration> ruleConfig = ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
                 .stream().filter(each -> each instanceof EncryptRuleConfiguration).map(each -> (EncryptRuleConfiguration) each).findAny();
-        data = ruleConfig.map(optional -> getAllEncryptColumns(optional).entrySet().iterator()).orElse(Collections.emptyIterator());
+        data = ruleConfig.map(optional -> getAllEncryptColumns(optional, tableName).entrySet().iterator()).orElse(Collections.emptyIterator());
         encryptors = ruleConfig.map(EncryptRuleConfiguration::getEncryptors).orElse(Maps.newHashMap());
     }
 
-    private Map<String, EncryptColumnRuleConfiguration> getAllEncryptColumns(final EncryptRuleConfiguration encryptRuleConfiguration) {
+    private Map<String, EncryptColumnRuleConfiguration> getAllEncryptColumns(final EncryptRuleConfiguration encryptRuleConfiguration, final String tableName) {
         Map<String, EncryptColumnRuleConfiguration> result = new HashMap<>();
-        for (EncryptTableRuleConfiguration encryptTableRuleConfiguration : encryptRuleConfiguration.getTables()) {
-            encryptTableRuleConfiguration.getColumns().forEach(each -> result.put(Joiner.on(".")
-                    .join(encryptTableRuleConfiguration.getName(), each.getLogicColumn()), each));
+        if (Objects.nonNull(tableName)) {
+            encryptRuleConfiguration.getTables().stream().filter(each -> tableName.equalsIgnoreCase(each.getName()))
+                    .findAny().ifPresent(each -> result.putAll(buildEncryptColumnRuleConfigurationMap(each)));
+        } else {
+            encryptRuleConfiguration.getTables().forEach(each -> result.putAll(buildEncryptColumnRuleConfigurationMap(each)));
         }
         return result;
     }
+
+    private Map<String, EncryptColumnRuleConfiguration> buildEncryptColumnRuleConfigurationMap(final EncryptTableRuleConfiguration encryptTableRuleConfiguration) {
+        return encryptTableRuleConfiguration.getColumns().stream().collect(Collectors.toMap(each -> Joiner.on(".")
+                .join(encryptTableRuleConfiguration.getName(), each.getLogicColumn()), each -> each));
+    }
     
     private List<QueryHeader> getQueryHeader(final String schemaName) {
         List<QueryHeader> result = new LinkedList<>();
@@ -105,6 +112,6 @@ public final class EncryptRulesQueryBackendHandler extends SchemaRequiredBackend
         return Arrays.asList(Splitter.on(".").splitToList(entry.getKey()).get(0), entry.getValue().getLogicColumn(),
                 entry.getValue().getCipherColumn(), entry.getValue().getPlainColumn(), encryptors.get(entry.getValue().getEncryptorName()).getType(),
                 Objects.nonNull(encryptProps) ? Joiner.on(",").join(encryptProps.entrySet().stream()
-                        .map(each -> Joiner.on(":").join(each.getKey(), each.getValue())).collect(Collectors.toList())) : "");
+                        .map(each -> Joiner.on("=").join(each.getKey(), each.getValue())).collect(Collectors.toList())) : "");
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptTableRuleQueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptTableRuleQueryBackendHandler.java
deleted file mode 100644
index 4c3248e..0000000
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptTableRuleQueryBackendHandler.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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.proxy.backend.text.distsql.rql.impl;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.Maps;
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptTableRuleStatement;
-import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
-import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-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.text.SchemaRequiredBackendHandler;
-
-import java.sql.Types;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.stream.Collectors;
-
-/**
- * Backend handler for show encrypt table rule.
- */
-public final class EncryptTableRuleQueryBackendHandler extends SchemaRequiredBackendHandler<ShowEncryptTableRuleStatement> {
-
-    private Iterator<EncryptColumnRuleConfiguration> data;
-
-    private Map<String, ShardingSphereAlgorithmConfiguration> encryptors;
-
-    public EncryptTableRuleQueryBackendHandler(final ShowEncryptTableRuleStatement sqlStatement, final BackendConnection backendConnection) {
-        super(sqlStatement, backendConnection);
-    }
-    
-    @Override
-    protected ResponseHeader execute(final String schemaName, final ShowEncryptTableRuleStatement sqlStatement) {
-        loadTableRuleConfiguration(schemaName, sqlStatement.getTableName());
-        return new QueryResponseHeader(getQueryHeader(schemaName));
-    }
-    
-    private void loadTableRuleConfiguration(final String schemaName, final String tableName) {
-        Optional<EncryptRuleConfiguration> ruleConfig = ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations()
-                .stream().filter(each -> each instanceof EncryptRuleConfiguration).map(each -> (EncryptRuleConfiguration) each).findAny();
-        Optional<EncryptTableRuleConfiguration> table = ruleConfig.map(optional -> optional.getTables()
-                .stream().filter(each -> tableName.equalsIgnoreCase(each.getName())).findAny()).orElse(Optional.empty());
-        data = table.map(optional -> optional.getColumns().stream().iterator()).orElse(Collections.emptyIterator());
-        encryptors = ruleConfig.map(EncryptRuleConfiguration::getEncryptors).orElse(Maps.newHashMap());
-    }
-
-    private List<QueryHeader> getQueryHeader(final String schemaName) {
-        List<QueryHeader> result = new LinkedList<>();
-        result.add(new QueryHeader(schemaName, "", "logicColumn", "logicColumn", Types.CHAR, "CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schemaName, "", "cipherColumn", "cipherColumn", Types.CHAR, "CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schemaName, "", "plainColumn", "plainColumn", Types.CHAR, "CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schemaName, "", "encryptorType", "encryptorType", Types.CHAR, "CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schemaName, "", "encryptorProps", "encryptorProps", Types.CHAR, "CHAR", 255, 0, false, false, false, false));
-        return result;
-    }
-    
-    @Override
-    public boolean next() {
-        return data.hasNext();
-    }
-    
-    @Override
-    public Collection<Object> getRowData() {
-        EncryptColumnRuleConfiguration column = data.next();
-        Properties encryptProps = encryptors.get(column.getEncryptorName()).getProps();
-        return Arrays.asList(column.getLogicColumn(), column.getCipherColumn(), column.getPlainColumn(), encryptors.get(column.getEncryptorName()).getType(),
-                Objects.nonNull(encryptProps) ? Joiner.on(",").join(encryptProps.entrySet().stream()
-                        .map(each -> Joiner.on(":").join(each.getKey(), each.getValue())).collect(Collectors.toList())) : "");
-    }
-}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptTableRuleQueryBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptTableRuleQueryBackendHandlerTest.java
deleted file mode 100644
index eae0e12..0000000
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/EncryptTableRuleQueryBackendHandlerTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.proxy.backend.text.distsql.rql.impl;
-
-import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowEncryptTableRuleStatement;
-import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
-import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
-import org.apache.shardingsphere.transaction.context.TransactionContexts;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class EncryptTableRuleQueryBackendHandlerTest {
-
-    @Mock
-    private BackendConnection backendConnection;
-
-    @Mock
-    private ShowEncryptTableRuleStatement sqlStatement;
-
-    @Mock
-    private MetaDataContexts metaDataContexts;
-
-    @Mock
-    private TransactionContexts transactionContexts;
-
-    @Mock
-    private ShardingSphereMetaData shardingSphereMetaData;
-
-    @Mock
-    private ShardingSphereRuleMetaData ruleMetaData;
-
-    private EncryptTableRuleQueryBackendHandler handler;
-
-    @Before
-    public void setUp() {
-        ProxyContext.getInstance().init(metaDataContexts, transactionContexts);
-        handler = new EncryptTableRuleQueryBackendHandler(sqlStatement, backendConnection);
-        when(metaDataContexts.getAllSchemaNames()).thenReturn(Collections.singletonList("test"));
-        when(metaDataContexts.getMetaData(eq("test"))).thenReturn(shardingSphereMetaData);
-        when(shardingSphereMetaData.getRuleMetaData()).thenReturn(ruleMetaData);
-        when(ruleMetaData.getConfigurations()).thenReturn(Collections.singleton(buildEncryptRuleConfiguration()));
-    }
-
-    @Test
-    public void assertExecute() {
-        when(sqlStatement.getTableName()).thenReturn("t_encrypt");
-        ResponseHeader responseHeader = handler.execute("test", sqlStatement);
-        assertNotNull(responseHeader);
-        assertTrue(responseHeader instanceof QueryResponseHeader);
-        Collection<Object> rowData = handler.getRowData();
-        assertThat(rowData.size(), is(5));
-        assertTrue(rowData.contains("user_id"));
-        assertTrue(rowData.contains("user_cipher"));
-        assertTrue(rowData.contains("user_plain"));
-        assertTrue(rowData.contains("aes"));
-        assertTrue(rowData.contains("aes-key-value:123"));
-    }
-
-    private EncryptRuleConfiguration buildEncryptRuleConfiguration() {
-        EncryptColumnRuleConfiguration encryptColumnRuleConfiguration =
-                new EncryptColumnRuleConfiguration("user_id", "user_cipher", null, "user_plain", "test");
-        EncryptTableRuleConfiguration encryptTableRuleConfiguration =
-                new EncryptTableRuleConfiguration("t_encrypt", Collections.singleton(encryptColumnRuleConfiguration));
-        Properties props = new Properties();
-        props.setProperty("aes-key-value", "123");
-        ShardingSphereAlgorithmConfiguration shardingSphereAlgorithmConfiguration = new ShardingSphereAlgorithmConfiguration("aes", props);
-        Map<String, ShardingSphereAlgorithmConfiguration> encryptors = new HashMap<>();
-        encryptors.put("test", shardingSphereAlgorithmConfiguration);
-        EncryptRuleConfiguration result =
-                new EncryptRuleConfiguration(Collections.singleton(encryptTableRuleConfiguration), encryptors);
-        return result;
-    }
-}