提交 1f2e8199 编写于 作者: T terrymanu

for #768, remove getConnectionsForDDL

上级 f1512282
......@@ -21,7 +21,6 @@ import com.google.common.base.Preconditions;
import io.shardingjdbc.core.hint.HintManagerHolder;
import io.shardingjdbc.core.jdbc.adapter.AbstractConnectionAdapter;
import io.shardingjdbc.core.jdbc.core.ShardingContext;
import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource;
import io.shardingjdbc.core.jdbc.core.statement.ShardingPreparedStatement;
import io.shardingjdbc.core.jdbc.core.statement.ShardingStatement;
import io.shardingjdbc.core.routing.router.masterslave.MasterVisitedManager;
......@@ -34,11 +33,6 @@ import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
/**
* Connection that support sharding.
......@@ -52,37 +46,6 @@ public final class ShardingConnection extends AbstractConnectionAdapter {
@Getter
private final ShardingContext shardingContext;
/**
* Get database connections via data source name for DDL.
*
* <p>Non-Master-slave connection will return actual connection</p>
* <p>Master-slave connection will return actual master connections</p>
*
* @param dataSourceName data source name
* @return all database connections via data source name for DDL
* @throws SQLException SQL exception
*/
// TODO Return value is Connection because will support multiple master datasources in future.
public Collection<Connection> getConnectionsForDDL(final String dataSourceName) throws SQLException {
DataSource dataSource = shardingContext.getDataSourceMap().get(dataSourceName);
Preconditions.checkState(null != dataSource, "Missing the rule of %s in DataSourceRule", dataSourceName);
Map<String, DataSource> dataSources;
if (dataSource instanceof MasterSlaveDataSource) {
dataSources = ((MasterSlaveDataSource) dataSource).getMasterDataSource();
} else {
dataSources = new HashMap<>(1, 1);
dataSources.put(dataSourceName, dataSource);
}
Collection<Connection> result = new LinkedList<>();
for (Entry<String, DataSource> entry : dataSources.entrySet()) {
Connection connection = getCachedConnections().containsKey(entry.getKey()) ? getCachedConnections().get(entry.getKey()) : entry.getValue().getConnection();
replayMethodsInvocation(connection);
getCachedConnections().put(entry.getKey(), connection);
result.add(connection);
}
return result;
}
/**
* Get database connection via data source name.
*
......
......@@ -20,7 +20,6 @@ package io.shardingjdbc.core.jdbc.core.statement;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;
import io.shardingjdbc.core.constant.SQLType;
import io.shardingjdbc.core.executor.type.batch.BatchPreparedStatementExecutor;
import io.shardingjdbc.core.executor.type.batch.BatchPreparedStatementUnit;
import io.shardingjdbc.core.executor.type.prepared.PreparedStatementExecutor;
......@@ -52,7 +51,6 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
......@@ -164,27 +162,10 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
Collection<PreparedStatementUnit> result = new LinkedList<>();
routeResult = routingEngine.route(getParameters());
for (SQLExecutionUnit each : routeResult.getExecutionUnits()) {
SQLType sqlType = routeResult.getSqlStatement().getType();
Collection<PreparedStatement> preparedStatements;
if (SQLType.DDL == sqlType) {
preparedStatements = generatePreparedStatementForDDL(each);
} else {
preparedStatements = Collections.singletonList(generatePreparedStatement(each));
}
routedStatements.addAll(preparedStatements);
for (PreparedStatement preparedStatement : preparedStatements) {
replaySetParameter(preparedStatement, each.getSqlUnit().getParameterSets().get(0));
result.add(new PreparedStatementUnit(each, preparedStatement));
}
}
return result;
}
private Collection<PreparedStatement> generatePreparedStatementForDDL(final SQLExecutionUnit sqlExecutionUnit) throws SQLException {
Collection<PreparedStatement> result = new LinkedList<>();
Collection<Connection> connections = getConnection().getConnectionsForDDL(sqlExecutionUnit.getDataSource());
for (Connection each : connections) {
result.add(each.prepareStatement(sqlExecutionUnit.getSqlUnit().getSql(), resultSetType, resultSetConcurrency, resultSetHoldability));
PreparedStatement preparedStatement = generatePreparedStatement(each);
routedStatements.add(preparedStatement);
replaySetParameter(preparedStatement, each.getSqlUnit().getParameterSets().get(0));
result.add(new PreparedStatementUnit(each, preparedStatement));
}
return result;
}
......
......@@ -18,7 +18,6 @@
package io.shardingjdbc.core.jdbc.core.statement;
import com.google.common.base.Optional;
import io.shardingjdbc.core.constant.SQLType;
import io.shardingjdbc.core.executor.type.statement.StatementExecutor;
import io.shardingjdbc.core.executor.type.statement.StatementUnit;
import io.shardingjdbc.core.jdbc.adapter.AbstractStatementAdapter;
......@@ -34,20 +33,18 @@ import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.routing.router.GeneratedKey;
import io.shardingjdbc.core.routing.SQLExecutionUnit;
import io.shardingjdbc.core.routing.SQLRouteResult;
import io.shardingjdbc.core.routing.StatementRoutingEngine;
import io.shardingjdbc.core.routing.router.GeneratedKey;
import lombok.AccessLevel;
import lombok.Getter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
......@@ -202,19 +199,10 @@ public class ShardingStatement extends AbstractStatementAdapter {
routeResult = new StatementRoutingEngine(shardingContext.getShardingRule(), shardingContext.getShardingMetaData(), shardingContext.getDatabaseType(), shardingContext.isShowSQL()).route(sql);
Collection<StatementUnit> statementUnits = new LinkedList<>();
for (SQLExecutionUnit each : routeResult.getExecutionUnits()) {
Collection<Connection> connections;
SQLType sqlType = routeResult.getSqlStatement().getType();
if (SQLType.DDL == sqlType) {
connections = connection.getConnectionsForDDL(each.getDataSource());
} else {
connections = Collections.singletonList(connection.getConnection(each.getDataSource()));
}
for (Connection connection : connections) {
Statement statement = connection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);
replayMethodsInvocation(statement);
statementUnits.add(new StatementUnit(each, statement));
routedStatements.add(statement);
}
Statement statement = connection.getConnection(each.getDataSource()).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);
replayMethodsInvocation(statement);
statementUnits.add(new StatementUnit(each, statement));
routedStatements.add(statement);
}
return new StatementExecutor(connection.getShardingContext().getExecutorEngine(), routeResult.getSqlStatement().getType(), statementUnits);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册