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 2021/08/12 02:58:07 UTC

[shardingsphere] branch master updated: Refactor shardingsphere-shadow-core first step (#11743)

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 45eb443  Refactor shardingsphere-shadow-core first step (#11743)
45eb443 is described below

commit 45eb44338e34fa085a9dc4650312dafa40df8331
Author: gin <ja...@163.com>
AuthorDate: Thu Aug 12 10:57:32 2021 +0800

    Refactor shardingsphere-shadow-core first step (#11743)
    
    * Add shadow future function interface function.
    
    * Add shadow future function basic skeleton classes.
    
    * Private no args constructor.
    
    * Refactor engine classes name.
    
    * Refactor the boundary of the shadow route engine interface.
    
    * Refactor shadow route engine method.
    
    * Fix method.
    
    * Fix shadow switch.
---
 .../shadow/route/ShadowSQLRouter.java              | 22 +++++-
 .../route/future/engine/ShadowRouteEngine.java     | 41 +++++++++++
 .../future/engine/ShadowRouteEngineFactory.java    | 80 ++++++++++++++++++++++
 .../impl/ShadowDeleteStatementRoutingEngine.java   | 36 ++++++++++
 .../impl/ShadowInsertStatementRoutingEngine.java   | 36 ++++++++++
 .../impl/ShadowNonMDLStatementRoutingEngine.java   | 36 ++++++++++
 .../impl/ShadowSelectStatementRoutingEngine.java   | 36 ++++++++++
 .../impl/ShadowUpdateStatementRoutingEngine.java   | 36 ++++++++++
 8 files changed, 320 insertions(+), 3 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
index fe44993..b5f156d 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
@@ -26,11 +26,11 @@ 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.shadow.constant.ShadowOrder;
+import org.apache.shardingsphere.shadow.route.future.engine.ShadowRouteEngineFactory;
 import org.apache.shardingsphere.shadow.route.judge.ShadowDataSourceJudgeEngine;
 import org.apache.shardingsphere.shadow.route.judge.impl.PreparedShadowDataSourceJudgeEngine;
 import org.apache.shardingsphere.shadow.route.judge.impl.SimpleShadowDataSourceJudgeEngine;
 import org.apache.shardingsphere.shadow.rule.ShadowRule;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
 
 import java.util.Collection;
@@ -46,8 +46,7 @@ public final class ShadowSQLRouter implements SQLRouter<ShadowRule> {
     
     @Override
     public RouteContext createRouteContext(final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule rule, final ConfigurationProperties props) {
-        SQLStatement sqlStatement = logicSQL.getSqlStatementContext().getSqlStatement();
-        return sqlStatement instanceof DMLStatement ? createRouteContextInDML(logicSQL, rule) : createRouteContextWithoutDML(rule);
+        return logicSQL.getSqlStatementContext().getSqlStatement() instanceof DMLStatement ? createRouteContextInDML(logicSQL, rule) : createRouteContextWithoutDML(rule);
     }
     
     private RouteContext createRouteContextWithoutDML(final ShadowRule rule) {
@@ -85,6 +84,14 @@ public final class ShadowSQLRouter implements SQLRouter<ShadowRule> {
     @Override
     public void decorateRouteContext(final RouteContext routeContext,
                                      final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule rule, final ConfigurationProperties props) {
+        if (isShadowEnable()) {
+            doShadowDecorateFuture(routeContext, logicSQL, metaData, rule, props);
+        } else {
+            doShadowDecorate(routeContext, logicSQL, rule);
+        }
+    }
+    
+    private void doShadowDecorate(final RouteContext routeContext, final LogicSQL logicSQL, final ShadowRule rule) {
         Collection<RouteUnit> toBeAdded = new LinkedList<>();
         if (!(logicSQL.getSqlStatementContext().getSqlStatement() instanceof DMLStatement)) {
             for (RouteUnit each : routeContext.getRouteUnits()) {
@@ -106,6 +113,15 @@ public final class ShadowSQLRouter implements SQLRouter<ShadowRule> {
         routeContext.getRouteUnits().addAll(toBeAdded);
     }
     
+    private void doShadowDecorateFuture(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule rule, final ConfigurationProperties props) {
+        ShadowRouteEngineFactory.newInstance(logicSQL).route(routeContext, logicSQL, metaData, rule, props);
+    }
+    
+    // fixme the shadow switch reconstruction is complete
+    private boolean isShadowEnable() {
+        return false;
+    }
+    
     @Override
     public int getOrder() {
         return ShadowOrder.ORDER;
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/ShadowRouteEngine.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/ShadowRouteEngine.java
new file mode 100644
index 0000000..4a7e916
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/ShadowRouteEngine.java
@@ -0,0 +1,41 @@
+/*
+ * 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.shadow.route.future.engine;
+
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+
+/**
+ * Shadow route engine.
+ */
+public interface ShadowRouteEngine {
+    
+    /**
+     * Route.
+     *
+     * @param routeContext route context
+     * @param logicSQL logic SQL
+     * @param metaData shardingSphere meta data
+     * @param shadowRule shadow rule
+     * @param props configuration properties
+     */
+    void route(RouteContext routeContext, LogicSQL logicSQL, ShardingSphereMetaData metaData, ShadowRule shadowRule, ConfigurationProperties props);
+}
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/ShadowRouteEngineFactory.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/ShadowRouteEngineFactory.java
new file mode 100644
index 0000000..6ce0bb0
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/ShadowRouteEngineFactory.java
@@ -0,0 +1,80 @@
+/*
+ * 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.shadow.route.future.engine;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.shadow.route.future.engine.impl.ShadowDeleteStatementRoutingEngine;
+import org.apache.shardingsphere.shadow.route.future.engine.impl.ShadowInsertStatementRoutingEngine;
+import org.apache.shardingsphere.shadow.route.future.engine.impl.ShadowNonMDLStatementRoutingEngine;
+import org.apache.shardingsphere.shadow.route.future.engine.impl.ShadowSelectStatementRoutingEngine;
+import org.apache.shardingsphere.shadow.route.future.engine.impl.ShadowUpdateStatementRoutingEngine;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DeleteStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement;
+
+/**
+ * Shadow routing engine factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShadowRouteEngineFactory {
+    
+    /**
+     * Create new instance of shadow route engine.
+     *
+     * @param logicSQL logic SQL
+     * @return new instance of shadow route engine.
+     */
+    public static ShadowRouteEngine newInstance(final LogicSQL logicSQL) {
+        SQLStatement sqlStatement = logicSQL.getSqlStatementContext().getSqlStatement();
+        if (sqlStatement instanceof InsertStatement) {
+            return createShadowInsertStatementRoutingEngine();
+        } else if (sqlStatement instanceof DeleteStatement) {
+            return createShadowDeleteStatementRoutingEngine();
+        } else if (sqlStatement instanceof UpdateStatement) {
+            return createShadowUpdateStatementRoutingEngine();
+        } else if (sqlStatement instanceof SelectStatement) {
+            return createShadowSelectStatementRoutingEngine();
+        } else {
+            return createShadowNonMDLStatementRoutingEngine();
+        }
+    }
+    
+    private static ShadowRouteEngine createShadowNonMDLStatementRoutingEngine() {
+        return new ShadowNonMDLStatementRoutingEngine();
+    }
+    
+    private static ShadowRouteEngine createShadowSelectStatementRoutingEngine() {
+        return new ShadowSelectStatementRoutingEngine();
+    }
+    
+    private static ShadowRouteEngine createShadowUpdateStatementRoutingEngine() {
+        return new ShadowUpdateStatementRoutingEngine();
+    }
+    
+    private static ShadowRouteEngine createShadowDeleteStatementRoutingEngine() {
+        return new ShadowDeleteStatementRoutingEngine();
+    }
+    
+    private static ShadowRouteEngine createShadowInsertStatementRoutingEngine() {
+        return new ShadowInsertStatementRoutingEngine();
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowDeleteStatementRoutingEngine.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowDeleteStatementRoutingEngine.java
new file mode 100644
index 0000000..5964a73
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowDeleteStatementRoutingEngine.java
@@ -0,0 +1,36 @@
+/*
+ * 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.shadow.route.future.engine.impl;
+
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.shadow.route.future.engine.ShadowRouteEngine;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+
+/**
+ * Shadow delete statement routing engine.
+ */
+public final class ShadowDeleteStatementRoutingEngine implements ShadowRouteEngine {
+    
+    @Override
+    public void route(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule shadowRule, final ConfigurationProperties props) {
+        // TODO decorate route in delete statement case
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowInsertStatementRoutingEngine.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowInsertStatementRoutingEngine.java
new file mode 100644
index 0000000..96bee8f
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowInsertStatementRoutingEngine.java
@@ -0,0 +1,36 @@
+/*
+ * 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.shadow.route.future.engine.impl;
+
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.shadow.route.future.engine.ShadowRouteEngine;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+
+/**
+ * Shadow insert statement routing engine.
+ */
+public final class ShadowInsertStatementRoutingEngine implements ShadowRouteEngine {
+    
+    @Override
+    public void route(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule shadowRule, final ConfigurationProperties props) {
+        // TODO decorate route in insert statement case
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowNonMDLStatementRoutingEngine.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowNonMDLStatementRoutingEngine.java
new file mode 100644
index 0000000..4c8d392
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowNonMDLStatementRoutingEngine.java
@@ -0,0 +1,36 @@
+/*
+ * 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.shadow.route.future.engine.impl;
+
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.shadow.route.future.engine.ShadowRouteEngine;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+
+/**
+ * Shadow non-MDL statement routing engine.
+ */
+public final class ShadowNonMDLStatementRoutingEngine implements ShadowRouteEngine {
+    
+    @Override
+    public void route(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule shadowRule, final ConfigurationProperties props) {
+        // TODO decorate route in non-MDL statement case
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowSelectStatementRoutingEngine.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowSelectStatementRoutingEngine.java
new file mode 100644
index 0000000..23d22f4
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowSelectStatementRoutingEngine.java
@@ -0,0 +1,36 @@
+/*
+ * 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.shadow.route.future.engine.impl;
+
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.shadow.route.future.engine.ShadowRouteEngine;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+
+/**
+ * Shadow select statement routing engine.
+ */
+public final class ShadowSelectStatementRoutingEngine implements ShadowRouteEngine {
+    
+    @Override
+    public void route(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule shadowRule, final ConfigurationProperties props) {
+        // TODO decorate route in select statement case
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowUpdateStatementRoutingEngine.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowUpdateStatementRoutingEngine.java
new file mode 100644
index 0000000..9c01f4c
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/route/future/engine/impl/ShadowUpdateStatementRoutingEngine.java
@@ -0,0 +1,36 @@
+/*
+ * 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.shadow.route.future.engine.impl;
+
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.shadow.route.future.engine.ShadowRouteEngine;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+
+/**
+ * Shadow update statement routing engine.
+ */
+public final class ShadowUpdateStatementRoutingEngine implements ShadowRouteEngine {
+    
+    @Override
+    public void route(final RouteContext routeContext, final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ShadowRule shadowRule, final ConfigurationProperties props) {
+        // TODO decorate route in update statement case
+    }
+}