You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/05/08 05:30:45 UTC

[shardingsphere] branch master updated: Fix wrong route result when execute create schema statement in encrypt scenario (#17438)

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

panjuan 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 266a85481c5 Fix wrong route result when execute create schema statement in encrypt scenario (#17438)
266a85481c5 is described below

commit 266a85481c5c122c0a0e2d72d4449ca2573c9c20
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Sun May 8 13:30:38 2022 +0800

    Fix wrong route result when execute create schema statement in encrypt scenario (#17438)
---
 .../singletable/route/SingleTableSQLRouter.java    | 54 +++++++++++---------
 .../SingleTableDatabaseBroadcastRouteEngine.java   | 38 +++++++++++++++
 .../route/engine/SingleTableRouteEngine.java       | 35 +++++++++++++
 .../engine/SingleTableRouteEngineFactory.java      | 57 ++++++++++++++++++++++
 .../SingleTableStandardRouteEngine.java}           | 14 +++---
 .../SingleTableStandardRouteEngineTest.java}       | 12 ++---
 6 files changed, 174 insertions(+), 36 deletions(-)

diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
index 2591f37cb1a..1ecee6f2852 100644
--- a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
@@ -33,6 +33,7 @@ import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.singletable.constant.SingleTableOrder;
+import org.apache.shardingsphere.singletable.route.engine.SingleTableRouteEngineFactory;
 import org.apache.shardingsphere.singletable.rule.SingleTableRule;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
@@ -48,37 +49,50 @@ public final class SingleTableSQLRouter implements SQLRouter<SingleTableRule> {
     
     @Override
     public RouteContext createRouteContext(final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final SingleTableRule rule, final ConfigurationProperties props) {
-        RouteContext result = new RouteContext();
         if (1 == metaData.getResource().getDataSources().size()) {
-            String logicDataSource = rule.getDataSourceNames().iterator().next();
-            String actualDataSource = metaData.getResource().getDataSources().keySet().iterator().next();
-            result.getRouteUnits().add(new RouteUnit(new RouteMapper(logicDataSource, actualDataSource), Collections.emptyList()));
-        } else {
-            route(logicSQL.getSqlStatementContext(), metaData, rule, props, result);
+            return createSingleDataSourceRouteContext(rule, metaData);
+        }
+        RouteContext result = new RouteContext();
+        SQLStatementContext<?> sqlStatementContext = logicSQL.getSqlStatementContext();
+        Collection<QualifiedTable> singleTableNames = getSingleTableNames(sqlStatementContext, metaData, rule, result);
+        if (!singleTableNames.isEmpty()) {
+            validateSameDataSource(sqlStatementContext, rule, props, singleTableNames, result);
         }
+        SingleTableRouteEngineFactory.newInstance(singleTableNames, sqlStatementContext.getSqlStatement()).ifPresent(optional -> optional.route(result, rule));
         return result;
     }
     
-    private void route(final SQLStatementContext<?> sqlStatementContext, final ShardingSphereMetaData metaData, final SingleTableRule rule,
-                       final ConfigurationProperties props, final RouteContext routeContext) {
+    @Override
+    public void decorateRouteContext(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData,
+                                     final SingleTableRule rule, final ConfigurationProperties props) {
+        SQLStatementContext<?> sqlStatementContext = logicSQL.getSqlStatementContext();
         Collection<QualifiedTable> singleTableNames = getSingleTableNames(sqlStatementContext, metaData, rule, routeContext);
         if (singleTableNames.isEmpty()) {
             return;
         }
-        validateSameDataSource(sqlStatementContext, rule, routeContext, props, singleTableNames);
-        new SingleTableRouteEngine(singleTableNames, sqlStatementContext.getSqlStatement()).route(routeContext, rule);
+        validateSameDataSource(sqlStatementContext, rule, props, singleTableNames, routeContext);
+        SingleTableRouteEngineFactory.newInstance(singleTableNames, sqlStatementContext.getSqlStatement()).ifPresent(optional -> optional.route(routeContext, rule));
     }
     
-    private Collection<QualifiedTable> getSingleTableNames(final SQLStatementContext<?> sqlStatementContext, final ShardingSphereMetaData metaData,
-                                                           final SingleTableRule rule, final RouteContext routeContext) {
-        Collection<QualifiedTable> result = getQualifiedTables(metaData, sqlStatementContext.getTablesContext().getTables(), sqlStatementContext.getDatabaseType());
+    private RouteContext createSingleDataSourceRouteContext(final SingleTableRule rule, final ShardingSphereMetaData metaData) {
+        String logicDataSource = rule.getDataSourceNames().iterator().next();
+        String actualDataSource = metaData.getResource().getDataSources().keySet().iterator().next();
+        RouteContext result = new RouteContext();
+        result.getRouteUnits().add(new RouteUnit(new RouteMapper(logicDataSource, actualDataSource), Collections.emptyList()));
+        return result;
+    }
+    
+    private static Collection<QualifiedTable> getSingleTableNames(final SQLStatementContext<?> sqlStatementContext, final ShardingSphereMetaData metaData, 
+                                                                  final SingleTableRule rule, final RouteContext routeContext) {
+        DatabaseType databaseType = sqlStatementContext.getDatabaseType();
+        Collection<QualifiedTable> result = getQualifiedTables(metaData, sqlStatementContext.getTablesContext().getTables(), databaseType);
         if (result.isEmpty() && sqlStatementContext instanceof IndexAvailable) {
-            result = IndexMetaDataUtil.getTableNamesFromMetaData(metaData, ((IndexAvailable) sqlStatementContext).getIndexes(), sqlStatementContext.getDatabaseType());
+            result = IndexMetaDataUtil.getTableNamesFromMetaData(metaData, ((IndexAvailable) sqlStatementContext).getIndexes(), databaseType);
         }
         return routeContext.getRouteUnits().isEmpty() && sqlStatementContext.getSqlStatement() instanceof CreateTableStatement ? result : rule.getSingleTableNames(result);
     }
     
-    private Collection<QualifiedTable> getQualifiedTables(final ShardingSphereMetaData metaData, final Collection<SimpleTableSegment> tableSegments, final DatabaseType databaseType) {
+    private static Collection<QualifiedTable> getQualifiedTables(final ShardingSphereMetaData metaData, final Collection<SimpleTableSegment> tableSegments, final DatabaseType databaseType) {
         Collection<QualifiedTable> result = new LinkedList<>();
         String schemaName = databaseType.getDefaultSchema(metaData.getDatabaseName());
         for (SimpleTableSegment each : tableSegments) {
@@ -88,8 +102,8 @@ public final class SingleTableSQLRouter implements SQLRouter<SingleTableRule> {
         return result;
     }
     
-    private void validateSameDataSource(final SQLStatementContext<?> sqlStatementContext, final SingleTableRule rule,
-                                        final RouteContext routeContext, final ConfigurationProperties props, final Collection<QualifiedTable> singleTableNames) {
+    private static void validateSameDataSource(final SQLStatementContext<?> sqlStatementContext, final SingleTableRule rule,
+                                               final ConfigurationProperties props, final Collection<QualifiedTable> singleTableNames, final RouteContext routeContext) {
         boolean sqlFederationEnabled = props.getValue(ConfigurationPropertyKey.SQL_FEDERATION_ENABLED);
         boolean allTablesInSameDataSource = sqlFederationEnabled
                 ? sqlStatementContext instanceof SelectStatementContext || rule.isSingleTablesInSameDataSource(singleTableNames)
@@ -97,12 +111,6 @@ public final class SingleTableSQLRouter implements SQLRouter<SingleTableRule> {
         Preconditions.checkState(allTablesInSameDataSource, "All tables must be in the same datasource.");
     }
     
-    @Override
-    public void decorateRouteContext(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData,
-                                     final SingleTableRule rule, final ConfigurationProperties props) {
-        route(logicSQL.getSqlStatementContext(), metaData, rule, props, routeContext);
-    }
-    
     @Override
     public int getOrder() {
         return SingleTableOrder.ORDER;
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableDatabaseBroadcastRouteEngine.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableDatabaseBroadcastRouteEngine.java
new file mode 100644
index 00000000000..2f09f22bfc3
--- /dev/null
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableDatabaseBroadcastRouteEngine.java
@@ -0,0 +1,38 @@
+/*
+ * 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.singletable.route.engine;
+
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.singletable.rule.SingleTableRule;
+
+import java.util.Collections;
+
+/**
+ * Single table databases broadcast route engine.
+ */
+public final class SingleTableDatabaseBroadcastRouteEngine implements SingleTableRouteEngine {
+    
+    @Override
+    public void route(final RouteContext routeContext, final SingleTableRule singleTableRule) {
+        for (String each : singleTableRule.getDataSourceNames()) {
+            routeContext.getRouteUnits().add(new RouteUnit(new RouteMapper(each, each), Collections.emptyList()));
+        }
+    }
+}
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableRouteEngine.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableRouteEngine.java
new file mode 100644
index 00000000000..e9293cd9379
--- /dev/null
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableRouteEngine.java
@@ -0,0 +1,35 @@
+/*
+ * 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.singletable.route.engine;
+
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.singletable.rule.SingleTableRule;
+
+/**
+ * Single table route engine.
+ */
+public interface SingleTableRouteEngine {
+    
+    /**
+     * Route.
+     *
+     * @param routeContext route context 
+     * @param singleTableRule single table rule
+     */
+    void route(RouteContext routeContext, SingleTableRule singleTableRule);
+}
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableRouteEngineFactory.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableRouteEngineFactory.java
new file mode 100644
index 00000000000..6b9b6342c76
--- /dev/null
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableRouteEngineFactory.java
@@ -0,0 +1,57 @@
+/*
+ * 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.singletable.route.engine;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.metadata.schema.QualifiedTable;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropSchemaStatement;
+
+import java.util.Collection;
+import java.util.Optional;
+
+/**
+ * Single table route engine factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SingleTableRouteEngineFactory {
+    
+    /**
+     * Create new instance of single table route engine.
+     *
+     * @param singleTableNames single table names
+     * @param sqlStatement sql statement
+     * @return new instance of single table route engine
+     */
+    public static Optional<SingleTableRouteEngine> newInstance(final Collection<QualifiedTable> singleTableNames, final SQLStatement sqlStatement) {
+        // TODO Consider to add route logic for more statements
+        if (!singleTableNames.isEmpty()) {
+            return Optional.of(new SingleTableStandardRouteEngine(singleTableNames, sqlStatement));
+        } else if (isSchemaDDLStatement(sqlStatement)) {
+            return Optional.of(new SingleTableDatabaseBroadcastRouteEngine());
+        }
+        return Optional.empty();
+    }
+    
+    private static boolean isSchemaDDLStatement(final SQLStatement sqlStatement) {
+        return sqlStatement instanceof CreateSchemaStatement || sqlStatement instanceof AlterSchemaStatement || sqlStatement instanceof DropSchemaStatement;
+    }
+}
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableRouteEngine.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableStandardRouteEngine.java
similarity index 93%
rename from shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableRouteEngine.java
rename to shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableStandardRouteEngine.java
index c9f2d77f1aa..c3afbc5cdfb 100644
--- a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableRouteEngine.java
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/engine/SingleTableStandardRouteEngine.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.singletable.route;
+package org.apache.shardingsphere.singletable.route.engine;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.datanode.DataNode;
@@ -42,10 +42,10 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
- * Single table route engine.
+ * Single table standard route engine.
  */
 @RequiredArgsConstructor
-public final class SingleTableRouteEngine {
+public final class SingleTableStandardRouteEngine implements SingleTableRouteEngine {
     
     private final Collection<QualifiedTable> singleTableNames;
     
@@ -80,7 +80,7 @@ public final class SingleTableRouteEngine {
     }
     
     private void route0(final RouteContext routeContext, final SingleTableRule rule) {
-        if (isDDLTableStatement() || rule.isAllTablesInSameDataSource(routeContext, singleTableNames)) {
+        if (isTableDDLStatement() || rule.isAllTablesInSameDataSource(routeContext, singleTableNames)) {
             Collection<QualifiedTable> existSingleTables = rule.getSingleTableNames(singleTableNames);
             if (!existSingleTables.isEmpty()) {
                 fillRouteContext(rule, routeContext, existSingleTables);
@@ -89,12 +89,12 @@ public final class SingleTableRouteEngine {
                 routeContext.getRouteUnits().add(routeUnit);
             }
         } else {
-            decorateRouteContextForFederate(routeContext);
+            decorateFederationRouteContext(routeContext);
             fillRouteContext(rule, routeContext, singleTableNames);
         }
     }
     
-    private void decorateRouteContextForFederate(final RouteContext routeContext) {
+    private void decorateFederationRouteContext(final RouteContext routeContext) {
         RouteContext newRouteContext = new RouteContext();
         for (RouteUnit each : routeContext.getRouteUnits()) {
             newRouteContext.putRouteUnit(each.getDataSourceMapper(), each.getTableMappers());
@@ -106,7 +106,7 @@ public final class SingleTableRouteEngine {
         routeContext.getOriginalDataNodes().addAll(newRouteContext.getOriginalDataNodes());
     }
     
-    private boolean isDDLTableStatement() {
+    private boolean isTableDDLStatement() {
         return sqlStatement instanceof CreateTableStatement || sqlStatement instanceof AlterTableStatement || sqlStatement instanceof DropTableStatement;
     }
     
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/route/SingleTableRouteEngineTest.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/route/engine/SingleTableStandardRouteEngineTest.java
similarity index 92%
rename from shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/route/SingleTableRouteEngineTest.java
rename to shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/route/engine/SingleTableStandardRouteEngineTest.java
index 8a922004916..4845f454400 100644
--- a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/route/SingleTableRouteEngineTest.java
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/route/engine/SingleTableStandardRouteEngineTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.singletable.route;
+package org.apache.shardingsphere.singletable.route.engine;
 
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.DefaultSchema;
@@ -48,11 +48,11 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
-public final class SingleTableRouteEngineTest {
+public final class SingleTableStandardRouteEngineTest {
     
     @Test
     public void assertRouteInSameDataSource() {
-        SingleTableRouteEngine singleTableRouteEngine = new SingleTableRouteEngine(mockQualifiedTables(), null);
+        SingleTableStandardRouteEngine singleTableRouteEngine = new SingleTableStandardRouteEngine(mockQualifiedTables(), null);
         SingleTableRule singleTableRule = new SingleTableRule(new SingleTableRuleConfiguration(), DefaultSchema.LOGIC_NAME, mock(DatabaseType.class),
                 createDataSourceMap(), Collections.emptyList(), new ConfigurationProperties(new Properties()));
         singleTableRule.getSingleTableDataNodes().put("t_order", Collections.singletonList(mockDataNode("ds_0", "t_order")));
@@ -85,7 +85,7 @@ public final class SingleTableRouteEngineTest {
     
     @Test
     public void assertRouteInDifferentDataSource() {
-        SingleTableRouteEngine singleTableRouteEngine = new SingleTableRouteEngine(mockQualifiedTables(), null);
+        SingleTableStandardRouteEngine singleTableRouteEngine = new SingleTableStandardRouteEngine(mockQualifiedTables(), null);
         SingleTableRule singleTableRule = new SingleTableRule(new SingleTableRuleConfiguration(), DefaultSchema.LOGIC_NAME, mock(DatabaseType.class),
                 createDataSourceMap(), Collections.emptyList(), new ConfigurationProperties(new Properties()));
         singleTableRule.getSingleTableDataNodes().put("t_order", Collections.singletonList(mockDataNode("ds_0", "t_order")));
@@ -109,7 +109,7 @@ public final class SingleTableRouteEngineTest {
     
     @Test
     public void assertRouteWithoutSingleTableRule() {
-        SingleTableRouteEngine singleTableRouteEngine = new SingleTableRouteEngine(mockQualifiedTables(), new MySQLCreateTableStatement());
+        SingleTableStandardRouteEngine singleTableRouteEngine = new SingleTableStandardRouteEngine(mockQualifiedTables(), new MySQLCreateTableStatement());
         SingleTableRule singleTableRule = new SingleTableRule(new SingleTableRuleConfiguration(), DefaultSchema.LOGIC_NAME, mock(DatabaseType.class),
                 createDataSourceMap(), Collections.emptyList(), new ConfigurationProperties(new Properties()));
         RouteContext routeContext = new RouteContext();
@@ -125,7 +125,7 @@ public final class SingleTableRouteEngineTest {
     
     @Test
     public void assertRouteWithDefaultSingleTableRule() {
-        SingleTableRouteEngine singleTableRouteEngine = new SingleTableRouteEngine(mockQualifiedTables(), new MySQLCreateTableStatement());
+        SingleTableStandardRouteEngine singleTableRouteEngine = new SingleTableStandardRouteEngine(mockQualifiedTables(), new MySQLCreateTableStatement());
         SingleTableRule singleTableRule = new SingleTableRule(new SingleTableRuleConfiguration("ds_0"), DefaultSchema.LOGIC_NAME, mock(DatabaseType.class),
                 createDataSourceMap(), Collections.emptyList(), new ConfigurationProperties(new Properties()));
         RouteContext routeContext = new RouteContext();