diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlCapability.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlCapability.java index 0701b6ac2f..b3d4793eeb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlCapability.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/MysqlCapability.java @@ -161,9 +161,13 @@ public class MysqlCapability { return (flags & Flag.CLIENT_DEPRECATE_EOF.getFlagBit()) != 0; } + public boolean isClientMultiStatements() { + return (flags & Flag.CLIENT_MULTI_STATEMENTS.getFlagBit()) != 0; + } + @Override public boolean equals(Object obj) { - if (obj == null || !(obj instanceof MysqlCapability)) { + if (!(obj instanceof MysqlCapability)) { return false; } if (flags != ((MysqlCapability) obj).flags) { 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 51911c0333..358e5d1a07 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 @@ -315,7 +315,13 @@ public abstract class ConnectProcessor { if (i != stmts.size() - 1) { ctx.getState().serverStatus |= MysqlServerStatusFlag.SERVER_MORE_RESULTS_EXISTS; if (ctx.getState().getStateType() != MysqlStateType.ERR) { - finalizeCommand(); + // here, doris do different with mysql. + // 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()) { + finalizeCommand(); + } } } } else if (connectType.equals(ConnectType.ARROW_FLIGHT_SQL)) {