From 9c0b3fb3de043d44c17e49c5066b59dff6cbaefe Mon Sep 17 00:00:00 2001 From: Liang Zhang Date: Fri, 27 Mar 2020 13:16:24 +0800 Subject: [PATCH] Fix but for database sharding only can not rewrite with encrypt (#4968) --- .../core/shard/BaseShardingEngine.java | 42 ++++++++----------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java b/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java index 32c9c31d66..083c4f7658 100644 --- a/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java +++ b/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.core.shard; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.api.hint.HintManager; import org.apache.shardingsphere.core.rule.MasterSlaveRule; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.core.shard.log.ShardingSQLLogger; @@ -89,7 +88,7 @@ public abstract class BaseShardingEngine { List clonedParameters = cloneParameters(parameters); RouteContext routeContext = executeRoute(sql, clonedParameters); ExecutionContext result = new ExecutionContext(routeContext.getSqlStatementContext()); - result.getExecutionUnits().addAll(HintManager.isDatabaseShardingOnly() ? convert(sql, clonedParameters, routeContext) : rewriteAndConvert(sql, clonedParameters, routeContext)); + result.getExecutionUnits().addAll(executeRewrite(sql, clonedParameters, routeContext)); if (properties.getValue(ConfigurationPropertyKey.SQL_SHOW)) { ShardingSQLLogger.logSQL(sql, properties.getValue(ConfigurationPropertyKey.SQL_SIMPLE), result.getSqlStatementContext(), result.getExecutionUnits()); } @@ -125,31 +124,10 @@ public abstract class BaseShardingEngine { protected abstract RouteContext route(DataNodeRouter dataNodeRouter, String sql, List parameters); - private Collection convert(final String sql, final List parameters, final RouteContext routeContext) { - Collection result = new LinkedHashSet<>(); - if (routeContext.getRouteResult().getRouteUnits().isEmpty()) { - String dataSourceName = metaData.getDataSources().getAllInstanceDataSourceNames().iterator().next(); - return Collections.singletonList(new ExecutionUnit(dataSourceName, new SQLUnit(sql, parameters))); - } - for (RouteUnit each : routeContext.getRouteResult().getRouteUnits()) { - result.add(new ExecutionUnit(each.getDataSourceMapper().getActualName(), new SQLUnit(sql, parameters))); - } - return result; - } - - private Collection rewriteAndConvert(final String sql, final List parameters, final RouteContext routeContext) { + private Collection executeRewrite(final String sql, final List parameters, final RouteContext routeContext) { registerRewriteDecorator(); SQLRewriteContext sqlRewriteContext = sqlRewriteEntry.createSQLRewriteContext(sql, parameters, routeContext.getSqlStatementContext(), routeContext); - if (routeContext.getRouteResult().getRouteUnits().isEmpty()) { - SQLRewriteResult sqlRewriteResult = new SQLRewriteEngine().rewrite(sqlRewriteContext); - String dataSourceName = metaData.getDataSources().getAllInstanceDataSourceNames().iterator().next(); - return Collections.singletonList(new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters()))); - } - Collection result = new LinkedHashSet<>(); - for (Entry entry : new SQLRouteRewriteEngine().rewrite(sqlRewriteContext, routeContext.getRouteResult()).entrySet()) { - result.add(new ExecutionUnit(entry.getKey().getDataSourceMapper().getActualName(), new SQLUnit(entry.getValue().getSql(), entry.getValue().getParameters()))); - } - return result; + return routeContext.getRouteResult().getRouteUnits().isEmpty() ? rewrite(sqlRewriteContext) : rewrite(routeContext, sqlRewriteContext); } private void registerRewriteDecorator() { @@ -161,4 +139,18 @@ public abstract class BaseShardingEngine { } } } + + private Collection rewrite(final SQLRewriteContext sqlRewriteContext) { + SQLRewriteResult sqlRewriteResult = new SQLRewriteEngine().rewrite(sqlRewriteContext); + String dataSourceName = metaData.getDataSources().getAllInstanceDataSourceNames().iterator().next(); + return Collections.singletonList(new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters()))); + } + + private Collection rewrite(final RouteContext routeContext, final SQLRewriteContext sqlRewriteContext) { + Collection result = new LinkedHashSet<>(); + for (Entry entry : new SQLRouteRewriteEngine().rewrite(sqlRewriteContext, routeContext.getRouteResult()).entrySet()) { + result.add(new ExecutionUnit(entry.getKey().getDataSourceMapper().getActualName(), new SQLUnit(entry.getValue().getSql(), entry.getValue().getParameters()))); + } + return result; + } } -- GitLab