Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java +4 −5 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import io.shardingsphere.core.routing.SQLUnit; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import io.shardingsphere.proxy.backend.common.BackendHandler; import io.shardingsphere.proxy.backend.common.ResultList; import io.shardingsphere.proxy.backend.resource.BaseJDBCResource; import io.shardingsphere.proxy.config.RuleRegistry; import io.shardingsphere.proxy.metadata.ProxyShardingRefreshHandler; import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket; Loading Loading @@ -72,7 +71,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { private final String sql; private final BaseJDBCResource jdbcResource; private final JDBCResourceManager jdbcResourceManager; private MergedResult mergedResult; Loading @@ -91,9 +90,9 @@ public abstract class JDBCBackendHandler implements BackendHandler { private final EventLoopGroup userGroup; public JDBCBackendHandler(final String sql, final BaseJDBCResource jdbcResource) { public JDBCBackendHandler(final String sql) { this.sql = sql; this.jdbcResource = jdbcResource; jdbcResourceManager = new JDBCResourceManager(); isMerged = false; hasMoreResultValueFlag = true; resultLists = new CopyOnWriteArrayList<>(); Loading Loading @@ -231,7 +230,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { @Override public final boolean hasMoreResultValue() throws SQLException { if (!isMerged || !hasMoreResultValueFlag) { jdbcResource.clear(); jdbcResourceManager.clear(); return false; } if (!mergedResult.next()) { Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/resource/BaseJDBCResource.java→sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCResourceManager.java +25 −22 Original line number Diff line number Diff line Loading @@ -15,34 +15,32 @@ * </p> */ package io.shardingsphere.proxy.backend.resource; package io.shardingsphere.proxy.backend.common.jdbc; import io.shardingsphere.core.routing.router.masterslave.MasterVisitedManager; import lombok.Getter; import lombok.Setter; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * Abstract proxy-jdbc-resource. * JDBC resource manager. * * @author zhaojun */ @Getter @Setter public abstract class BaseJDBCResource { public final class JDBCResourceManager { private List<Connection> connections; private final List<Connection> connections = new ArrayList<>(); private List<ResultSet> resultSets; private final List<Statement> statements = new ArrayList<>(); public BaseJDBCResource(final List<Connection> connections, final List<ResultSet> resultSets) { this.connections = connections; this.resultSets = resultSets; } private final List<ResultSet> resultSets = new CopyOnWriteArrayList<>(); /** * Add new connection to resource manager. Loading @@ -53,6 +51,15 @@ public abstract class BaseJDBCResource { connections.add(connection); } /** * Add statement to resource manager. * * @param statement statement */ public void addStatement(final Statement statement) { statements.add(statement); } /** * Add new resultSet to resource manager. * Loading @@ -68,14 +75,11 @@ public abstract class BaseJDBCResource { * @throws SQLException SQLException */ public void clear() throws SQLException { if (null != connections) { for (Connection each : connections) { if (!each.isClosed()) { each.close(); } } } if (null != resultSets) { for (ResultSet each : resultSets) { if (!each.isClosed()) { each.close(); Loading @@ -84,4 +88,3 @@ public abstract class BaseJDBCResource { } } } } sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementBackendHandler.java +4 −7 Original line number Diff line number Diff line Loading @@ -26,8 +26,6 @@ import io.shardingsphere.core.routing.SQLRouteResult; import io.shardingsphere.proxy.backend.common.ProxyMode; import io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler; import io.shardingsphere.proxy.backend.mysql.MySQLPacketStatementExecuteQueryResult; import io.shardingsphere.proxy.backend.resource.ProxyJDBCResourceFactory; import io.shardingsphere.proxy.backend.resource.ProxyPrepareJDBCResource; import io.shardingsphere.proxy.config.RuleRegistry; import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket; import io.shardingsphere.proxy.transport.mysql.constant.ColumnType; Loading Loading @@ -64,7 +62,7 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { private final RuleRegistry ruleRegistry; public JDBCStatementBackendHandler(final List<PreparedStatementParameter> preparedStatementParameters, final int statementId, final DatabaseType databaseType) { super(PreparedStatementRegistry.getInstance().getSQL(statementId), ProxyJDBCResourceFactory.newPrepareResource()); super(PreparedStatementRegistry.getInstance().getSQL(statementId)); this.preparedStatementParameters = preparedStatementParameters; this.databaseType = databaseType; columnTypes = new CopyOnWriteArrayList<>(); Loading Loading @@ -97,9 +95,8 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { for (int i = 0; i < preparedStatementParameters.size(); i++) { result.setObject(i + 1, preparedStatementParameters.get(i).getValue()); } ProxyPrepareJDBCResource prepareProxyJDBCResource = (ProxyPrepareJDBCResource) getJdbcResource(); prepareProxyJDBCResource.addConnection(connection); prepareProxyJDBCResource.addPrepareStatement(result); getJdbcResourceManager().addConnection(connection); getJdbcResourceManager().addStatement(result); return result; } Loading @@ -107,7 +104,7 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { protected QueryResult newQueryResult(final CommandResponsePackets packet, final int index) { MySQLPacketStatementExecuteQueryResult result = new MySQLPacketStatementExecuteQueryResult(packet, columnTypes); if (ProxyMode.MEMORY_STRICTLY == ruleRegistry.getProxyMode()) { result.setResultSet(getJdbcResource().getResultSets().get(index)); result.setResultSet(getJdbcResourceManager().getResultSets().get(index)); } else { result.setResultList(getResultLists().get(index)); } Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementExecuteWorker.java +1 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,7 @@ public final class JDBCStatementExecuteWorker extends JDBCExecuteWorker implemen protected CommandResponsePackets executeQueryWithStreamResultSet() throws SQLException { preparedStatement.setFetchSize(FETCH_ONE_ROW_A_TIME); ResultSet resultSet = preparedStatement.executeQuery(); getExecuteBackendHandler().getJdbcResource().addResultSet(resultSet); getExecuteBackendHandler().getJdbcResourceManager().addResultSet(resultSet); return getQueryDatabaseProtocolPackets(resultSet); } Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/text/JDBCTextBackendHandler.java +4 −7 Original line number Diff line number Diff line Loading @@ -25,8 +25,6 @@ import io.shardingsphere.core.routing.StatementRoutingEngine; import io.shardingsphere.proxy.backend.common.ProxyMode; import io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler; import io.shardingsphere.proxy.backend.mysql.MySQLPacketQueryResult; import io.shardingsphere.proxy.backend.resource.ProxyJDBCResource; import io.shardingsphere.proxy.backend.resource.ProxyJDBCResourceFactory; import io.shardingsphere.proxy.config.RuleRegistry; import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket; import io.shardingsphere.proxy.transport.mysql.packet.command.CommandResponsePackets; Loading @@ -52,7 +50,7 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler { private final RuleRegistry ruleRegistry; public JDBCTextBackendHandler(final String sql, final DatabaseType databaseType) { super(sql, ProxyJDBCResourceFactory.newResource()); super(sql); this.databaseType = databaseType; ruleRegistry = RuleRegistry.getInstance(); } Loading @@ -67,9 +65,8 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler { @Override protected Statement prepareResource(final Connection connection, final String actualSQL, final SQLStatement sqlStatement) throws SQLException { Statement result = connection.createStatement(); ProxyJDBCResource proxyJDBCResource = (ProxyJDBCResource) getJdbcResource(); proxyJDBCResource.addConnection(connection); proxyJDBCResource.addStatement(result); getJdbcResourceManager().addConnection(connection); getJdbcResourceManager().addStatement(result); return result; } Loading @@ -82,7 +79,7 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler { protected QueryResult newQueryResult(final CommandResponsePackets packet, final int index) { MySQLPacketQueryResult result = new MySQLPacketQueryResult(packet); if (ProxyMode.MEMORY_STRICTLY == ruleRegistry.getProxyMode()) { result.setResultSet(getJdbcResource().getResultSets().get(index)); result.setResultSet(getJdbcResourceManager().getResultSets().get(index)); } else { result.setResultList(getResultLists().get(index)); } Loading Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java +4 −5 Original line number Diff line number Diff line Loading @@ -32,7 +32,6 @@ import io.shardingsphere.core.routing.SQLUnit; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import io.shardingsphere.proxy.backend.common.BackendHandler; import io.shardingsphere.proxy.backend.common.ResultList; import io.shardingsphere.proxy.backend.resource.BaseJDBCResource; import io.shardingsphere.proxy.config.RuleRegistry; import io.shardingsphere.proxy.metadata.ProxyShardingRefreshHandler; import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket; Loading Loading @@ -72,7 +71,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { private final String sql; private final BaseJDBCResource jdbcResource; private final JDBCResourceManager jdbcResourceManager; private MergedResult mergedResult; Loading @@ -91,9 +90,9 @@ public abstract class JDBCBackendHandler implements BackendHandler { private final EventLoopGroup userGroup; public JDBCBackendHandler(final String sql, final BaseJDBCResource jdbcResource) { public JDBCBackendHandler(final String sql) { this.sql = sql; this.jdbcResource = jdbcResource; jdbcResourceManager = new JDBCResourceManager(); isMerged = false; hasMoreResultValueFlag = true; resultLists = new CopyOnWriteArrayList<>(); Loading Loading @@ -231,7 +230,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { @Override public final boolean hasMoreResultValue() throws SQLException { if (!isMerged || !hasMoreResultValueFlag) { jdbcResource.clear(); jdbcResourceManager.clear(); return false; } if (!mergedResult.next()) { Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/resource/BaseJDBCResource.java→sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCResourceManager.java +25 −22 Original line number Diff line number Diff line Loading @@ -15,34 +15,32 @@ * </p> */ package io.shardingsphere.proxy.backend.resource; package io.shardingsphere.proxy.backend.common.jdbc; import io.shardingsphere.core.routing.router.masterslave.MasterVisitedManager; import lombok.Getter; import lombok.Setter; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * Abstract proxy-jdbc-resource. * JDBC resource manager. * * @author zhaojun */ @Getter @Setter public abstract class BaseJDBCResource { public final class JDBCResourceManager { private List<Connection> connections; private final List<Connection> connections = new ArrayList<>(); private List<ResultSet> resultSets; private final List<Statement> statements = new ArrayList<>(); public BaseJDBCResource(final List<Connection> connections, final List<ResultSet> resultSets) { this.connections = connections; this.resultSets = resultSets; } private final List<ResultSet> resultSets = new CopyOnWriteArrayList<>(); /** * Add new connection to resource manager. Loading @@ -53,6 +51,15 @@ public abstract class BaseJDBCResource { connections.add(connection); } /** * Add statement to resource manager. * * @param statement statement */ public void addStatement(final Statement statement) { statements.add(statement); } /** * Add new resultSet to resource manager. * Loading @@ -68,14 +75,11 @@ public abstract class BaseJDBCResource { * @throws SQLException SQLException */ public void clear() throws SQLException { if (null != connections) { for (Connection each : connections) { if (!each.isClosed()) { each.close(); } } } if (null != resultSets) { for (ResultSet each : resultSets) { if (!each.isClosed()) { each.close(); Loading @@ -84,4 +88,3 @@ public abstract class BaseJDBCResource { } } } }
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementBackendHandler.java +4 −7 Original line number Diff line number Diff line Loading @@ -26,8 +26,6 @@ import io.shardingsphere.core.routing.SQLRouteResult; import io.shardingsphere.proxy.backend.common.ProxyMode; import io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler; import io.shardingsphere.proxy.backend.mysql.MySQLPacketStatementExecuteQueryResult; import io.shardingsphere.proxy.backend.resource.ProxyJDBCResourceFactory; import io.shardingsphere.proxy.backend.resource.ProxyPrepareJDBCResource; import io.shardingsphere.proxy.config.RuleRegistry; import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket; import io.shardingsphere.proxy.transport.mysql.constant.ColumnType; Loading Loading @@ -64,7 +62,7 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { private final RuleRegistry ruleRegistry; public JDBCStatementBackendHandler(final List<PreparedStatementParameter> preparedStatementParameters, final int statementId, final DatabaseType databaseType) { super(PreparedStatementRegistry.getInstance().getSQL(statementId), ProxyJDBCResourceFactory.newPrepareResource()); super(PreparedStatementRegistry.getInstance().getSQL(statementId)); this.preparedStatementParameters = preparedStatementParameters; this.databaseType = databaseType; columnTypes = new CopyOnWriteArrayList<>(); Loading Loading @@ -97,9 +95,8 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { for (int i = 0; i < preparedStatementParameters.size(); i++) { result.setObject(i + 1, preparedStatementParameters.get(i).getValue()); } ProxyPrepareJDBCResource prepareProxyJDBCResource = (ProxyPrepareJDBCResource) getJdbcResource(); prepareProxyJDBCResource.addConnection(connection); prepareProxyJDBCResource.addPrepareStatement(result); getJdbcResourceManager().addConnection(connection); getJdbcResourceManager().addStatement(result); return result; } Loading @@ -107,7 +104,7 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { protected QueryResult newQueryResult(final CommandResponsePackets packet, final int index) { MySQLPacketStatementExecuteQueryResult result = new MySQLPacketStatementExecuteQueryResult(packet, columnTypes); if (ProxyMode.MEMORY_STRICTLY == ruleRegistry.getProxyMode()) { result.setResultSet(getJdbcResource().getResultSets().get(index)); result.setResultSet(getJdbcResourceManager().getResultSets().get(index)); } else { result.setResultList(getResultLists().get(index)); } Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementExecuteWorker.java +1 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,7 @@ public final class JDBCStatementExecuteWorker extends JDBCExecuteWorker implemen protected CommandResponsePackets executeQueryWithStreamResultSet() throws SQLException { preparedStatement.setFetchSize(FETCH_ONE_ROW_A_TIME); ResultSet resultSet = preparedStatement.executeQuery(); getExecuteBackendHandler().getJdbcResource().addResultSet(resultSet); getExecuteBackendHandler().getJdbcResourceManager().addResultSet(resultSet); return getQueryDatabaseProtocolPackets(resultSet); } Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/text/JDBCTextBackendHandler.java +4 −7 Original line number Diff line number Diff line Loading @@ -25,8 +25,6 @@ import io.shardingsphere.core.routing.StatementRoutingEngine; import io.shardingsphere.proxy.backend.common.ProxyMode; import io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler; import io.shardingsphere.proxy.backend.mysql.MySQLPacketQueryResult; import io.shardingsphere.proxy.backend.resource.ProxyJDBCResource; import io.shardingsphere.proxy.backend.resource.ProxyJDBCResourceFactory; import io.shardingsphere.proxy.config.RuleRegistry; import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket; import io.shardingsphere.proxy.transport.mysql.packet.command.CommandResponsePackets; Loading @@ -52,7 +50,7 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler { private final RuleRegistry ruleRegistry; public JDBCTextBackendHandler(final String sql, final DatabaseType databaseType) { super(sql, ProxyJDBCResourceFactory.newResource()); super(sql); this.databaseType = databaseType; ruleRegistry = RuleRegistry.getInstance(); } Loading @@ -67,9 +65,8 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler { @Override protected Statement prepareResource(final Connection connection, final String actualSQL, final SQLStatement sqlStatement) throws SQLException { Statement result = connection.createStatement(); ProxyJDBCResource proxyJDBCResource = (ProxyJDBCResource) getJdbcResource(); proxyJDBCResource.addConnection(connection); proxyJDBCResource.addStatement(result); getJdbcResourceManager().addConnection(connection); getJdbcResourceManager().addStatement(result); return result; } Loading @@ -82,7 +79,7 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler { protected QueryResult newQueryResult(final CommandResponsePackets packet, final int index) { MySQLPacketQueryResult result = new MySQLPacketQueryResult(packet); if (ProxyMode.MEMORY_STRICTLY == ruleRegistry.getProxyMode()) { result.setResultSet(getJdbcResource().getResultSets().get(index)); result.setResultSet(getJdbcResourceManager().getResultSets().get(index)); } else { result.setResultList(getResultLists().get(index)); } Loading