private StatementExecutor generateExecutor(final String sql) throws SQLException { StatementExecutor result = new StatementExecutor(shardingConnection.getShardingContext().getExecutorEngine()); SQLRouteResult sqlRouteResult = shardingConnection .getShardingContext() .getSqlRouteEngine() .route(sql, Collections.emptyList()); mergeContext = sqlRouteResult.getMergeContext(); mergeContext.setExecutorEngine(shardingConnection.getShardingContext().getExecutorEngine()); for (SQLExecutionUnit each : sqlRouteResult.getExecutionUnits()) { result.addStatement( new StatementExecutorWrapper( generateStatement(each.getSql(), each.getDataSource()), each)); } return result; }