[fix](protocol) CLIENT_MULTI_STATEMENTS not used actually (#39308) (#39370)

pick #39308 to branch-2.1
This commit is contained in:
camby
2024-08-15 14:06:12 +08:00
committed by GitHub
parent 1accde9fb3
commit 265bf9d54f
3 changed files with 18 additions and 1 deletions

View File

@ -81,6 +81,9 @@ public class MysqlChannel implements BytesChannel {
// mysql flag CLIENT_DEPRECATE_EOF
private boolean clientDeprecatedEOF;
// mysql flag CLIENT_MULTI_STATEMENTS
private boolean clientMultiStatements;
private ConnectContext context;
protected MysqlChannel() {
@ -95,6 +98,14 @@ public class MysqlChannel implements BytesChannel {
return clientDeprecatedEOF;
}
public void setClientMultiStatements() {
clientMultiStatements = true;
}
public boolean clientMultiStatements() {
return clientMultiStatements;
}
public MysqlChannel(StreamConnection connection, ConnectContext context) {
Preconditions.checkNotNull(connection);
this.sequenceId = 0;

View File

@ -167,6 +167,12 @@ public class MysqlProto {
if (capability.isDeprecatedEOF()) {
context.getMysqlChannel().setClientDeprecatedEOF();
}
// we do not save client capability to context, so here we save CLIENT_MULTI_STATEMENTS to MysqlChannel
if (capability.isClientMultiStatements()) {
context.getMysqlChannel().setClientMultiStatements();
}
MysqlAuthPacket authPacket = new MysqlAuthPacket();
if (!authPacket.readFrom(handshakeResponse)) {
ErrorReport.report(ErrorCode.ERR_NOT_SUPPORTED_AUTH_MODE);

View File

@ -334,7 +334,7 @@ public abstract class ConnectProcessor {
// when client not request CLIENT_MULTI_STATEMENTS, mysql treat all query as
// single statement. Doris treat it with multi statement, but only return
// the last statement result.
if (getConnectContext().getCapability().isClientMultiStatements()) {
if (getConnectContext().getMysqlChannel().clientMultiStatements()) {
finalizeCommand();
}
}