This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 9a07ae890a [fix](point query) Fix ArrayIndexOutOfBoundsException if
close a prepare stmt (#22237)
9a07ae890a is described below
commit 9a07ae890aa7c70d3b1d9a9a9b9ac2f6c858f913
Author: meiyi <[email protected]>
AuthorDate: Wed Jul 26 18:22:07 2023 +0800
[fix](point query) Fix ArrayIndexOutOfBoundsException if close a prepare
stmt (#22237)
---
.../src/main/java/org/apache/doris/qe/ConnectContext.java | 4 ++++
.../src/main/java/org/apache/doris/qe/ConnectProcessor.java | 13 +++++++++++--
.../src/main/java/org/apache/doris/qe/QueryState.java | 4 ++++
.../suites/point_query_p0/test_point_query.groovy | 1 +
4 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
index 02aec996bc..bc7b5273c3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
@@ -289,6 +289,10 @@ public class ConnectContext {
this.preparedStmtCtxs.put(stmtName, ctx);
}
+ public void removePrepareStmt(String stmtName) {
+ this.preparedStmtCtxs.remove(stmtName);
+ }
+
public PrepareStmtContext getPreparedStmt(String stmtName) {
return this.preparedStmtCtxs.get(stmtName);
}
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 734ec0edf3..7b4a60a5a1 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
@@ -180,6 +180,16 @@ public class ConnectProcessor {
ctx.getState().setOk();
}
+ private void handleStmtClose() {
+ packetBuf = packetBuf.order(ByteOrder.LITTLE_ENDIAN);
+ int stmtId = packetBuf.getInt();
+ LOG.debug("close stmt id: {}", stmtId);
+ ConnectContext.get().removePrepareStmt(String.valueOf(stmtId));
+ // No response packet is sent back to the client, see
+ //
https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_stmt_close.html
+ ctx.getState().setNoop();
+ }
+
private void debugPacket() {
byte[] bytes = packetBuf.array();
StringBuilder printB = new StringBuilder();
@@ -597,8 +607,7 @@ public class ConnectProcessor {
handleStmtReset();
break;
case COM_STMT_CLOSE:
- // TODO
- handleStmtReset();
+ handleStmtClose();
break;
default:
ctx.getState().setError(ErrorCode.ERR_UNKNOWN_COM_ERROR,
"Unsupported command(" + command + ")");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/QueryState.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/QueryState.java
index b075ccc984..3619a15876 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/QueryState.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/QueryState.java
@@ -69,6 +69,10 @@ public class QueryState {
return stateType;
}
+ public void setNoop() {
+ stateType = MysqlStateType.NOOP;
+ }
+
public void setEof() {
stateType = MysqlStateType.EOF;
}
diff --git a/regression-test/suites/point_query_p0/test_point_query.groovy
b/regression-test/suites/point_query_p0/test_point_query.groovy
index 2cf7cb4949..48cea40718 100644
--- a/regression-test/suites/point_query_p0/test_point_query.groovy
+++ b/regression-test/suites/point_query_p0/test_point_query.groovy
@@ -142,6 +142,7 @@ suite("test_point_query") {
stmt.setBigDecimal(2, new BigDecimal("120939.11130"))
stmt.setString(3, generateString(298))
qe_point_select stmt
+ stmt.close()
stmt = prepareStatement "select * from ${tableName} where k1 = 1235 and
k2 = ? and k3 = ?"
assertEquals(stmt.class, com.mysql.cj.jdbc.ServerPreparedStatement);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]