diff --git a/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/BaseShardingEngine.java b/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/BaseShardingEngine.java index adfc4e27d90b83cb01f0f4b68606859acc0e234d..64a5f4b757f8ccd68a958ac1d6a57f0adbe35588 100644 --- a/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/BaseShardingEngine.java +++ b/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/BaseShardingEngine.java @@ -24,6 +24,7 @@ import org.apache.shardingsphere.core.constant.properties.ShardingProperties; import org.apache.shardingsphere.core.constant.properties.ShardingPropertiesConstant; import org.apache.shardingsphere.core.metadata.ShardingMetaData; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ShardingParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.ShardingSQLRewriter; @@ -35,7 +36,9 @@ import org.apache.shardingsphere.core.route.hook.SPIRoutingHook; import org.apache.shardingsphere.core.route.type.RoutingUnit; import org.apache.shardingsphere.core.rule.ShardingRule; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; @@ -107,7 +110,7 @@ public abstract class BaseShardingEngine { ShardingParameterRewriter shardingParameterRewriter = new ShardingParameterRewriter(databaseType, sqlRouteResult); ShardingSQLRewriter shardingSQLRewriter = new ShardingSQLRewriter(shardingRule, databaseType, sqlRouteResult, sqlRouteResult.getOptimizeResult()); EncryptSQLRewriter encryptSQLRewriter = new EncryptSQLRewriter(shardingRule.getEncryptRule().getEncryptorEngine(), sqlRouteResult.getSqlStatement(), sqlRouteResult.getOptimizeResult()); - rewriteEngine.init(shardingParameterRewriter, shardingSQLRewriter, encryptSQLRewriter); + rewriteEngine.init(Collections.singletonList(shardingParameterRewriter), Arrays.asList(shardingSQLRewriter, encryptSQLRewriter)); Collection result = new LinkedHashSet<>(); for (RoutingUnit each : sqlRouteResult.getRoutingResult().getRoutingUnits()) { result.add(new RouteUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each))); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/SQLRewriteEngine.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/SQLRewriteEngine.java index 9eaf6418976b6c1e30c998f41f5f89ac9013bbb5..7a2c3548b9f3045c194e8002168643a11b8e3c60 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/SQLRewriteEngine.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/SQLRewriteEngine.java @@ -37,6 +37,7 @@ import org.apache.shardingsphere.core.rule.BindingTableRule; import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.rule.ShardingRule; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; @@ -109,12 +110,12 @@ public final class SQLRewriteEngine { /** * Initialize SQL rewrite engine. * - * @param parameterRewriter parameter rewriter + * @param parameterRewriters parameter rewriters * @param sqlRewriters SQL rewriters */ - public void init(final ParameterRewriter parameterRewriter, final SQLRewriter... sqlRewriters) { - if (null != parameterRewriter) { - parameterRewriter.rewrite(parameterBuilder); + public void init(final Collection parameterRewriters, final Collection sqlRewriters) { + for (ParameterRewriter each : parameterRewriters) { + each.rewrite(parameterBuilder); } if (sqlTokens.isEmpty()) { baseSQLRewriter.appendWholeSQL(sqlBuilder); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java index 3aa16f849d2c01baa6962ee8faef9360c5833046..1451e39a488578193d16f7ebba89f3d91c44723c 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/rewriter/parameter/ShardingParameterRewriter.java @@ -23,8 +23,6 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.rewrite.builder.ParameterBuilder; import org.apache.shardingsphere.core.route.SQLRouteResult; -import java.util.Map; - /** * Parameter rewriter for sharding. * @@ -39,14 +37,13 @@ public final class ShardingParameterRewriter implements ParameterRewriter { @Override public void rewrite(final ParameterBuilder parameterBuilder) { - if (sqlRouteResult.getSqlStatement() instanceof SelectStatement) { - SelectStatement selectStatement = (SelectStatement) sqlRouteResult.getSqlStatement(); - if (null == selectStatement.getLimit()) { - return; - } - boolean isNeedFetchAll = (!selectStatement.getGroupByItems().isEmpty() || !selectStatement.getAggregationSelectItems().isEmpty()) && !selectStatement.isSameGroupByAndOrderByItems(); - Map revisedIndexAndParameters = sqlRouteResult.getLimit().getRevisedIndexAndParameters(isNeedFetchAll, databaseType.name()); - parameterBuilder.getReplacedIndexAndParameters().putAll(revisedIndexAndParameters); + if (sqlRouteResult.getSqlStatement() instanceof SelectStatement && null != sqlRouteResult.getLimit()) { + rewriteLimit((SelectStatement) sqlRouteResult.getSqlStatement(), parameterBuilder); } } + + private void rewriteLimit(final SelectStatement selectStatement, final ParameterBuilder parameterBuilder) { + boolean isNeedFetchAll = (!selectStatement.getGroupByItems().isEmpty() || !selectStatement.getAggregationSelectItems().isEmpty()) && !selectStatement.isSameGroupByAndOrderByItems(); + parameterBuilder.getReplacedIndexAndParameters().putAll(sqlRouteResult.getLimit().getRevisedIndexAndParameters(isNeedFetchAll, databaseType.name())); + } } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java index b5b6ff83ff111118f76d856d67e8deb91c7ea87a..22c56d2fed4ba520bbe600138dc02a503f7741f7 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/EncryptSQLRewriterTest.java @@ -28,7 +28,9 @@ import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.entry.EncryptSQLParseEntry; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; +import org.apache.shardingsphere.core.rewrite.rewriter.sql.SQLRewriter; import org.apache.shardingsphere.core.route.SQLUnit; import org.apache.shardingsphere.core.rule.EncryptRule; import org.junit.Before; @@ -186,7 +188,8 @@ public final class EncryptSQLRewriterTest { SQLStatement sqlStatement = encryptSQLParseEngine.parse(sql, false); SQLRewriteEngine sqlRewriteEngine = new SQLRewriteEngine(encryptRule, sqlStatement, parameters); OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(encryptRule, sqlStatement, parameters).optimize(); - sqlRewriteEngine.init(null, new EncryptSQLRewriter(encryptRule.getEncryptorEngine(), sqlStatement, optimizeResult)); + sqlRewriteEngine.init( + Collections.emptyList(), Collections.singletonList(new EncryptSQLRewriter(encryptRule.getEncryptorEngine(), sqlStatement, optimizeResult))); return sqlRewriteEngine.generateSQL(); } } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java index 5537908f258aaf595bba0b2606b36736ec617de5..15faedb3f5d0182db292f0585a6a8a31510a9840 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java @@ -53,6 +53,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.UpdateStatement; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; import org.apache.shardingsphere.core.rewrite.builder.ParameterBuilder; import org.apache.shardingsphere.core.rewrite.builder.SQLBuilder; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ShardingParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.ShardingSQLRewriter; @@ -542,9 +543,9 @@ public final class ShardingSQLRewriterTest { routeResult.setRoutingResult(new RoutingResult()); selectStatement.setLogicSQL("SELECT table_x.id, x.name FROM table_x x, table_y y WHERE table_x.id=? AND x.name=?"); SQLRewriteEngine rewriteEngine = new SQLRewriteEngine(shardingRule, routeResult.getSqlStatement(), parameters, routeResult.getRoutingResult().isSingleRouting()); - rewriteEngine.init(new ShardingParameterRewriter(DatabaseType.MySQL, routeResult), - new ShardingSQLRewriter(shardingRule, DatabaseType.MySQL, routeResult, null), - new EncryptSQLRewriter(shardingRule.getEncryptRule().getEncryptorEngine(), routeResult.getSqlStatement(), routeResult.getOptimizeResult())); + rewriteEngine.init(Collections.singletonList(new ShardingParameterRewriter(DatabaseType.MySQL, routeResult)), + Arrays.asList(new ShardingSQLRewriter(shardingRule, DatabaseType.MySQL, routeResult, null), + new EncryptSQLRewriter(shardingRule.getEncryptRule().getEncryptorEngine(), routeResult.getSqlStatement(), routeResult.getOptimizeResult()))); RoutingUnit routingUnit = new RoutingUnit("db0"); routingUnit.getTableUnits().add(new TableUnit("table_x", "table_x")); assertThat(rewriteEngine.generateSQL(routingUnit).getSql(), is("SELECT table_x.id, x.name FROM table_x x, table_y y WHERE table_x.id=? AND x.name=?")); @@ -905,9 +906,9 @@ public final class ShardingSQLRewriterTest { private SQLRewriteEngine createSQLRewriteEngine(final DatabaseType databaseType, final List parameters) { SQLRewriteEngine result = new SQLRewriteEngine(shardingRule, routeResult.getSqlStatement(), parameters, routeResult.getRoutingResult().isSingleRouting()); - result.init(new ShardingParameterRewriter(DatabaseType.MySQL, routeResult), - new ShardingSQLRewriter(shardingRule, databaseType, routeResult, routeResult.getOptimizeResult()), - new EncryptSQLRewriter(shardingRule.getEncryptRule().getEncryptorEngine(), routeResult.getSqlStatement(), routeResult.getOptimizeResult())); + result.init(Collections.singletonList(new ShardingParameterRewriter(DatabaseType.MySQL, routeResult)), + Arrays.asList(new ShardingSQLRewriter(shardingRule, databaseType, routeResult, routeResult.getOptimizeResult()), + new EncryptSQLRewriter(shardingRule.getEncryptRule().getEncryptorEngine(), routeResult.getSqlStatement(), routeResult.getOptimizeResult()))); return result; } } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java index 7177b7329586d5c27bd79ec40e63dbbfb95b4278..b6c4ac14aa8c275c135f45a1e0ec11bb57e5dec9 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java @@ -67,10 +67,6 @@ public final class Limit { * @param parameters SQL parameters */ public void fillParameters(final List parameters) { - fill(parameters); - } - - private void fill(final List parameters) { int offset = 0; if (null != this.offset) { offset = -1 == this.offset.getIndex() ? getOffsetValue() : NumberUtil.roundHalfUp(parameters.get(this.offset.getIndex())); diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptPreparedStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptPreparedStatement.java index 395ef32bd306d449ef29a8edadd6d9931b031451..ee275261e5cdf11b466a766989336008416d9eba 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptPreparedStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptPreparedStatement.java @@ -23,7 +23,9 @@ import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; +import org.apache.shardingsphere.core.rewrite.rewriter.sql.SQLRewriter; import org.apache.shardingsphere.core.route.SQLUnit; import org.apache.shardingsphere.shardingjdbc.jdbc.adapter.AbstractShardingPreparedStatementAdapter; import org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.EncryptConnection; @@ -35,6 +37,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; +import java.util.Collections; import java.util.LinkedList; /** @@ -149,7 +152,8 @@ public final class EncryptPreparedStatement extends AbstractShardingPreparedStat SQLStatement sqlStatement = connection.getParseEngine().parse(sql, true); SQLRewriteEngine encryptSQLRewriteEngine = new SQLRewriteEngine(connection.getEncryptRule(), sqlStatement, getParameters()); OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(connection.getEncryptRule(), sqlStatement, getParameters()).optimize(); - encryptSQLRewriteEngine.init(null, new EncryptSQLRewriter(connection.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult)); + encryptSQLRewriteEngine.init(Collections.emptyList(), + Collections.singletonList(new EncryptSQLRewriter(connection.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult))); return encryptSQLRewriteEngine.generateSQL(); } diff --git a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptStatement.java b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptStatement.java index 7b40d4041563fbfc0ce6e2602d1a0720f0885c76..9192ae61d6b20ea93fbe1ba9772c8800f01d3dc0 100644 --- a/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptStatement.java +++ b/sharding-jdbc/sharding-jdbc-core/src/main/java/org/apache/shardingsphere/shardingjdbc/jdbc/core/statement/EncryptStatement.java @@ -22,7 +22,9 @@ import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; +import org.apache.shardingsphere.core.rewrite.rewriter.sql.SQLRewriter; import org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.EncryptConnection; import org.apache.shardingsphere.shardingjdbc.jdbc.core.resultset.EncryptResultSet; import org.apache.shardingsphere.shardingjdbc.jdbc.unsupported.AbstractUnsupportedOperationStatement; @@ -81,7 +83,8 @@ public final class EncryptStatement extends AbstractUnsupportedOperationStatemen SQLStatement sqlStatement = connection.getParseEngine().parse(sql, false); SQLRewriteEngine encryptSQLRewriteEngine = new SQLRewriteEngine(connection.getEncryptRule(), sqlStatement, Collections.emptyList()); OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(connection.getEncryptRule(), sqlStatement, Collections.emptyList()).optimize(); - encryptSQLRewriteEngine.init(null, new EncryptSQLRewriter(connection.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult)); + encryptSQLRewriteEngine.init(Collections.emptyList(), + Collections.singletonList(new EncryptSQLRewriter(connection.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult))); return encryptSQLRewriteEngine.generateSQL().getSql(); } diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/PreparedStatementExecutorWrapper.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/PreparedStatementExecutorWrapper.java index cd5db68c27763404845dffc617d94efbd0a3128d..6497a55c1239e8e60027acc6dc9dce2b29daf8a7 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/PreparedStatementExecutorWrapper.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/PreparedStatementExecutorWrapper.java @@ -25,7 +25,9 @@ import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; +import org.apache.shardingsphere.core.rewrite.rewriter.sql.SQLRewriter; import org.apache.shardingsphere.core.route.RouteUnit; import org.apache.shardingsphere.core.route.SQLRouteResult; import org.apache.shardingsphere.core.route.SQLUnit; @@ -40,6 +42,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; +import java.util.Collections; import java.util.List; /** @@ -77,7 +80,7 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp private SQLRouteResult doMasterSlaveRoute(final String sql) { SQLStatement sqlStatement = ((MasterSlaveSchema) logicSchema).getParseEngine().parse(sql, true); SQLRewriteEngine sqlRewriteEngine = new SQLRewriteEngine(sqlStatement); - sqlRewriteEngine.init(null); + sqlRewriteEngine.init(Collections.emptyList(), Collections.emptyList()); String rewriteSQL = sqlRewriteEngine.generateSQL().getSql(); SQLRouteResult result = new SQLRouteResult(sqlStatement); for (String each : new MasterSlaveRouter(((MasterSlaveSchema) logicSchema).getMasterSlaveRule(), ((MasterSlaveSchema) logicSchema).getParseEngine(), @@ -92,7 +95,8 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp SQLStatement sqlStatement = encryptSchema.getEncryptSQLParseEntry().parse(sql, true); SQLRewriteEngine sqlRewriteEngine = new SQLRewriteEngine(encryptSchema.getEncryptRule(), sqlStatement, parameters); OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(encryptSchema.getEncryptRule(), sqlStatement, parameters).optimize(); - sqlRewriteEngine.init(null, new EncryptSQLRewriter(encryptSchema.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult)); + sqlRewriteEngine.init(Collections.emptyList(), + Collections.singletonList(new EncryptSQLRewriter(encryptSchema.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult))); SQLRouteResult result = new SQLRouteResult(sqlStatement); result.getRouteUnits().add(new RouteUnit(logicSchema.getDataSources().keySet().iterator().next(), new SQLUnit(sqlRewriteEngine.generateSQL().getSql(), parameters))); return result; diff --git a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/StatementExecutorWrapper.java b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/StatementExecutorWrapper.java index 53d9febc688b1b818326be5080f34ff9977c4fc3..8c978dd7eb02f35434c9eaf43c15f88b8bd6f26f 100644 --- a/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/StatementExecutorWrapper.java +++ b/sharding-proxy/sharding-proxy-backend/src/main/java/org/apache/shardingsphere/shardingproxy/backend/communication/jdbc/wrapper/StatementExecutorWrapper.java @@ -25,7 +25,9 @@ import org.apache.shardingsphere.core.optimize.OptimizeEngineFactory; import org.apache.shardingsphere.core.optimize.result.OptimizeResult; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.rewrite.SQLRewriteEngine; +import org.apache.shardingsphere.core.rewrite.rewriter.parameter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.rewriter.sql.EncryptSQLRewriter; +import org.apache.shardingsphere.core.rewrite.rewriter.sql.SQLRewriter; import org.apache.shardingsphere.core.route.RouteUnit; import org.apache.shardingsphere.core.route.SQLRouteResult; import org.apache.shardingsphere.core.route.SQLUnit; @@ -78,7 +80,7 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper { private SQLRouteResult doMasterSlaveRoute(final String sql) { SQLStatement sqlStatement = ((MasterSlaveSchema) logicSchema).getParseEngine().parse(sql, false); SQLRewriteEngine sqlRewriteEngine = new SQLRewriteEngine(sqlStatement); - sqlRewriteEngine.init(null); + sqlRewriteEngine.init(Collections.emptyList(), Collections.emptyList()); String rewriteSQL = sqlRewriteEngine.generateSQL().getSql(); SQLRouteResult result = new SQLRouteResult(sqlStatement); for (String each : new MasterSlaveRouter(((MasterSlaveSchema) logicSchema).getMasterSlaveRule(), ((MasterSlaveSchema) logicSchema).getParseEngine(), @@ -93,7 +95,8 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper { SQLStatement sqlStatement = encryptSchema.getEncryptSQLParseEntry().parse(sql, false); SQLRewriteEngine sqlRewriteEngine = new SQLRewriteEngine(encryptSchema.getEncryptRule(), sqlStatement, Collections.emptyList()); OptimizeResult optimizeResult = OptimizeEngineFactory.newInstance(encryptSchema.getEncryptRule(), sqlStatement, new LinkedList<>()).optimize(); - sqlRewriteEngine.init(null, new EncryptSQLRewriter(encryptSchema.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult)); + sqlRewriteEngine.init(Collections.emptyList(), + Collections.singletonList(new EncryptSQLRewriter(encryptSchema.getEncryptRule().getEncryptorEngine(), sqlStatement, optimizeResult))); SQLRouteResult result = new SQLRouteResult(sqlStatement); result.getRouteUnits().add(new RouteUnit(logicSchema.getDataSources().keySet().iterator().next(), new SQLUnit(sqlRewriteEngine.generateSQL().getSql(), Collections.emptyList()))); return result;