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

zhaojinchao 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 225c1539b37 Use MetaDataReviseEngine instead of 
RuleBasedSchemaMetaDataDecorator totally (#24084)
225c1539b37 is described below

commit 225c1539b37479da57884920a0d68485ca8a10c1
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Feb 9 22:12:38 2023 +0800

    Use MetaDataReviseEngine instead of RuleBasedSchemaMetaDataDecorator 
totally (#24084)
    
    * Use MetaDataReviseEngine instead of RuleBasedSchemaMetaDataDecorator 
totally
    
    * Refactor GenericSchemaBuilder
    
    * Fix checkstyle
---
 .../metadata/EncryptSchemaMetaDataDecorator.java   | 58 ----------------------
 .../reviser/EncryptMetaDataReviseEntry.java        | 10 +++-
 ....decorator.spi.RuleBasedSchemaMetaDataDecorator | 18 -------
 ...t.java => EncryptMetaDataReviseEngineTest.java} | 32 +++++-------
 .../metadata/ShardingSchemaMetaDataDecorator.java  | 58 ----------------------
 .../reviser/ShardingMetaDataReviseEntry.java       | 10 +++-
 ....decorator.spi.RuleBasedSchemaMetaDataDecorator | 18 -------
 ....java => ShardingMetaDataReviseEngineTest.java} | 45 +++++++----------
 .../schema/builder/GenericSchemaBuilder.java       | 15 ++----
 .../decorator/reviser/MetaDataReviseEngine.java    | 37 +++++++-------
 .../reviser/schema/SchemaMetaDataReviseEngine.java | 32 ++++++------
 .../schema/decorator/spi/MetaDataReviseEntry.java  |  6 ++-
 .../spi/RuleBasedSchemaMetaDataDecorator.java      | 45 -----------------
 .../reviser/SingleMetaDataReviseEntry.java         | 10 +++-
 ....decorator.spi.RuleBasedSchemaMetaDataDecorator | 18 -------
 ...st.java => SingleMetaDataReviseEngineTest.java} | 37 ++++++--------
 16 files changed, 112 insertions(+), 337 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
