From 1e304bda93b8ac280a126d1609c11189f4162cd9 Mon Sep 17 00:00:00 2001 From: meiyi Date: Wed, 24 Jul 2024 09:57:08 +0800 Subject: [PATCH] [fix](group commit) Fix prepare stmt setNull return too many filtered rows error (#38262) When use prepare statement and setNull to do group commit: ``` stmt.setString(3, "WAGERNO"); stmt.setNull(4, Types.INTEGER); ``` we may get `too many rows filtered` rows. --- .../src/main/java/org/apache/doris/qe/StmtExecutor.java | 4 ++++ .../insert_p0/insert_group_commit_with_prepare_stmt.groovy | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) 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 840d9e18992fff..181a7d3c7bc758 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 @@ -47,6 +47,7 @@ import org.apache.doris.analysis.NullLiteral; import org.apache.doris.analysis.OutFileClause; import org.apache.doris.analysis.PartitionNames; +import org.apache.doris.analysis.PlaceHolderExpr; import org.apache.doris.analysis.PrepareStmt; import org.apache.doris.analysis.PrepareStmt.PreparedType; import org.apache.doris.analysis.Queriable; @@ -351,6 +352,9 @@ public static InternalService.PDataRow getRowStringValue(List cols, } InternalService.PDataRow.Builder row = InternalService.PDataRow.newBuilder(); for (Expr expr : cols) { + if (expr instanceof PlaceHolderExpr) { + expr = ((PlaceHolderExpr) expr).getLiteral(); + } if (!expr.isLiteralOrCastExpr()) { throw new UserException( "do not support non-literal expr in transactional insert operation: " + expr.toSql()); diff --git a/regression-test/suites/insert_p0/insert_group_commit_with_prepare_stmt.groovy b/regression-test/suites/insert_p0/insert_group_commit_with_prepare_stmt.groovy index e686b752db573b..6e05513a8d648b 100644 --- a/regression-test/suites/insert_p0/insert_group_commit_with_prepare_stmt.groovy +++ b/regression-test/suites/insert_p0/insert_group_commit_with_prepare_stmt.groovy @@ -148,8 +148,6 @@ suite("insert_group_commit_with_prepare_stmt") { ); """ - sql """ set enable_insert_strict = false; """ - // 1. insert into def insert_stmt = prepareStatement """ INSERT INTO ${table} VALUES(?, ?, ?) """ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, insert_stmt.class) @@ -212,8 +210,6 @@ suite("insert_group_commit_with_prepare_stmt") { ); """ - sql """ set enable_insert_strict = false; """ - // 1. insert into def insert_stmt = prepareStatement """ INSERT INTO ${table} VALUES(?, ?, ?) """ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement, insert_stmt.class)