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

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

commit d52ee4fa9aefa75cc01a0cb1fa6c164cb787a2eb
Author: lanchengx <[email protected]>
AuthorDate: Wed Feb 16 17:31:29 2022 +0800

    `show encrypt rules` syntax add display of data type
---
 .../rule/YamlEncryptColumnRuleConfiguration.java   |  8 ++++
 .../EncryptColumnRuleConfigurationYamlSwapper.java | 10 ++++-
 .../handler/query/EncryptRuleQueryResultSet.java   | 50 +++++++++++-----------
 .../query/EncryptRuleQueryResultSetTest.java       |  9 ++--
 4 files changed, 46 insertions(+), 31 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/rule/YamlEncryptColumnRuleConfiguration.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/rule/YamlEncryptColumnRuleConfiguration.java
index d6a6e6f..71e68f1 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/rule/YamlEncryptColumnRuleConfiguration.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/rule/YamlEncryptColumnRuleConfiguration.java
@@ -30,11 +30,19 @@ public final class YamlEncryptColumnRuleConfiguration 
implements YamlConfigurati
     
     private String logicColumn;
     
+    private String logicDataType;
+    
     private String cipherColumn;
     
+    private String cipherDataType;
+    
     private String assistedQueryColumn;
     
+    private String assistedQueryDataType;
+    
     private String plainColumn;
     
+    private String plainDataType;
+    
     private String encryptorName;
 }
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/EncryptColumnRuleConfigurationYamlSwapper.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/EncryptColumnRuleConfigurationYamlSwapper.java
index a95f41d..8f96135 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/EncryptColumnRuleConfigurationYamlSwapper.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/EncryptColumnRuleConfigurationYamlSwapper.java
@@ -33,12 +33,18 @@ public final class 
EncryptColumnRuleConfigurationYamlSwapper implements YamlConf
         result.setCipherColumn(data.getCipherColumn());
         result.setAssistedQueryColumn(data.getAssistedQueryColumn());
         result.setEncryptorName(data.getEncryptorName());
