Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java +13 −16 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package io.shardingsphere.proxy.backend.common.jdbc; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.constant.TransactionType; import io.shardingsphere.core.exception.ShardingException; Loading Loading @@ -87,27 +86,25 @@ public abstract class JDBCBackendHandler implements BackendHandler { private boolean hasMoreResultValueFlag; private final DatabaseType databaseType; private final boolean showSQL; private final BaseJDBCResource jdbcResource; private final List<ResultList> resultLists = new CopyOnWriteArrayList<>(); private final RuleRegistry ruleRegistry; private final List<ResultList> resultLists; public JDBCBackendHandler(final String sql, final DatabaseType databaseType, final boolean showSQL, final BaseJDBCResource jdbcResource) { public JDBCBackendHandler(final String sql, final BaseJDBCResource jdbcResource) { this.sql = sql; isMerged = false; hasMoreResultValueFlag = true; this.databaseType = databaseType; this.showSQL = showSQL; this.jdbcResource = jdbcResource; ruleRegistry = RuleRegistry.getInstance(); resultLists = new CopyOnWriteArrayList<>(); } @Override public CommandResponsePackets execute() { try { return doExecuteInternal(RuleRegistry.getInstance().isMasterSlaveOnly() ? doMasterSlaveRoute() : doSqlShardingRoute()); return doExecuteInternal(ruleRegistry.isMasterSlaveOnly() ? doMasterSlaveRoute() : doSqlShardingRoute()); } catch (final Exception ex) { log.error("ExecuteBackendHandler", ex); return new CommandResponsePackets(new ErrPacket(1, new SQLException(ex))); Loading @@ -121,7 +118,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { if (isXaDDL(routeResult)) { throw new SQLException("DDL command can't not execute in xa transaction mode."); } ExecutorService executorService = RuleRegistry.getInstance().getExecutorService(); ExecutorService executorService = ruleRegistry.getExecutorService(); List<Future<CommandResponsePackets>> futureList = new ArrayList<>(1024); for (SQLExecutionUnit each : routeResult.getExecutionUnits()) { Statement statement = prepareResource(each.getDataSource(), each.getSqlUnit().getSql(), routeResult.getSqlStatement()); Loading @@ -129,21 +126,21 @@ public abstract class JDBCBackendHandler implements BackendHandler { } List<CommandResponsePackets> packets = buildCommandResponsePackets(futureList); CommandResponsePackets result = merge(routeResult.getSqlStatement(), packets); if (!RuleRegistry.getInstance().isMasterSlaveOnly()) { if (!ruleRegistry.isMasterSlaveOnly()) { ProxyShardingRefreshHandler.build(routeResult).execute(); } return result; } private boolean isXaDDL(final SQLRouteResult routeResult) throws SystemException { return TransactionType.XA.equals(RuleRegistry.getInstance().getTransactionType()) return TransactionType.XA.equals(ruleRegistry.getTransactionType()) && SQLType.DDL.equals(routeResult.getSqlStatement().getType()) && Status.STATUS_NO_TRANSACTION != AtomikosUserTransaction.getInstance().getStatus(); } private SQLRouteResult doMasterSlaveRoute() { SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); SQLRouteResult result = new SQLRouteResult(sqlStatement, null); String dataSourceName = new MasterSlaveRouter(RuleRegistry.getInstance().getMasterSlaveRule()).route(sqlStatement.getType()).iterator().next(); String dataSourceName = new MasterSlaveRouter(ruleRegistry.getMasterSlaveRule()).route(sqlStatement.getType()).iterator().next(); SQLUnit sqlUnit = new SQLUnit(sql, Collections.<List<Object>>emptyList()); result.getExecutionUnits().add(new SQLExecutionUnit(dataSourceName, sqlUnit)); return result; Loading Loading @@ -205,7 +202,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { queryResults.add(newQueryResult(packets.get(i), i)); } try { mergedResult = MergeEngineFactory.newInstance(RuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement, RuleRegistry.getInstance().getShardingMetaData()).merge(); mergedResult = MergeEngineFactory.newInstance(ruleRegistry.getShardingRule(), queryResults, sqlStatement, ruleRegistry.getShardingMetaData()).merge(); isMerged = true; } catch (final SQLException ex) { return new CommandResponsePackets(new ErrPacket(1, ex)); Loading Loading @@ -262,7 +259,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { protected Connection getConnection(final DataSource dataSource) throws SQLException { Connection result; if (ProxyMode.CONNECTION_STRICTLY == RuleRegistry.getInstance().getProxyMode()) { if (ProxyMode.CONNECTION_STRICTLY == ruleRegistry.getProxyMode()) { result = ProxyConnectionHolder.getConnection(dataSource); if (null == result) { result = dataSource.getConnection(); Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementBackendHandler.java +11 −5 Original line number Diff line number Diff line Loading @@ -55,24 +55,30 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { private final RuleRegistry ruleRegistry; private final List<PreparedStatementParameter> preparedStatementParameters; private final DatabaseType databaseType; private final boolean showSQL; @Getter private final List<ColumnType> columnTypes; private final RuleRegistry ruleRegistry; public JDBCStatementBackendHandler(final List<PreparedStatementParameter> preparedStatementParameters, final int statementId, final DatabaseType databaseType, final boolean showSQL) { super(PreparedStatementRegistry.getInstance().getSQL(statementId), databaseType, showSQL, ProxyJDBCResourceFactory.newPrepareResource()); ruleRegistry = RuleRegistry.getInstance(); super(PreparedStatementRegistry.getInstance().getSQL(statementId), ProxyJDBCResourceFactory.newPrepareResource()); this.preparedStatementParameters = preparedStatementParameters; this.databaseType = databaseType; this.showSQL = showSQL; columnTypes = new CopyOnWriteArrayList<>(); ruleRegistry = RuleRegistry.getInstance(); } @Override protected SQLRouteResult doSqlShardingRoute() { PreparedStatementRoutingEngine routingEngine = new PreparedStatementRoutingEngine( getSql(), ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), getDatabaseType(), isShowSQL(), ruleRegistry.getShardingDataSourceMetaData()); getSql(), ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), databaseType, showSQL, ruleRegistry.getShardingDataSourceMetaData()); return routingEngine.route(getComStmtExecuteParameters()); } Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/text/JDBCTextBackendHandler.java +8 −2 Original line number Diff line number Diff line Loading @@ -48,17 +48,23 @@ import java.util.concurrent.Callable; */ public final class JDBCTextBackendHandler extends JDBCBackendHandler { private final DatabaseType databaseType; private final boolean showSQL; private final RuleRegistry ruleRegistry; public JDBCTextBackendHandler(final String sql, final DatabaseType databaseType, final boolean showSQL) { super(sql, databaseType, showSQL, ProxyJDBCResourceFactory.newResource()); super(sql, ProxyJDBCResourceFactory.newResource()); this.databaseType = databaseType; this.showSQL = showSQL; ruleRegistry = RuleRegistry.getInstance(); } @Override protected SQLRouteResult doSqlShardingRoute() { StatementRoutingEngine routingEngine = new StatementRoutingEngine( ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), getDatabaseType(), isShowSQL(), ruleRegistry.getShardingDataSourceMetaData()); ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), databaseType, showSQL, ruleRegistry.getShardingDataSourceMetaData()); return routingEngine.route(getSql()); } Loading Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java +13 −16 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package io.shardingsphere.proxy.backend.common.jdbc; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.constant.TransactionType; import io.shardingsphere.core.exception.ShardingException; Loading Loading @@ -87,27 +86,25 @@ public abstract class JDBCBackendHandler implements BackendHandler { private boolean hasMoreResultValueFlag; private final DatabaseType databaseType; private final boolean showSQL; private final BaseJDBCResource jdbcResource; private final List<ResultList> resultLists = new CopyOnWriteArrayList<>(); private final RuleRegistry ruleRegistry; private final List<ResultList> resultLists; public JDBCBackendHandler(final String sql, final DatabaseType databaseType, final boolean showSQL, final BaseJDBCResource jdbcResource) { public JDBCBackendHandler(final String sql, final BaseJDBCResource jdbcResource) { this.sql = sql; isMerged = false; hasMoreResultValueFlag = true; this.databaseType = databaseType; this.showSQL = showSQL; this.jdbcResource = jdbcResource; ruleRegistry = RuleRegistry.getInstance(); resultLists = new CopyOnWriteArrayList<>(); } @Override public CommandResponsePackets execute() { try { return doExecuteInternal(RuleRegistry.getInstance().isMasterSlaveOnly() ? doMasterSlaveRoute() : doSqlShardingRoute()); return doExecuteInternal(ruleRegistry.isMasterSlaveOnly() ? doMasterSlaveRoute() : doSqlShardingRoute()); } catch (final Exception ex) { log.error("ExecuteBackendHandler", ex); return new CommandResponsePackets(new ErrPacket(1, new SQLException(ex))); Loading @@ -121,7 +118,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { if (isXaDDL(routeResult)) { throw new SQLException("DDL command can't not execute in xa transaction mode."); } ExecutorService executorService = RuleRegistry.getInstance().getExecutorService(); ExecutorService executorService = ruleRegistry.getExecutorService(); List<Future<CommandResponsePackets>> futureList = new ArrayList<>(1024); for (SQLExecutionUnit each : routeResult.getExecutionUnits()) { Statement statement = prepareResource(each.getDataSource(), each.getSqlUnit().getSql(), routeResult.getSqlStatement()); Loading @@ -129,21 +126,21 @@ public abstract class JDBCBackendHandler implements BackendHandler { } List<CommandResponsePackets> packets = buildCommandResponsePackets(futureList); CommandResponsePackets result = merge(routeResult.getSqlStatement(), packets); if (!RuleRegistry.getInstance().isMasterSlaveOnly()) { if (!ruleRegistry.isMasterSlaveOnly()) { ProxyShardingRefreshHandler.build(routeResult).execute(); } return result; } private boolean isXaDDL(final SQLRouteResult routeResult) throws SystemException { return TransactionType.XA.equals(RuleRegistry.getInstance().getTransactionType()) return TransactionType.XA.equals(ruleRegistry.getTransactionType()) && SQLType.DDL.equals(routeResult.getSqlStatement().getType()) && Status.STATUS_NO_TRANSACTION != AtomikosUserTransaction.getInstance().getStatus(); } private SQLRouteResult doMasterSlaveRoute() { SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge(); SQLRouteResult result = new SQLRouteResult(sqlStatement, null); String dataSourceName = new MasterSlaveRouter(RuleRegistry.getInstance().getMasterSlaveRule()).route(sqlStatement.getType()).iterator().next(); String dataSourceName = new MasterSlaveRouter(ruleRegistry.getMasterSlaveRule()).route(sqlStatement.getType()).iterator().next(); SQLUnit sqlUnit = new SQLUnit(sql, Collections.<List<Object>>emptyList()); result.getExecutionUnits().add(new SQLExecutionUnit(dataSourceName, sqlUnit)); return result; Loading Loading @@ -205,7 +202,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { queryResults.add(newQueryResult(packets.get(i), i)); } try { mergedResult = MergeEngineFactory.newInstance(RuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement, RuleRegistry.getInstance().getShardingMetaData()).merge(); mergedResult = MergeEngineFactory.newInstance(ruleRegistry.getShardingRule(), queryResults, sqlStatement, ruleRegistry.getShardingMetaData()).merge(); isMerged = true; } catch (final SQLException ex) { return new CommandResponsePackets(new ErrPacket(1, ex)); Loading Loading @@ -262,7 +259,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { protected Connection getConnection(final DataSource dataSource) throws SQLException { Connection result; if (ProxyMode.CONNECTION_STRICTLY == RuleRegistry.getInstance().getProxyMode()) { if (ProxyMode.CONNECTION_STRICTLY == ruleRegistry.getProxyMode()) { result = ProxyConnectionHolder.getConnection(dataSource); if (null == result) { result = dataSource.getConnection(); Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/statement/JDBCStatementBackendHandler.java +11 −5 Original line number Diff line number Diff line Loading @@ -55,24 +55,30 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public final class JDBCStatementBackendHandler extends JDBCBackendHandler { private final RuleRegistry ruleRegistry; private final List<PreparedStatementParameter> preparedStatementParameters; private final DatabaseType databaseType; private final boolean showSQL; @Getter private final List<ColumnType> columnTypes; private final RuleRegistry ruleRegistry; public JDBCStatementBackendHandler(final List<PreparedStatementParameter> preparedStatementParameters, final int statementId, final DatabaseType databaseType, final boolean showSQL) { super(PreparedStatementRegistry.getInstance().getSQL(statementId), databaseType, showSQL, ProxyJDBCResourceFactory.newPrepareResource()); ruleRegistry = RuleRegistry.getInstance(); super(PreparedStatementRegistry.getInstance().getSQL(statementId), ProxyJDBCResourceFactory.newPrepareResource()); this.preparedStatementParameters = preparedStatementParameters; this.databaseType = databaseType; this.showSQL = showSQL; columnTypes = new CopyOnWriteArrayList<>(); ruleRegistry = RuleRegistry.getInstance(); } @Override protected SQLRouteResult doSqlShardingRoute() { PreparedStatementRoutingEngine routingEngine = new PreparedStatementRoutingEngine( getSql(), ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), getDatabaseType(), isShowSQL(), ruleRegistry.getShardingDataSourceMetaData()); getSql(), ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), databaseType, showSQL, ruleRegistry.getShardingDataSourceMetaData()); return routingEngine.route(getComStmtExecuteParameters()); } Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/text/JDBCTextBackendHandler.java +8 −2 Original line number Diff line number Diff line Loading @@ -48,17 +48,23 @@ import java.util.concurrent.Callable; */ public final class JDBCTextBackendHandler extends JDBCBackendHandler { private final DatabaseType databaseType; private final boolean showSQL; private final RuleRegistry ruleRegistry; public JDBCTextBackendHandler(final String sql, final DatabaseType databaseType, final boolean showSQL) { super(sql, databaseType, showSQL, ProxyJDBCResourceFactory.newResource()); super(sql, ProxyJDBCResourceFactory.newResource()); this.databaseType = databaseType; this.showSQL = showSQL; ruleRegistry = RuleRegistry.getInstance(); } @Override protected SQLRouteResult doSqlShardingRoute() { StatementRoutingEngine routingEngine = new StatementRoutingEngine( ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), getDatabaseType(), isShowSQL(), ruleRegistry.getShardingDataSourceMetaData()); ruleRegistry.getShardingRule(), ruleRegistry.getShardingMetaData(), databaseType, showSQL, ruleRegistry.getShardingDataSourceMetaData()); return routingEngine.route(getSql()); } Loading