提交 a58b6afd 编写于 作者: T terrymanu

for #2441, refactor ShardingRouter.route(), remove useless param: logicSQL

上级 ce7e1f18
......@@ -63,6 +63,6 @@ public final class PreparedStatementRoutingEngine {
if (null == sqlStatement) {
sqlStatement = shardingRouter.parse(logicSQL, true);
}
return masterSlaveRouter.route(shardingRouter.route(logicSQL, parameters, sqlStatement));
return masterSlaveRouter.route(shardingRouter.route(sqlStatement, parameters));
}
}
......@@ -54,6 +54,6 @@ public final class StatementRoutingEngine {
*/
public SQLRouteResult route(final String logicSQL) {
SQLStatement sqlStatement = shardingRouter.parse(logicSQL, false);
return masterSlaveRouter.route(shardingRouter.route(logicSQL, Collections.emptyList(), sqlStatement));
return masterSlaveRouter.route(shardingRouter.route(sqlStatement, Collections.emptyList()));
}
}
......@@ -51,7 +51,7 @@ public final class DatabaseHintSQLRouter implements ShardingRouter {
@Override
// TODO insert SQL need parse gen key
public SQLRouteResult route(final String logicSQL, final List<Object> parameters, final SQLStatement sqlStatement) {
public SQLRouteResult route(final SQLStatement sqlStatement, final List<Object> parameters) {
SQLRouteResult result = new SQLRouteResult(sqlStatement);
RoutingResult routingResult = new DatabaseHintRoutingEngine(
shardingRule.getShardingDataSourceNames().getDataSourceNames(), (HintShardingStrategy) shardingRule.getDefaultDatabaseShardingStrategy()).route();
......
......@@ -91,7 +91,7 @@ public final class ParsingSQLRouter implements ShardingRouter {
}
@Override
public SQLRouteResult route(final String logicSQL, final List<Object> parameters, final SQLStatement sqlStatement) {
public SQLRouteResult route(final SQLStatement sqlStatement, final List<Object> parameters) {
Optional<GeneratedKey> generatedKey = sqlStatement instanceof InsertStatement
? GeneratedKey.getGenerateKey(shardingRule, parameters, (InsertStatement) sqlStatement) : Optional.<GeneratedKey>absent();
SQLRouteResult result = new SQLRouteResult(sqlStatement, generatedKey.orNull());
......@@ -109,7 +109,7 @@ public final class ParsingSQLRouter implements ShardingRouter {
}
RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route();
if (sqlStatement instanceof SelectStatement && null != ((SelectStatement) sqlStatement).getLimit() && !routingResult.isSingleRouting()) {
result.setLimit(getProcessedLimit(parameters, (SelectStatement) sqlStatement));
result.setLimit(createLimit((SelectStatement) sqlStatement, parameters));
}
if (needMerge) {
Preconditions.checkState(1 == routingResult.getRoutingUnits().size(), "Must have one sharding with subquery.");
......@@ -189,7 +189,7 @@ public final class ParsingSQLRouter implements ShardingRouter {
}
}
private Limit getProcessedLimit(final List<Object> parameters, final SelectStatement selectStatement) {
private Limit createLimit(final SelectStatement selectStatement, final List<Object> parameters) {
boolean isNeedFetchAll = (!selectStatement.getGroupByItems().isEmpty() || !selectStatement.getAggregationSelectItems().isEmpty()) && !selectStatement.isSameGroupByAndOrderByItems();
Limit result = createLimit(selectStatement.getLimit());
result.processParameters(parameters, isNeedFetchAll, databaseType.name());
......
......@@ -41,10 +41,9 @@ public interface ShardingRouter {
/**
* Route SQL.
*
* @param logicSQL logic SQL
* @param sqlStatement SQL statement
* @param parameters parameters
* @return parse result
*/
SQLRouteResult route(String logicSQL, List<Object> parameters, SQLStatement sqlStatement);
SQLRouteResult route(SQLStatement sqlStatement, List<Object> parameters);
}
......@@ -66,6 +66,8 @@ public final class DatabaseHintSQLRouterTest {
@Test
public void assertRoute() {
hintManager.addDatabaseShardingValue("", 1);
assertNotNull(databaseHintSQLRouter.route("select t from tbl t", Collections.emptyList(), new DQLStatement()));
DQLStatement dqlStatement = new DQLStatement();
dqlStatement.setLogicSQL("select t from tbl t");
assertNotNull(databaseHintSQLRouter.route(dqlStatement, Collections.emptyList()));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册