Loading sharding-core/src/main/java/io/shardingsphere/core/routing/router/masterslave/MasterSlaveRouter.java +14 −4 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package io.shardingsphere.core.routing.router.masterslave; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.hint.HintManagerHolder; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.rule.MasterSlaveRule; import lombok.RequiredArgsConstructor; Loading @@ -36,22 +37,31 @@ public final class MasterSlaveRouter { private final MasterSlaveRule masterSlaveRule; /** * Route Master slave. * * @param sql SQL * @return data source names */ public Collection<String> route(final String sql) { return route(new SQLJudgeEngine(sql).judge().getType()); } /** * Route Master slave. * * @param sqlType SQL type * @return data source name * @return data source names */ // TODO for multiple masters may return more than one data source public Collection<String> route(final SQLType sqlType) { if (isMasterRoute(sqlType)) { MasterVisitedManager.setMasterVisited(); return Collections.singletonList(masterSlaveRule.getMasterDataSourceName()); } else { } return Collections.singletonList(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames()))); } } private boolean isMasterRoute(final SQLType sqlType) { return SQLType.DQL != sqlType || MasterVisitedManager.isMasterVisited() || HintManagerHolder.isMasterRouteOnly(); Loading sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/statement/MasterSlavePreparedStatement.java +4 −10 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ package io.shardingsphere.core.jdbc.core.statement; import com.google.common.base.Preconditions; import io.shardingsphere.core.jdbc.adapter.AbstractMasterSlavePreparedStatementAdapter; import io.shardingsphere.core.jdbc.core.connection.MasterSlaveConnection; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import lombok.Getter; Loading Loading @@ -57,8 +55,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa final MasterSlaveConnection connection, final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(preparedStatement); } Loading @@ -67,8 +64,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final int autoGeneratedKeys) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, autoGeneratedKeys); routedStatements.add(preparedStatement); } Loading @@ -77,8 +73,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final int[] columnIndexes) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, columnIndexes); routedStatements.add(preparedStatement); } Loading @@ -87,8 +82,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final String[] columnNames) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, columnNames); routedStatements.add(preparedStatement); } Loading sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/statement/MasterSlaveStatement.java +9 −20 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ package io.shardingsphere.core.jdbc.core.statement; import com.google.common.base.Preconditions; import io.shardingsphere.core.jdbc.adapter.AbstractStatementAdapter; import io.shardingsphere.core.jdbc.core.connection.MasterSlaveConnection; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import lombok.Getter; Loading Loading @@ -70,8 +68,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public ResultSet executeQuery(final String sql) throws SQLException { SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); Collection<String> dataSourceNames = masterSlaveRouter.route(sqlStatement.getType()); Collection<String> dataSourceNames = masterSlaveRouter.route(sql); Preconditions.checkState(1 == dataSourceNames.size(), "Cannot support executeQuery for DML or DDL"); Statement statement = connection.getConnection(dataSourceNames.iterator().next()).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); Loading @@ -81,8 +78,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql); Loading @@ -93,8 +89,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql, final int autoGeneratedKeys) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, autoGeneratedKeys); Loading @@ -105,8 +100,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql, final int[] columnIndexes) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, columnIndexes); Loading @@ -117,8 +111,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql, final String[] columnNames) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, columnNames); Loading @@ -129,8 +122,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql); Loading @@ -141,8 +133,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql, final int autoGeneratedKeys) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, autoGeneratedKeys); Loading @@ -153,8 +144,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql, final int[] columnIndexes) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, columnIndexes); Loading @@ -165,8 +155,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql, final String[] columnNames) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, columnNames); Loading Loading
sharding-core/src/main/java/io/shardingsphere/core/routing/router/masterslave/MasterSlaveRouter.java +14 −4 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package io.shardingsphere.core.routing.router.masterslave; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.hint.HintManagerHolder; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.rule.MasterSlaveRule; import lombok.RequiredArgsConstructor; Loading @@ -36,22 +37,31 @@ public final class MasterSlaveRouter { private final MasterSlaveRule masterSlaveRule; /** * Route Master slave. * * @param sql SQL * @return data source names */ public Collection<String> route(final String sql) { return route(new SQLJudgeEngine(sql).judge().getType()); } /** * Route Master slave. * * @param sqlType SQL type * @return data source name * @return data source names */ // TODO for multiple masters may return more than one data source public Collection<String> route(final SQLType sqlType) { if (isMasterRoute(sqlType)) { MasterVisitedManager.setMasterVisited(); return Collections.singletonList(masterSlaveRule.getMasterDataSourceName()); } else { } return Collections.singletonList(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames()))); } } private boolean isMasterRoute(final SQLType sqlType) { return SQLType.DQL != sqlType || MasterVisitedManager.isMasterVisited() || HintManagerHolder.isMasterRouteOnly(); Loading
sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/statement/MasterSlavePreparedStatement.java +4 −10 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ package io.shardingsphere.core.jdbc.core.statement; import com.google.common.base.Preconditions; import io.shardingsphere.core.jdbc.adapter.AbstractMasterSlavePreparedStatementAdapter; import io.shardingsphere.core.jdbc.core.connection.MasterSlaveConnection; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import lombok.Getter; Loading Loading @@ -57,8 +55,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa final MasterSlaveConnection connection, final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(preparedStatement); } Loading @@ -67,8 +64,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final int autoGeneratedKeys) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, autoGeneratedKeys); routedStatements.add(preparedStatement); } Loading @@ -77,8 +73,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final int[] columnIndexes) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, columnIndexes); routedStatements.add(preparedStatement); } Loading @@ -87,8 +82,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final String[] columnNames) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule()); SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, columnNames); routedStatements.add(preparedStatement); } Loading
sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/statement/MasterSlaveStatement.java +9 −20 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ package io.shardingsphere.core.jdbc.core.statement; import com.google.common.base.Preconditions; import io.shardingsphere.core.jdbc.adapter.AbstractStatementAdapter; import io.shardingsphere.core.jdbc.core.connection.MasterSlaveConnection; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import lombok.Getter; Loading Loading @@ -70,8 +68,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public ResultSet executeQuery(final String sql) throws SQLException { SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); Collection<String> dataSourceNames = masterSlaveRouter.route(sqlStatement.getType()); Collection<String> dataSourceNames = masterSlaveRouter.route(sql); Preconditions.checkState(1 == dataSourceNames.size(), "Cannot support executeQuery for DML or DDL"); Statement statement = connection.getConnection(dataSourceNames.iterator().next()).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); Loading @@ -81,8 +78,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql); Loading @@ -93,8 +89,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql, final int autoGeneratedKeys) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, autoGeneratedKeys); Loading @@ -105,8 +100,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql, final int[] columnIndexes) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, columnIndexes); Loading @@ -117,8 +111,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public int executeUpdate(final String sql, final String[] columnNames) throws SQLException { int result = 0; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, columnNames); Loading @@ -129,8 +122,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql); Loading @@ -141,8 +133,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql, final int autoGeneratedKeys) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, autoGeneratedKeys); Loading @@ -153,8 +144,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql, final int[] columnIndexes) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, columnIndexes); Loading @@ -165,8 +155,7 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter { @Override public boolean execute(final String sql, final String[] columnNames) throws SQLException { boolean result = false; SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); for (String each : masterSlaveRouter.route(sqlStatement.getType())) { for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, columnNames); Loading