diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlChannel.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlChannel.java index 61216c0a45..aa640c57eb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlChannel.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlChannel.java @@ -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; diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java index 426074f32e..df7919e111 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlProto.java @@ -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); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java index 8682ef080c..f073a88fbf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java @@ -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(); } }