deleted file mode 100644
index 061ba32a226..00000000000
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
+++ /dev/null
@@ -1,58 +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.encrypt.metadata;
-
-import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaMetaDataReviseEngine;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-
-import javax.sql.DataSource;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * Schema meta data decorator for encrypt.
- */
-public final class EncryptSchemaMetaDataDecorator implements 
RuleBasedSchemaMetaDataDecorator<EncryptRule> {
-    
-    @Override
-    public Map<String, SchemaMetaData> decorate(final Map<String, 
SchemaMetaData> schemaMetaDataMap, final EncryptRule rule, final 
GenericSchemaBuilderMaterial material) {
-        Map<String, SchemaMetaData> result = new 
LinkedHashMap<>(schemaMetaDataMap.size(), 1);
-        for (Entry<String, SchemaMetaData> entry : 
schemaMetaDataMap.entrySet()) {
-            DatabaseType databaseType = 
material.getStorageTypes().get(entry.getKey());
-            DataSource dataSource = 
material.getDataSourceMap().get(entry.getKey());
-            result.put(entry.getKey(), new SchemaMetaDataReviseEngine<>(rule, 
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
-        }
-        return result;
-    }
-    
-    @Override
-    public int getOrder() {
-        return EncryptOrder.ORDER;
-    }
-    
-    @Override
-    public Class<EncryptRule> getTypeClass() {
-        return EncryptRule.class;
-    }
-}
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
index d9cc520dff0..dfb8901b882 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.encrypt.metadata.reviser;
 
+import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
 
@@ -38,7 +39,12 @@ public final class EncryptMetaDataReviseEntry implements 
MetaDataReviseEntry<Enc
     }
     
     @Override
-    public String getType() {
-        return EncryptRule.class.getSimpleName();
+    public int getOrder() {
+        return EncryptOrder.ORDER;
+    }
+    
+    @Override
+    public Class<EncryptRule> getTypeClass() {
+        return EncryptRule.class;
     }
 }
diff --git 
a/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
 
b/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
deleted file mode 100644
index d256c286bbc..00000000000
--- 
a/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
+++ /dev/null
@@ -1,18 +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.
-#
-
-org.apache.shardingsphere.encrypt.metadata.EncryptSchemaMetaDataDecorator
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptMetaDataReviseEngineTest.java
similarity index 69%
rename from 
features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
rename to 
features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptMetaDataReviseEngineTest.java
index e3bc39ecdaa..73996881756 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptMetaDataReviseEngineTest.java
@@ -21,12 +21,10 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.MetaDataReviseEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 import org.junit.Test;
 
 import java.sql.Types;
@@ -34,7 +32,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.LinkedList;
+import java.util.Map;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -42,25 +40,23 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class EncryptSchemaMetaDataDecoratorTest {
+public final class EncryptMetaDataReviseEngineTest {
     
     private static final String TABLE_NAME = "t_encrypt";
     
     @Test
-    public void assertDecorate() {
-        EncryptRule rule = createEncryptRule();
-        EncryptSchemaMetaDataDecorator loader = 
getEncryptMetaDataBuilder(rule, Collections.singleton(rule));
-        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
-        tableMetaDataList.add(createTableMetaData());
-        TableMetaData actual = 
loader.decorate(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
-                new SchemaMetaData(DefaultDatabase.LOGIC_NAME, 
tableMetaDataList)), rule, 
mock(GenericSchemaBuilderMaterial.class)).get(DefaultDatabase.LOGIC_NAME).getTables().iterator().next();
+    public void assertRevise() {
+        Map<String, SchemaMetaData> schemaMetaData = Collections.singletonMap(
+                DefaultDatabase.LOGIC_NAME, new 
SchemaMetaData(DefaultDatabase.LOGIC_NAME, 
Collections.singleton(createTableMetaData())));
+        TableMetaData actual = new 
MetaDataReviseEngine(Collections.singleton(mockEncryptRule())).revise(
+                schemaMetaData, 
mock(GenericSchemaBuilderMaterial.class)).get(DefaultDatabase.LOGIC_NAME).getTables().iterator().next();
         assertThat(actual.getColumns().size(), is(2));
-        Iterator<ColumnMetaData> columnsIterator = 
actual.getColumns().iterator();
-        assertThat(columnsIterator.next().getName(), is("id"));
-        assertThat(columnsIterator.next().getName(), is("pwd"));
+        Iterator<ColumnMetaData> columns = actual.getColumns().iterator();
+        assertThat(columns.next().getName(), is("id"));
+        assertThat(columns.next().getName(), is("pwd"));
     }
     
-    private EncryptRule createEncryptRule() {
+    private EncryptRule mockEncryptRule() {
         EncryptRule result = mock(EncryptRule.class);
         EncryptTable encryptTable = mock(EncryptTable.class);
         
when(result.findEncryptTable(TABLE_NAME)).thenReturn(Optional.of(encryptTable));
@@ -80,8 +76,4 @@ public final class EncryptSchemaMetaDataDecoratorTest {
                 new ColumnMetaData("pwd_like", Types.VARCHAR, false, false, 
true, true, false));
         return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(), 
Collections.emptyList());
     }
-    
-    private EncryptSchemaMetaDataDecorator getEncryptMetaDataBuilder(final 
EncryptRule encryptRule, final Collection<ShardingSphereRule> rules) {
-        return (EncryptSchemaMetaDataDecorator) 
OrderedSPILoader.getServices(RuleBasedSchemaMetaDataDecorator.class, 
rules).get(encryptRule);
-    }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
deleted file mode 100644
index 07514c7d43a..00000000000
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
+++ /dev/null
@@ -1,58 +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.sharding.metadata;
-
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaMetaDataReviseEngine;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import org.apache.shardingsphere.sharding.constant.ShardingOrder;
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
-
-import javax.sql.DataSource;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * Schema meta data decorator for sharding.
- */
-public final class ShardingSchemaMetaDataDecorator implements 
RuleBasedSchemaMetaDataDecorator<ShardingRule> {
-    
-    @Override
-    public Map<String, SchemaMetaData> decorate(final Map<String, 
SchemaMetaData> schemaMetaDataMap, final ShardingRule rule, final 
GenericSchemaBuilderMaterial material) {
-        Map<String, SchemaMetaData> result = new 
LinkedHashMap<>(schemaMetaDataMap.size(), 1);
-        for (Entry<String, SchemaMetaData> entry : 
schemaMetaDataMap.entrySet()) {
-            DatabaseType databaseType = 
material.getStorageTypes().get(entry.getKey());
-            DataSource dataSource = 
material.getDataSourceMap().get(entry.getKey());
-            result.put(entry.getKey(), new SchemaMetaDataReviseEngine<>(rule, 
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
-        }
-        return result;
-    }
-    
-    @Override
-    public int getOrder() {
-        return ShardingOrder.ORDER;
-    }
-    
-    @Override
-    public Class<ShardingRule> getTypeClass() {
-        return ShardingRule.class;
-    }
-}
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
index 662b490b8f5..60e3791cdf1 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.metadata.reviser;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaTableAggregationReviser;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
+import org.apache.shardingsphere.sharding.constant.ShardingOrder;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
 import java.util.Optional;
@@ -55,7 +56,12 @@ public final class ShardingMetaDataReviseEntry implements 
MetaDataReviseEntry<Sh
     }
     
     @Override
-    public String getType() {
-        return ShardingRule.class.getSimpleName();
+    public int getOrder() {
+        return ShardingOrder.ORDER;
+    }
+    
+    @Override
+    public Class<ShardingRule> getTypeClass() {
+        return ShardingRule.class;
     }
 }
diff --git 
a/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
 
b/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
deleted file mode 100644
index 0f004107c12..00000000000
--- 
a/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
+++ /dev/null
@@ -1,18 +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.
-#
-
-org.apache.shardingsphere.sharding.metadata.ShardingSchemaMetaDataDecorator
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingMetaDataReviseEngineTest.java
similarity index 53%
rename from 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
rename to 
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingMetaDataReviseEngineTest.java
index eece8b93d56..3c126a422d3 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingMetaDataReviseEngineTest.java
@@ -17,14 +17,11 @@
 
 package org.apache.shardingsphere.sharding.metadata;
 
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.MetaDataReviseEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.junit.Test;
 
@@ -33,38 +30,32 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class ShardingSchemaMetaDataDecoratorTest {
-    
-    private static final String TABLE_NAME = "t_order";
+public final class ShardingMetaDataReviseEngineTest {
     
     @Test
-    public void assertDecorateWithKeyGenerateStrategy() {
-        ShardingRule shardingRule = mock(ShardingRule.class);
-        
when(shardingRule.findLogicTableByActualTable(TABLE_NAME)).thenReturn(Optional.of(TABLE_NAME));
-        Collection<ShardingSphereRule> rules = 
Collections.singletonList(shardingRule);
-        ShardingSchemaMetaDataDecorator builder = 
(ShardingSchemaMetaDataDecorator) 
OrderedSPILoader.getServices(RuleBasedSchemaMetaDataDecorator.class, 
rules).get(shardingRule);
-        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
-        tableMetaDataList.add(createTableMetaData());
-        GenericSchemaBuilderMaterial material = 
mock(GenericSchemaBuilderMaterial.class);
-        when(material.getProps()).thenReturn(new ConfigurationProperties(new 
Properties()));
-        Map<String, SchemaMetaData> actual = 
builder.decorate(Collections.singletonMap("sharding_db",
-                new SchemaMetaData("sharding_db", tableMetaDataList)), 
shardingRule, material);
-        Collection<ColumnMetaData> columns = 
actual.get("sharding_db").getTables().iterator().next().getColumns();
-        Iterator<ColumnMetaData> iterator = columns.iterator();
-        assertTrue(iterator.next().isGenerated());
-        assertFalse(iterator.next().isGenerated());
-        assertFalse(iterator.next().isGenerated());
-        assertFalse(iterator.next().isGenerated());
+    public void assertReviseWithKeyGenerateStrategy() {
+        Map<String, SchemaMetaData> actual = new 
MetaDataReviseEngine(Collections.singleton(mockShardingRule())).revise(Collections.singletonMap("sharding_db",
+                new SchemaMetaData("sharding_db", 
Collections.singleton(createTableMetaData()))), 
mock(GenericSchemaBuilderMaterial.class, RETURNS_DEEP_STUBS));
+        Iterator<ColumnMetaData> columns = 
actual.get("sharding_db").getTables().iterator().next().getColumns().iterator();
+        assertTrue(columns.next().isGenerated());
+        assertFalse(columns.next().isGenerated());
+        assertFalse(columns.next().isGenerated());
+        assertFalse(columns.next().isGenerated());
+    }
+    
+    private ShardingRule mockShardingRule() {
+        ShardingRule result = mock(ShardingRule.class);
+        
when(result.findLogicTableByActualTable("t_order")).thenReturn(Optional.of("t_order"));
+        return result;
     }
     
     private TableMetaData createTableMetaData() {
@@ -72,6 +63,6 @@ public final class ShardingSchemaMetaDataDecoratorTest {
                 new ColumnMetaData("pwd_cipher", Types.VARCHAR, false, false, 
true, true, false),
                 new ColumnMetaData("pwd_plain", Types.VARCHAR, false, false, 
true, true, false),
                 new ColumnMetaData("product_id", Types.INTEGER, false, false, 
true, true, false));
-        return new TableMetaData(TABLE_NAME, columns, Collections.emptyList(), 
Collections.emptyList());
+        return new TableMetaData("t_order", columns, Collections.emptyList(), 
Collections.emptyList());
     }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index fc6284b261c..974a03d37fa 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereIndex;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.MetaDataReviseEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.metadata.SchemaMetaDataLoaderEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.metadata.SchemaMetaDataLoaderMaterial;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
@@ -36,7 +36,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.Tab
 import 
org.apache.shardingsphere.infra.metadata.database.schema.util.SchemaMetaDataUtil;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
-import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 
 import java.sql.SQLException;
 import java.util.Collection;
@@ -78,7 +77,7 @@ public final class GenericSchemaBuilder {
         if (!isProtocolTypeSameWithStorageType(material)) {
             result = translate(result, material);
         }
-        return decorate(result, material);
+        return revise(result, material);
     }
     
     private static boolean isProtocolTypeSameWithStorageType(final 
GenericSchemaBuilderMaterial material) {
@@ -115,15 +114,9 @@ public final class GenericSchemaBuilder {
         return result;
     }
     
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    private static Map<String, ShardingSphereSchema> decorate(final 
Map<String, SchemaMetaData> schemaMetaDataMap, final 
GenericSchemaBuilderMaterial material) {
+    private static Map<String, ShardingSphereSchema> revise(final Map<String, 
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterial material) 
{
         Map<String, SchemaMetaData> result = new 
LinkedHashMap<>(schemaMetaDataMap);
-        for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataDecorator> entry 
: OrderedSPILoader.getServices(RuleBasedSchemaMetaDataDecorator.class, 
material.getRules()).entrySet()) {
-            if (!(entry.getKey() instanceof TableContainedRule)) {
-                continue;
-            }
-            result.putAll(entry.getValue().decorate(result, 
(TableContainedRule) entry.getKey(), material));
-        }
+        result.putAll(new 
MetaDataReviseEngine(material.getRules().stream().filter(each -> each 
instanceof TableContainedRule).collect(Collectors.toList())).revise(result, 
material));
         return convertToSchemaMap(result, material);
     }
     
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/MetaDataReviseEngine.java
similarity index 66%
rename from 
kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
rename to 
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/MetaDataReviseEngine.java
index ec656ca065b..c9696d1497c 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/MetaDataReviseEngine.java
@@ -15,44 +15,43 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.single.metadata;
+package 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaMetaDataReviseEngine;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import org.apache.shardingsphere.single.constant.SingleOrder;
-import org.apache.shardingsphere.single.rule.SingleRule;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
 import javax.sql.DataSource;
+import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
 /**
- * Schema meta data decorator for single.
+ * Meta data revise engine.
  */
-public final class SingleSchemaMetaDataDecorator implements 
RuleBasedSchemaMetaDataDecorator<SingleRule> {
+@RequiredArgsConstructor
+public final class MetaDataReviseEngine {
     
-    @Override
-    public Map<String, SchemaMetaData> decorate(final Map<String, 
SchemaMetaData> schemaMetaDataMap, final SingleRule rule, final 
GenericSchemaBuilderMaterial material) {
+    private final Collection<ShardingSphereRule> rules;
+    
+    /**
+     * Revise meta data.
+     * 
+     * @param schemaMetaDataMap schema meta data map
+     * @param material generic schema builder material
+     * @return revised meta data
+     */
+    public Map<String, SchemaMetaData> revise(final Map<String, 
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterial material) 
{
         Map<String, SchemaMetaData> result = new 
LinkedHashMap<>(schemaMetaDataMap.size(), 1);
         for (Entry<String, SchemaMetaData> entry : 
schemaMetaDataMap.entrySet()) {
             DatabaseType databaseType = 
material.getStorageTypes().get(entry.getKey());
             DataSource dataSource = 
material.getDataSourceMap().get(entry.getKey());
-            result.put(entry.getKey(), new SchemaMetaDataReviseEngine<>(rule, 
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
+            result.put(entry.getKey(), new SchemaMetaDataReviseEngine(rules, 
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
         }
         return result;
     }
-    
-    @Override
-    public int getOrder() {
-        return SingleOrder.ORDER;
-    }
-    
-    @Override
-    public Class<SingleRule> getTypeClass() {
-        return SingleRule.class;
-    }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
index 4b855f27cbb..afc49857da0 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
@@ -25,21 +25,21 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.Me
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 
 import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
  * Schema meta data revise engine.
- *
- * @param <T> type of rule
  */
 @RequiredArgsConstructor
-public final class SchemaMetaDataReviseEngine<T extends ShardingSphereRule> {
+public final class SchemaMetaDataReviseEngine {
     
-    private final T rule;
+    private final Collection<ShardingSphereRule> rules;
     
     private final ConfigurationProperties props;
     
@@ -49,20 +49,22 @@ public final class SchemaMetaDataReviseEngine<T extends 
ShardingSphereRule> {
     
     /**
      * Revise schema meta data.
-     *
+     * 
      * @param originalMetaData original schema meta data
-     * @return revised schema data
+     * @return revised schema meta data
      */
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({"rawtypes", "unchecked"})
     public SchemaMetaData revise(final SchemaMetaData originalMetaData) {
-        @SuppressWarnings("rawtypes")
-        Optional<MetaDataReviseEntry> reviseEntry = 
TypedSPILoader.findService(MetaDataReviseEntry.class, 
rule.getClass().getSimpleName());
-        if (!reviseEntry.isPresent()) {
-            return originalMetaData;
+        SchemaMetaData result = originalMetaData;
+        for (Entry<ShardingSphereRule, MetaDataReviseEntry> entry : 
OrderedSPILoader.getServices(MetaDataReviseEntry.class, rules).entrySet()) {
+            result = revise(result, entry.getKey(), entry.getValue());
         }
-        @SuppressWarnings("rawtypes")
-        TableMetaDataReviseEngine<T> tableMetaDataReviseEngine = new 
TableMetaDataReviseEngine<>(rule, databaseType, dataSource, reviseEntry.get());
-        Optional<? extends SchemaTableAggregationReviser<T>> 
aggregationReviser = reviseEntry.get().getSchemaTableAggregationReviser(rule, 
props);
+        return result;
+    }
+    
+    private <T extends ShardingSphereRule> SchemaMetaData revise(final 
SchemaMetaData originalMetaData, final T rule, final MetaDataReviseEntry<T> 
reviseEntry) {
+        TableMetaDataReviseEngine<T> tableMetaDataReviseEngine = new 
TableMetaDataReviseEngine<>(rule, databaseType, dataSource, reviseEntry);
+        Optional<? extends SchemaTableAggregationReviser<T>> 
aggregationReviser = reviseEntry.getSchemaTableAggregationReviser(rule, props);
         if (!aggregationReviser.isPresent()) {
             return new SchemaMetaData(originalMetaData.getName(), 
originalMetaData.getTables().stream().map(tableMetaDataReviseEngine::revise).collect(Collectors.toList()));
         }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
index 338b76a1136..9a12364e38a 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
@@ -27,7 +27,8 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.revise
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaTableAggregationReviser;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table.TableNameReviser;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPI;
 
 import java.util.Optional;
 
@@ -36,7 +37,8 @@ import java.util.Optional;
  * 
  * @param <T> type of rule
  */
-public interface MetaDataReviseEntry<T extends ShardingSphereRule> extends 
TypedSPI {
+@SingletonSPI
+public interface MetaDataReviseEntry<T extends ShardingSphereRule> extends 
OrderedSPI<T> {
     
     /**
      * Get schema table aggregation reviser.
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/RuleBasedSchemaMetaDataDecorator.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/RuleBasedSchemaMetaDataDecorator.java
deleted file mode 100644
index c09954b0982..00000000000
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/RuleBasedSchemaMetaDataDecorator.java
+++ /dev/null
@@ -1,45 +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.infra.metadata.database.schema.decorator.spi;
-
-import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
-import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
-import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPI;
-
-import java.util.Map;
-
-/**
- * Rule based schema meta data decorator.
- * 
- * @param <T> type of ShardingSphere rule
- */
-@SingletonSPI
-public interface RuleBasedSchemaMetaDataDecorator<T extends 
TableContainedRule> extends OrderedSPI<T> {
-    
-    /**
-     * Decorate schema meta data.
-     *
-     * @param schemaMetaDataMap schema meta data map
-     * @param rule ShardingSphere rule
-     * @param material generic schema builder material
-     * @return schema meta data map
-     */
-    Map<String, SchemaMetaData> decorate(Map<String, SchemaMetaData> 
schemaMetaDataMap, T rule, GenericSchemaBuilderMaterial material);
-}
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
index 10e2b1b6291..a530e749f53 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.single.metadata.reviser;
 
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
+import org.apache.shardingsphere.single.constant.SingleOrder;
 import org.apache.shardingsphere.single.rule.SingleRule;
 
 import java.util.Optional;
@@ -38,7 +39,12 @@ public final class SingleMetaDataReviseEntry implements 
MetaDataReviseEntry<Sing
     }
     
     @Override
-    public String getType() {
-        return SingleRule.class.getSimpleName();
+    public int getOrder() {
+        return SingleOrder.ORDER;
+    }
+    
+    @Override
+    public Class<SingleRule> getTypeClass() {
+        return SingleRule.class;
     }
 }
diff --git 
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
 
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
deleted file mode 100644
index a3f0f576f90..00000000000
--- 
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator
+++ /dev/null
@@ -1,18 +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.
-#
-
-org.apache.shardingsphere.single.metadata.SingleSchemaMetaDataDecorator
diff --git 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecoratorTest.java
 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/metadata/SingleMetaDataReviseEngineTest.java
similarity index 55%
rename from 
kernel/single/core/src/test/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecoratorTest.java
rename to 
kernel/single/core/src/test/java/org/apache/shardingsphere/single/metadata/SingleMetaDataReviseEngineTest.java
index 7064e862bee..9c86c0a9260 100644
--- 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecoratorTest.java
+++ 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/metadata/SingleMetaDataReviseEngineTest.java
@@ -18,13 +18,11 @@
 package org.apache.shardingsphere.single.metadata;
 
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.MetaDataReviseEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.single.rule.SingleRule;
 import org.junit.Test;
 
@@ -33,41 +31,36 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.mock;
 
-public final class SingleSchemaMetaDataDecoratorTest {
+public final class SingleMetaDataReviseEngineTest {
     
     private static final String TABLE_NAME = "t_single";
     
     @Test
-    public void assertDecorate() {
-        SingleRule singleRule = mock(SingleRule.class);
-        Collection<ShardingSphereRule> rules = 
Collections.singletonList(singleRule);
-        SingleSchemaMetaDataDecorator builder = 
(SingleSchemaMetaDataDecorator) 
OrderedSPILoader.getServices(RuleBasedSchemaMetaDataDecorator.class, 
rules).get(singleRule);
-        Map<String, SchemaMetaData> schemaMetaDataMap = 
mockSchemaMetaDataMap();
-        TableMetaData tableMetaData = builder.decorate(schemaMetaDataMap, 
singleRule, 
mock(GenericSchemaBuilderMaterial.class)).get("sharding_db").getTables().iterator().next();
-        Iterator<ColumnMetaData> columnsIterator = 
tableMetaData.getColumns().iterator();
-        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 
Types.INTEGER, true, false, false, true, false)));
-        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 
Types.VARCHAR, false, false, false, true, false)));
-        assertThat(columnsIterator.next(), is(new ColumnMetaData("doc", 
Types.LONGVARCHAR, false, false, false, true, false)));
+    public void assertRevise() {
+        Map<String, SchemaMetaData> schemaMetaDataMap = 
Collections.singletonMap("sharding_db", new SchemaMetaData("sharding_db", 
Collections.singleton(createTableMetaData())));
+        TableMetaData tableMetaData = new 
MetaDataReviseEngine(Collections.singleton(mock(SingleRule.class))).revise(
+                schemaMetaDataMap, 
mock(GenericSchemaBuilderMaterial.class)).get("sharding_db").getTables().iterator().next();
+        Iterator<ColumnMetaData> columns = 
tableMetaData.getColumns().iterator();
+        assertThat(columns.next(), is(new ColumnMetaData("id", Types.INTEGER, 
true, false, false, true, false)));
+        assertThat(columns.next(), is(new ColumnMetaData("name", 
Types.VARCHAR, false, false, false, true, false)));
+        assertThat(columns.next(), is(new ColumnMetaData("doc", 
Types.LONGVARCHAR, false, false, false, true, false)));
         assertThat(tableMetaData.getIndexes().size(), is(2));
-        Iterator<IndexMetaData> indexesIterator = 
tableMetaData.getIndexes().iterator();
-        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
-        assertThat(indexesIterator.next(), is(new IndexMetaData("idx_name")));
+        Iterator<IndexMetaData> indexes = 
tableMetaData.getIndexes().iterator();
+        assertThat(indexes.next(), is(new IndexMetaData("id")));
+        assertThat(indexes.next(), is(new IndexMetaData("idx_name")));
     }
     
-    private Map<String, SchemaMetaData> mockSchemaMetaDataMap() {
+    private TableMetaData createTableMetaData() {
         Collection<ColumnMetaData> columns = Arrays.asList(new 
ColumnMetaData("id", Types.INTEGER, true, false, false, true, false),
                 new ColumnMetaData("name", Types.VARCHAR, false, false, false, 
true, false),
                 new ColumnMetaData("doc", Types.LONGVARCHAR, false, false, 
false, true, false));
         Collection<IndexMetaData> indexMetaDataList = Arrays.asList(new 
IndexMetaData("id_" + TABLE_NAME), new IndexMetaData("idx_name_" + TABLE_NAME));
-        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
-        tableMetaDataList.add(new TableMetaData(TABLE_NAME, columns, 
indexMetaDataList, Collections.emptyList()));
-        return Collections.singletonMap("sharding_db", new 
SchemaMetaData("sharding_db", tableMetaDataList));
+        return new TableMetaData(TABLE_NAME, columns, indexMetaDataList, 
Collections.emptyList());
     }
 }


Reply via email to