Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java +23 −8 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingsphere.proxy.backend.common.jdbc; import com.google.common.base.Optional; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.constant.TransactionType; import io.shardingsphere.core.exception.ShardingException; Loading Loading @@ -99,7 +100,9 @@ public abstract class JDBCBackendHandler implements BackendHandler { } catch (final SQLException ex) { return new CommandResponsePackets(new ErrPacket(1, ex)); } catch (final SystemException | ShardingException ex) { return new CommandResponsePackets(new ErrPacket(1, ServerErrorCode.ER_STD_UNKNOWN_EXCEPTION, ex.getMessage())); Optional<SQLException> sqlException = findSQLException(ex); return sqlException.isPresent() ? new CommandResponsePackets(new ErrPacket(1, sqlException.get())) : new CommandResponsePackets(new ErrPacket(1, ServerErrorCode.ER_STD_UNKNOWN_EXCEPTION, ex.getMessage())); } } Loading @@ -126,7 +129,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { return TransactionType.XA == ruleRegistry.getTransactionType() && SQLType.DDL == sqlType && Status.STATUS_NO_TRANSACTION != AtomikosUserTransaction.getInstance().getStatus(); } private CommandResponsePackets merge(final SQLStatement sqlStatement) { private CommandResponsePackets merge(final SQLStatement sqlStatement) throws SQLException { if (executeResponse instanceof ExecuteUpdateResponse) { Collection<DatabasePacket> headPackets = new LinkedList<>(); for (DatabasePacket each : ((ExecuteUpdateResponse) executeResponse).getPackets()) { Loading @@ -139,12 +142,8 @@ public abstract class JDBCBackendHandler implements BackendHandler { } QueryResponsePackets result = ((ExecuteQueryResponse) executeResponse).getQueryResponsePackets(); currentSequenceId += result.getPackets().size(); try { mergedResult = mergeQuery(sqlStatement); return result; } catch (final SQLException ex) { return new CommandResponsePackets(new ErrPacket(1, ex)); } } private MergedResult mergeQuery(final SQLStatement sqlStatement) throws SQLException { Loading Loading @@ -177,6 +176,22 @@ public abstract class JDBCBackendHandler implements BackendHandler { protected abstract SQLRouteResult doShardingRoute(); private Optional<SQLException> findSQLException(final Exception exception) { if (null == exception.getCause()) { return Optional.absent(); } if (exception.getCause() instanceof SQLException) { return Optional.of((SQLException) exception.getCause()); } if (null == exception.getCause().getCause()) { return Optional.absent(); } if (exception.getCause().getCause() instanceof SQLException) { return Optional.of((SQLException) exception.getCause()); } return Optional.absent(); } @Override public final boolean hasMoreResultValue() throws SQLException { if (!isMerged || !hasMoreResultValueFlag) { Loading sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/execute/JDBCExecuteEngine.java +15 −24 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import io.shardingsphere.proxy.transport.mysql.packet.command.reponse.QueryRespo import io.shardingsphere.proxy.transport.mysql.packet.command.text.query.ColumnDefinition41Packet; import io.shardingsphere.proxy.transport.mysql.packet.command.text.query.FieldCountPacket; import io.shardingsphere.proxy.transport.mysql.packet.generic.EofPacket; import io.shardingsphere.proxy.transport.mysql.packet.generic.ErrPacket; import io.shardingsphere.proxy.transport.mysql.packet.generic.OKPacket; import io.shardingsphere.proxy.util.ExecutorContext; import lombok.Getter; Loading Loading @@ -67,8 +66,7 @@ public abstract class JDBCExecuteEngine implements SQLExecuteEngine { protected abstract Statement createStatement(Connection connection, String sql, boolean isReturnGeneratedKeys) throws SQLException; protected ExecuteResponseUnit executeWithMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) { try { protected ExecuteResponseUnit executeWithMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) throws SQLException { setFetchSize(statement); if (!executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0))); Loading @@ -79,21 +77,14 @@ public abstract class JDBCExecuteEngine implements SQLExecuteEngine { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new OKPacket(1))); } return new ExecuteQueryResponseUnit(getHeaderPackets(resultSetMetaData), createQueryResult(resultSet)); } catch (final SQLException ex) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new ErrPacket(1, ex))); } } protected ExecuteResponseUnit executeWithoutMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) { try { protected ExecuteResponseUnit executeWithoutMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) throws SQLException { setFetchSize(statement); if (!executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0))); } return new ExecuteQueryResponseUnit(null, createQueryResult(statement.getResultSet())); } catch (final SQLException ex) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new ErrPacket(1, ex))); } } protected abstract void setFetchSize(Statement statement) throws SQLException; Loading Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/JDBCBackendHandler.java +23 −8 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingsphere.proxy.backend.common.jdbc; import com.google.common.base.Optional; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.constant.TransactionType; import io.shardingsphere.core.exception.ShardingException; Loading Loading @@ -99,7 +100,9 @@ public abstract class JDBCBackendHandler implements BackendHandler { } catch (final SQLException ex) { return new CommandResponsePackets(new ErrPacket(1, ex)); } catch (final SystemException | ShardingException ex) { return new CommandResponsePackets(new ErrPacket(1, ServerErrorCode.ER_STD_UNKNOWN_EXCEPTION, ex.getMessage())); Optional<SQLException> sqlException = findSQLException(ex); return sqlException.isPresent() ? new CommandResponsePackets(new ErrPacket(1, sqlException.get())) : new CommandResponsePackets(new ErrPacket(1, ServerErrorCode.ER_STD_UNKNOWN_EXCEPTION, ex.getMessage())); } } Loading @@ -126,7 +129,7 @@ public abstract class JDBCBackendHandler implements BackendHandler { return TransactionType.XA == ruleRegistry.getTransactionType() && SQLType.DDL == sqlType && Status.STATUS_NO_TRANSACTION != AtomikosUserTransaction.getInstance().getStatus(); } private CommandResponsePackets merge(final SQLStatement sqlStatement) { private CommandResponsePackets merge(final SQLStatement sqlStatement) throws SQLException { if (executeResponse instanceof ExecuteUpdateResponse) { Collection<DatabasePacket> headPackets = new LinkedList<>(); for (DatabasePacket each : ((ExecuteUpdateResponse) executeResponse).getPackets()) { Loading @@ -139,12 +142,8 @@ public abstract class JDBCBackendHandler implements BackendHandler { } QueryResponsePackets result = ((ExecuteQueryResponse) executeResponse).getQueryResponsePackets(); currentSequenceId += result.getPackets().size(); try { mergedResult = mergeQuery(sqlStatement); return result; } catch (final SQLException ex) { return new CommandResponsePackets(new ErrPacket(1, ex)); } } private MergedResult mergeQuery(final SQLStatement sqlStatement) throws SQLException { Loading Loading @@ -177,6 +176,22 @@ public abstract class JDBCBackendHandler implements BackendHandler { protected abstract SQLRouteResult doShardingRoute(); private Optional<SQLException> findSQLException(final Exception exception) { if (null == exception.getCause()) { return Optional.absent(); } if (exception.getCause() instanceof SQLException) { return Optional.of((SQLException) exception.getCause()); } if (null == exception.getCause().getCause()) { return Optional.absent(); } if (exception.getCause().getCause() instanceof SQLException) { return Optional.of((SQLException) exception.getCause()); } return Optional.absent(); } @Override public final boolean hasMoreResultValue() throws SQLException { if (!isMerged || !hasMoreResultValueFlag) { Loading
sharding-proxy/src/main/java/io/shardingsphere/proxy/backend/common/jdbc/execute/JDBCExecuteEngine.java +15 −24 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import io.shardingsphere.proxy.transport.mysql.packet.command.reponse.QueryRespo import io.shardingsphere.proxy.transport.mysql.packet.command.text.query.ColumnDefinition41Packet; import io.shardingsphere.proxy.transport.mysql.packet.command.text.query.FieldCountPacket; import io.shardingsphere.proxy.transport.mysql.packet.generic.EofPacket; import io.shardingsphere.proxy.transport.mysql.packet.generic.ErrPacket; import io.shardingsphere.proxy.transport.mysql.packet.generic.OKPacket; import io.shardingsphere.proxy.util.ExecutorContext; import lombok.Getter; Loading Loading @@ -67,8 +66,7 @@ public abstract class JDBCExecuteEngine implements SQLExecuteEngine { protected abstract Statement createStatement(Connection connection, String sql, boolean isReturnGeneratedKeys) throws SQLException; protected ExecuteResponseUnit executeWithMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) { try { protected ExecuteResponseUnit executeWithMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) throws SQLException { setFetchSize(statement); if (!executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0))); Loading @@ -79,21 +77,14 @@ public abstract class JDBCExecuteEngine implements SQLExecuteEngine { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new OKPacket(1))); } return new ExecuteQueryResponseUnit(getHeaderPackets(resultSetMetaData), createQueryResult(resultSet)); } catch (final SQLException ex) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new ErrPacket(1, ex))); } } protected ExecuteResponseUnit executeWithoutMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) { try { protected ExecuteResponseUnit executeWithoutMetadata(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) throws SQLException { setFetchSize(statement); if (!executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0))); } return new ExecuteQueryResponseUnit(null, createQueryResult(statement.getResultSet())); } catch (final SQLException ex) { return new ExecuteUpdateResponseUnit(new CommandResponsePackets(new ErrPacket(1, ex))); } } protected abstract void setFetchSize(Statement statement) throws SQLException; Loading