From 056096014d6361da82ba982ffcc0d37043d21adf Mon Sep 17 00:00:00 2001 From: eldenmoon Date: Mon, 17 Feb 2025 10:55:01 +0800 Subject: [PATCH] add test --- .../org/apache/doris/qe/ConnectContext.java | 3 +- .../org/apache/doris/qe/StmtExecutor.java | 2 +- .../data/prepared_stmt_p0/prepared_stmt.out | 12 +++++-- .../prepared_stmt_p0/prepared_stmt.groovy | 31 +++++++++++++++---- 4 files changed, 37 insertions(+), 11 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 d83d0683d702fc..99fa9cc73888c8 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 @@ -117,7 +117,8 @@ public enum ConnectType { // set for http_stream protected volatile TUniqueId loadId; protected volatile long backendId; - protected int preparedStmtId = 0; + // range [Integer.MIN_VALUE, Integer.MAX_VALUE] + protected int preparedStmtId = Integer.MIN_VALUE; protected volatile LoadTaskInfo streamLoadInfo; protected volatile TUniqueId queryId = null; diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index cf9e91d6141bcf..53f34613de0ac9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -717,7 +717,7 @@ private void executeByNereids(TUniqueId queryId) throws Exception { } long stmtId = Config.prepared_stmt_start_id > 0 ? Config.prepared_stmt_start_id : context.getPreparedStmtId(); - logicalPlan = new PrepareCommand(String.valueOf(stmtId % Integer.MAX_VALUE), + logicalPlan = new PrepareCommand(String.valueOf(stmtId), logicalPlan, statementContext.getPlaceholders(), originStmt); } // when we in transaction mode, we only support insert into command and transaction command diff --git a/regression-test/data/prepared_stmt_p0/prepared_stmt.out b/regression-test/data/prepared_stmt_p0/prepared_stmt.out index 15473c1c57124f..9cadb98813af02 100644 --- a/regression-test/data/prepared_stmt_p0/prepared_stmt.out +++ b/regression-test/data/prepared_stmt_p0/prepared_stmt.out @@ -135,9 +135,6 @@ a -- !select24 -- 1 \N [{"id":"1", "name":"doris"}, {"id":"2", "name":"apache"}, null] \N --- !overflow_1 -- -1 - -- !overflow_2 -- 2 @@ -162,3 +159,12 @@ a -- !overflow_5 -- 5 +-- !overflow_6 -- +6 + +-- !overflow_6 -- +6 + +-- !overflow_6 -- +6 + diff --git a/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy b/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy index 3556879cfc35b5..ced7041e9fb772 100644 --- a/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy +++ b/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy @@ -305,28 +305,47 @@ suite("test_prepared_stmt", "nonConcurrent") { // test stmtId overflow def result2 = connect(user, password, url) { - def stmt_read1 = prepareStatement "select 1" - qe_overflow_1 stmt_read1 + // def stmt_read1 = prepareStatement "select 1" + // assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, stmt_read1.class) + // qe_overflow_1 stmt_read1 + // stmt_read1.close() // int max sql """admin set frontend config("prepared_stmt_start_id" = "2147483647");""" def stmt_read2 = prepareStatement "select 2" + assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, stmt_read2.class) qe_overflow_2 stmt_read2 qe_overflow_2 stmt_read2 + stmt_read2.close() // int max + 1 sql """admin set frontend config("prepared_stmt_start_id" = "2147483648");""" def stmt_read3 = prepareStatement "select 3" + // overflow throw NumberFormatExceptio and fallback to ClientPreparedStatement + assertEquals(com.mysql.cj.jdbc.ClientPreparedStatement, stmt_read3.class) qe_overflow_3 stmt_read3 qe_overflow_3 stmt_read3 - // uint max + 1 - sql """admin set frontend config("prepared_stmt_start_id" = "4294967296");""" + stmt_read3.close() + // int min + sql """admin set frontend config("prepared_stmt_start_id" = "2147483646");""" def stmt_read4 = prepareStatement "select 4" + assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, stmt_read4.class) qe_overflow_4 stmt_read4 qe_overflow_4 stmt_read4 + stmt_read4.close() - // set back - sql """admin set frontend config("prepared_stmt_start_id" = "-1");""" + sql """admin set frontend config("prepared_stmt_start_id" = "123");""" def stmt_read5 = prepareStatement "select 5" + assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, stmt_read5.class) qe_overflow_5 stmt_read5 qe_overflow_5 stmt_read5 + stmt_read5.close() + + // set back + sql """admin set frontend config("prepared_stmt_start_id" = "-1");""" + def stmt_read6 = prepareStatement "select 6" + assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, stmt_read6.class) + qe_overflow_6 stmt_read6 + qe_overflow_6 stmt_read6 + qe_overflow_6 stmt_read6 + stmt_read6.close() } }