+        result.setLogicDataType(data.getLogicDataType());
+        result.setPlainDataType(data.getPlainDataType());
+        result.setCipherDataType(data.getCipherDataType());
+        result.setAssistedQueryDataType(data.getAssistedQueryDataType());
         return result;
     }
     
     @Override
     public EncryptColumnRuleConfiguration swapToObject(final 
YamlEncryptColumnRuleConfiguration yamlConfig) {
-        return new EncryptColumnRuleConfiguration(
-                yamlConfig.getLogicColumn(), yamlConfig.getCipherColumn(), 
yamlConfig.getAssistedQueryColumn(), yamlConfig.getPlainColumn(), 
yamlConfig.getEncryptorName());
+        return new EncryptColumnRuleConfiguration(yamlConfig.getLogicColumn(), 
yamlConfig.getLogicDataType(),
+                yamlConfig.getCipherColumn(), yamlConfig.getCipherDataType(),
+                yamlConfig.getAssistedQueryColumn(), 
yamlConfig.getAssistedQueryDataType(),
+                yamlConfig.getPlainColumn(), yamlConfig.getPlainDataType(), 
yamlConfig.getEncryptorName());
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSet.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSet.java
index 0381e6c..d86ef95 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSet.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSet.java
@@ -18,22 +18,20 @@
 package org.apache.shardingsphere.encrypt.distsql.handler.query;
 
 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.encrypt.distsql.parser.statement.ShowEncryptRulesStatement;
 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.infra.distsql.query.DistSQLResultSet;
 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.HashMap;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -43,36 +41,38 @@ import java.util.stream.Collectors;
  */
 public final class EncryptRuleQueryResultSet implements DistSQLResultSet {
     
-    private Iterator<Entry<String, EncryptColumnRuleConfiguration>> data;
-    
-    private Map<String, ShardingSphereAlgorithmConfiguration> encryptors;
+    private Iterator<Collection<Object>> data = Collections.emptyIterator();
     
     @Override
     public void init(final ShardingSphereMetaData metaData, final SQLStatement 
sqlStatement) {
-        Optional<EncryptRuleConfiguration> ruleConfig = 
metaData.getRuleMetaData().getConfigurations()
-                .stream().filter(each -> each instanceof 
EncryptRuleConfiguration).map(each -> (EncryptRuleConfiguration) 
each).findAny();
-        data = ruleConfig.map(optional -> getAllEncryptColumns(optional, 
((ShowEncryptRulesStatement) 
sqlStatement).getTableName()).entrySet().iterator()).orElse(Collections.emptyIterator());
-        encryptors = 
ruleConfig.map(EncryptRuleConfiguration::getEncryptors).orElseGet(Collections::emptyMap);
+        Optional<EncryptRuleConfiguration> ruleConfiguration = 
metaData.getRuleMetaData().findRuleConfiguration(EncryptRuleConfiguration.class).stream().findAny();
+        ruleConfiguration.ifPresent(op -> data = buildData(op, 
(ShowEncryptRulesStatement) sqlStatement).iterator());
     }
     
-    private Map<String, EncryptColumnRuleConfiguration> 
getAllEncryptColumns(final EncryptRuleConfiguration encryptRuleConfig, final 
String tableName) {
-        Map<String, EncryptColumnRuleConfiguration> result = new HashMap<>();
-        if (Objects.nonNull(tableName)) {
-            encryptRuleConfig.getTables().stream().filter(each -> 
tableName.equalsIgnoreCase(each.getName()))
-                    .findAny().ifPresent(each -> 
result.putAll(buildEncryptColumnRuleConfigurationMap(each)));
-        } else {
-            encryptRuleConfig.getTables().forEach(each -> 
result.putAll(buildEncryptColumnRuleConfigurationMap(each)));
-        }
-        return result;
+    private Collection<Collection<Object>> buildData(final 
EncryptRuleConfiguration configuration, final ShowEncryptRulesStatement 
sqlStatement) {
+        return configuration.getTables().stream().filter(each -> 
Objects.isNull(sqlStatement.getTableName()) || 
each.getName().equals(sqlStatement.getTableName()))
+                .map(each -> buildColumnData(each, 
configuration.getEncryptors())).flatMap(Collection::stream).collect(Collectors.toCollection(LinkedList::new));
     }
     
-    private Map<String, EncryptColumnRuleConfiguration> 
buildEncryptColumnRuleConfigurationMap(final EncryptTableRuleConfiguration 
encryptTableRuleConfig) {
-        return 
encryptTableRuleConfig.getColumns().stream().collect(Collectors.toMap(each -> 
String.join(".", encryptTableRuleConfig.getName(), each.getLogicColumn()), each 
-> each));
+    private Collection<Collection<Object>> buildColumnData(final 
EncryptTableRuleConfiguration tableRuleConfiguration, final Map<String, 
ShardingSphereAlgorithmConfiguration> algorithmMap) {
+        Collection<Collection<Object>> result = new LinkedList<>();
+        tableRuleConfiguration.getColumns().forEach(each -> {
+            ShardingSphereAlgorithmConfiguration algorithmConfiguration = 
algorithmMap.get(each.getEncryptorName());
+            result.add(Arrays.asList(tableRuleConfiguration.getName(), 
each.getLogicColumn(), each.getLogicDataType(), each.getCipherColumn(), 
each.getCipherDataType(),
+                    each.getPlainColumn(), each.getPlainDataType(), 
each.getAssistedQueryColumn(), each.getAssistedQueryDataType(),
+                    algorithmConfiguration.getType(), 
PropertiesConverter.convert(algorithmConfiguration.getProps()),
+                    
Objects.isNull(tableRuleConfiguration.getQueryWithCipherColumn()) ? 
Boolean.FALSE.toString() : 
tableRuleConfiguration.getQueryWithCipherColumn().toString()));
+        });
+        return result;
     }
     
     @Override
     public Collection<String> getColumnNames() {
-        return Arrays.asList("table", "logic_column", "cipher_column", 
"plain_column", "encryptor_type", "encryptor_props");
+        return Arrays.asList("table", "logic_column", "logic_data_type",
+                "cipher_column", "cipher_data_type",
+                "plain_column", "plain_data_type",
+                "assisted_query_column", "assisted_query_data_type",
+                "encryptor_type", "encryptor_props", 
"query_with_cipher_column");
     }
     
     @Override
@@ -82,9 +82,7 @@ public final class EncryptRuleQueryResultSet implements 
DistSQLResultSet {
     
     @Override
     public Collection<Object> getRowData() {
-        Entry<String, EncryptColumnRuleConfiguration> entry = data.next();
-        return Arrays.asList(entry.getKey().split("\\.")[0], 
entry.getValue().getLogicColumn(), entry.getValue().getCipherColumn(), 
entry.getValue().getPlainColumn(), 
-                encryptors.get(entry.getValue().getEncryptorName()).getType(), 
PropertiesConverter.convert(encryptors.get(entry.getValue().getEncryptorName()).getProps()));
+        return data.next();
     }
     
     @Override
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
index 3548408..3d8d86a 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
@@ -34,6 +34,7 @@ import java.util.Properties;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -43,20 +44,22 @@ public final class EncryptRuleQueryResultSetTest {
     @Test
     public void assertGetRowData() {
         ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(metaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(getRuleConfiguration()));
+        
when(metaData.getRuleMetaData().findRuleConfiguration(any())).thenReturn(Collections.singleton(getRuleConfiguration()));
         DistSQLResultSet resultSet = new EncryptRuleQueryResultSet();
         resultSet.init(metaData, mock(ShowEncryptRulesStatement.class));
         Collection<Object> actual = resultSet.getRowData();
-        assertThat(actual.size(), is(6));
+        assertThat(actual.size(), is(12));
         assertTrue(actual.contains("t_encrypt"));
         assertTrue(actual.contains("user_id"));
         assertTrue(actual.contains("user_cipher"));
         assertTrue(actual.contains("user_plain"));
         assertTrue(actual.contains("md5"));
+        assertTrue(actual.contains("varchar(10)"));
     }
     
     private RuleConfiguration getRuleConfiguration() {
-        EncryptColumnRuleConfiguration encryptColumnRuleConfig = new 
EncryptColumnRuleConfiguration("user_id", "user_cipher", null, "user_plain", 
"test");
+        EncryptColumnRuleConfiguration encryptColumnRuleConfig = new 
EncryptColumnRuleConfiguration("user_id", "varchar(10)", "user_cipher", 
"varchar(10)", null, null,
+                "user_plain", "varchar(10)", "test");
         EncryptTableRuleConfiguration encryptTableRuleConfig = new 
EncryptTableRuleConfiguration("t_encrypt", 
Collections.singleton(encryptColumnRuleConfig), null);
         ShardingSphereAlgorithmConfiguration shardingSphereAlgorithmConfig = 
new ShardingSphereAlgorithmConfiguration("md5", new Properties());
         return new 
EncryptRuleConfiguration(Collections.singleton(encryptTableRuleConfig), 
Collections.singletonMap("test", shardingSphereAlgorithmConfig));

Reply via email to