未验证 提交 308f09f1 编写于 作者: Z Zhang Yonglun 提交者: GitHub

#3556, carry PR#5194 to dev-4.x (#5733)

上级 8ad915c2
......@@ -18,7 +18,6 @@
package org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.execute;
import lombok.Getter;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.sharding.execute.sql.StatementExecuteUnit;
import org.apache.shardingsphere.sharding.execute.sql.execute.SQLExecuteTemplate;
import org.apache.shardingsphere.sharding.execute.sql.execute.threadlocal.ExecutorExceptionHandler;
......@@ -36,8 +35,11 @@ import org.apache.shardingsphere.shardingproxy.backend.response.query.QueryRespo
import org.apache.shardingsphere.shardingproxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.shardingproxy.context.ShardingProxyContext;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.DeleteStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.UpdateStatement;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.engine.InputGroup;
import java.sql.SQLException;
......@@ -75,12 +77,23 @@ public final class JDBCExecuteEngine implements SQLExecuteEngine {
boolean isExceptionThrown = ExecutorExceptionHandler.isExceptionThrown();
Collection<InputGroup<StatementExecuteUnit>> inputGroups = sqlExecutePrepareTemplate.getExecuteUnitGroups(
executionContext.getExecutionUnits(), new ProxyJDBCExecutePrepareCallback(backendConnection, jdbcExecutorWrapper, isReturnGeneratedKeys));
Collection<ExecuteResponse> executeResponses = sqlExecuteTemplate.execute((Collection) inputGroups,
Collection<ExecuteResponse> executeResponses = sqlExecuteTemplate.execute((Collection) inputGroups,
new ProxySQLExecuteCallback(sqlStatementContext, backendConnection, jdbcExecutorWrapper, isExceptionThrown, isReturnGeneratedKeys, true),
new ProxySQLExecuteCallback(sqlStatementContext, backendConnection, jdbcExecutorWrapper, isExceptionThrown, isReturnGeneratedKeys, false));
ExecuteResponse executeResponse = executeResponses.iterator().next();
return executeResponse instanceof ExecuteQueryResponse
? getExecuteQueryResponse(((ExecuteQueryResponse) executeResponse).getQueryHeaders(), executeResponses) : new UpdateResponse(executeResponses);
if (executeResponse instanceof ExecuteQueryResponse) {
return getExecuteQueryResponse(((ExecuteQueryResponse) executeResponse).getQueryHeaders(), executeResponses);
} else {
UpdateResponse updateResponse = new UpdateResponse(executeResponses);
if (sqlStatementContext.getSqlStatement() instanceof InsertStatement) {
updateResponse.setType("INSERT");
} else if (sqlStatementContext.getSqlStatement() instanceof DeleteStatement) {
updateResponse.setType("DELETE");
} else if (sqlStatementContext.getSqlStatement() instanceof UpdateStatement) {
updateResponse.setType("UPDATE");
}
return updateResponse;
}
}
private BackendResponse getExecuteQueryResponse(final List<QueryHeader> queryHeaders, final Collection<ExecuteResponse> executeResponses) {
......
......@@ -18,6 +18,7 @@
package org.apache.shardingsphere.shardingproxy.backend.response.update;
import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.execute.response.ExecuteResponse;
import org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.execute.response.ExecuteUpdateResponse;
import org.apache.shardingsphere.shardingproxy.backend.response.BackendResponse;
......@@ -40,6 +41,10 @@ public final class UpdateResponse implements BackendResponse {
@Getter
private long updateCount;
@Getter
@Setter
private String type;
public UpdateResponse() {
this(Collections.emptyList());
}
......
......@@ -103,7 +103,7 @@ public final class PostgreSQLComBindExecutor implements QueryCommandExecutor {
}
private PostgreSQLCommandCompletePacket createUpdatePacket(final UpdateResponse updateResponse) {
return new PostgreSQLCommandCompletePacket();
return new PostgreSQLCommandCompletePacket(updateResponse.getType(), updateResponse.getUpdateCount());
}
private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final QueryResponse queryResponse) {
......
......@@ -88,7 +88,7 @@ public final class PostgreSQLComQueryExecutor implements QueryCommandExecutor {
}
private PostgreSQLCommandCompletePacket createUpdatePacket(final UpdateResponse updateResponse) {
return new PostgreSQLCommandCompletePacket();
return new PostgreSQLCommandCompletePacket(updateResponse.getType(), updateResponse.getUpdateCount());
}
private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final QueryResponse queryResponse) {
......
......@@ -30,13 +30,22 @@ public final class PostgreSQLCommandCompletePacket implements PostgreSQLPacket {
@Getter
private final char messageType = PostgreSQLCommandPacketType.COMMAND_COMPLETE.getValue();
private final String sqlCommand = "";
private final String sqlCommand;
private final int rowCount = 0;
private final long rowCount;
public PostgreSQLCommandCompletePacket() {
sqlCommand = "";
rowCount = 0;
}
public PostgreSQLCommandCompletePacket(final String sqlCommand, final long rowCount) {
this.sqlCommand = sqlCommand;
this.rowCount = rowCount;
}
@Override
public void write(final PostgreSQLPacketPayload payload) {
// TODO payload.writeStringNul(sqlCommand + " " + rowCount);
payload.writeStringNul("");
payload.writeStringNul(sqlCommand + " " + rowCount);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册