You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/02/09 14:12:45 UTC

[shardingsphere] branch master updated: Use MetaDataReviseEngine instead of RuleBasedSchemaMetaDataDecorator totally (#24084)

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 <zh...@apache.org>
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());
     }
 }