未验证 提交 5560b579 编写于 作者: Z Zhang Yonglun 提交者: GitHub

#3556, affect rows is always zero when using sharding-proxy postgresql mode (#5194)

上级 c9db163b
...@@ -31,7 +31,9 @@ import org.apache.shardingsphere.shardingproxy.backend.response.query.QueryHeade ...@@ -31,7 +31,9 @@ import org.apache.shardingsphere.shardingproxy.backend.response.query.QueryHeade
import org.apache.shardingsphere.shardingproxy.backend.response.query.QueryResponse; import org.apache.shardingsphere.shardingproxy.backend.response.query.QueryResponse;
import org.apache.shardingsphere.shardingproxy.backend.response.update.UpdateResponse; import org.apache.shardingsphere.shardingproxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext; 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.InsertStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.UpdateStatement;
import org.apache.shardingsphere.underlying.executor.StatementExecuteUnit; import org.apache.shardingsphere.underlying.executor.StatementExecuteUnit;
import org.apache.shardingsphere.underlying.executor.connection.StatementOption; import org.apache.shardingsphere.underlying.executor.connection.StatementOption;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext; import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
...@@ -75,8 +77,19 @@ public final class JDBCExecuteEngine implements SQLExecuteEngine { ...@@ -75,8 +77,19 @@ public final class JDBCExecuteEngine implements SQLExecuteEngine {
new ProxySQLExecuteCallback(sqlStatementContext, backendConnection, jdbcExecutorWrapper, isExceptionThrown, isReturnGeneratedKeys, true), new ProxySQLExecuteCallback(sqlStatementContext, backendConnection, jdbcExecutorWrapper, isExceptionThrown, isReturnGeneratedKeys, true),
new ProxySQLExecuteCallback(sqlStatementContext, backendConnection, jdbcExecutorWrapper, isExceptionThrown, isReturnGeneratedKeys, false)); new ProxySQLExecuteCallback(sqlStatementContext, backendConnection, jdbcExecutorWrapper, isExceptionThrown, isReturnGeneratedKeys, false));
ExecuteResponse executeResponse = executeResponses.iterator().next(); ExecuteResponse executeResponse = executeResponses.iterator().next();
return executeResponse instanceof ExecuteQueryResponse if (executeResponse instanceof ExecuteQueryResponse) {
? getExecuteQueryResponse(((ExecuteQueryResponse) executeResponse).getQueryHeaders(), executeResponses) : new UpdateResponse(executeResponses); 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) { private BackendResponse getExecuteQueryResponse(final List<QueryHeader> queryHeaders, final Collection<ExecuteResponse> executeResponses) {
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
package org.apache.shardingsphere.shardingproxy.backend.response.update; package org.apache.shardingsphere.shardingproxy.backend.response.update;
import lombok.Getter; 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.ExecuteResponse;
import org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.execute.response.ExecuteUpdateResponse; import org.apache.shardingsphere.shardingproxy.backend.communication.jdbc.execute.response.ExecuteUpdateResponse;
import org.apache.shardingsphere.shardingproxy.backend.response.BackendResponse; import org.apache.shardingsphere.shardingproxy.backend.response.BackendResponse;
...@@ -40,6 +41,10 @@ public final class UpdateResponse implements BackendResponse { ...@@ -40,6 +41,10 @@ public final class UpdateResponse implements BackendResponse {
@Getter @Getter
private long updateCount; private long updateCount;
@Getter
@Setter
private String type;
public UpdateResponse() { public UpdateResponse() {
this(Collections.emptyList()); this(Collections.emptyList());
} }
......
...@@ -103,7 +103,7 @@ public final class PostgreSQLComBindExecutor implements QueryCommandExecutor { ...@@ -103,7 +103,7 @@ public final class PostgreSQLComBindExecutor implements QueryCommandExecutor {
} }
private PostgreSQLCommandCompletePacket createUpdatePacket(final UpdateResponse updateResponse) { private PostgreSQLCommandCompletePacket createUpdatePacket(final UpdateResponse updateResponse) {
return new PostgreSQLCommandCompletePacket(); return new PostgreSQLCommandCompletePacket(updateResponse.getType(), updateResponse.getUpdateCount());
} }
private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final QueryResponse queryResponse) { private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final QueryResponse queryResponse) {
......
...@@ -88,7 +88,7 @@ public final class PostgreSQLComQueryExecutor implements QueryCommandExecutor { ...@@ -88,7 +88,7 @@ public final class PostgreSQLComQueryExecutor implements QueryCommandExecutor {
} }
private PostgreSQLCommandCompletePacket createUpdatePacket(final UpdateResponse updateResponse) { private PostgreSQLCommandCompletePacket createUpdatePacket(final UpdateResponse updateResponse) {
return new PostgreSQLCommandCompletePacket(); return new PostgreSQLCommandCompletePacket(updateResponse.getType(), updateResponse.getUpdateCount());
} }
private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final QueryResponse queryResponse) { private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final QueryResponse queryResponse) {
......
...@@ -30,13 +30,22 @@ public final class PostgreSQLCommandCompletePacket implements PostgreSQLPacket { ...@@ -30,13 +30,22 @@ public final class PostgreSQLCommandCompletePacket implements PostgreSQLPacket {
@Getter @Getter
private final char messageType = PostgreSQLCommandPacketType.COMMAND_COMPLETE.getValue(); 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 @Override
public void write(final PostgreSQLPacketPayload payload) { public void write(final PostgreSQLPacketPayload payload) {
// TODO payload.writeStringNul(sqlCommand + " " + rowCount); payload.writeStringNul(sqlCommand + " " + rowCount);
payload.writeStringNul("");
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册