This is an automated email from the ASF dual-hosted git repository.
eldenmoon pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new c6ffa1f4eb2 [Fix](PreparedStatement) fix incorrect query result with
prepared statment (#47012)
c6ffa1f4eb2 is described below
commit c6ffa1f4eb27a297b8a0722986ca669cb99d7949
Author: lihangyu <[email protected]>
AuthorDate: Wed Jan 15 14:42:04 2025 +0800
[Fix](PreparedStatement) fix incorrect query result with prepared statment
(#47012)
cherry-pick from #46994
---
be/src/util/mysql_row_buffer.cpp | 1 +
.../nereids/trees/expressions/Placeholder.java | 10 ++++
.../data/point_query_p0/test_point_query.out | 12 ++---
.../data/prepared_stmt_p0/prepared_stmt.out | 30 ++++++++++++
.../suites/prepared_stmt_p0/prepared_stmt.groovy | 54 ++++++++++++++++++++++
5 files changed, 101 insertions(+), 6 deletions(-)
diff --git a/be/src/util/mysql_row_buffer.cpp b/be/src/util/mysql_row_buffer.cpp
index 638b58d5b46..7698eb4be64 100644
--- a/be/src/util/mysql_row_buffer.cpp
+++ b/be/src/util/mysql_row_buffer.cpp
@@ -115,6 +115,7 @@ void MysqlRowBuffer<is_binary_format>::open_dynamic_mode() {
// write length when dynamic mode close
_len_pos = (_pos - _buf);
_pos = _pos + 8;
+ _field_pos++;
}
_dynamic_mode++;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Placeholder.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Placeholder.java
index 3ce8cdb017f..27769750ad0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Placeholder.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Placeholder.java
@@ -17,6 +17,7 @@
package org.apache.doris.nereids.trees.expressions;
+import org.apache.doris.analysis.PlaceHolderExpr;
import org.apache.doris.catalog.MysqlColType;
import org.apache.doris.nereids.exceptions.UnboundException;
import org.apache.doris.nereids.trees.expressions.shape.LeafExpression;
@@ -91,4 +92,13 @@ public class Placeholder extends Expression implements
LeafExpression {
public MysqlColType getMysqlColType() {
return mysqlColType.get();
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof PlaceHolderExpr)) {
+ return false;
+ }
+ Placeholder other = (Placeholder) o;
+ return placeholderId == other.placeholderId;
+ }
}
diff --git a/regression-test/data/point_query_p0/test_point_query.out
b/regression-test/data/point_query_p0/test_point_query.out
index 4c3cab30f11..d5045685851 100644
--- a/regression-test/data/point_query_p0/test_point_query.out
+++ b/regression-test/data/point_query_p0/test_point_query.out
@@ -1,9 +1,9 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
-- !point_select --
-1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 \N [119181.111100000,
819019.119100000, null]
+1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 [119181.111100000, 819019.119100000,
null] \N
-- !point_select --
-1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 \N [119181.111100000,
819019.119100000, null]
+1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 [119181.111100000, 819019.119100000,
null] \N
-- !point_select --
1237 120939.111300000 a ddd laooq 2030-01-02
2020-01-01T12:36:38 22.822 7022-01-01 false 90696620686827832.374
[1.100000000, 2.200000000, 3.300000000, 4.400000000, 5.500000000] []
@@ -15,7 +15,7 @@
251 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 251.0 7022-01-01
true 90696620686827832.374 [11111.000000000] []
-- !point_select --
-252 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 252.0 7022-01-01
false 90696620686827832.374 \N [0.000000000]
+252 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 252.0 7022-01-01
false 90696620686827832.374 [0.000000000] \N
-- !point_select --
298 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 298.0 7022-01-01
true 90696620686827832.374 [] []
@@ -75,10 +75,10 @@
0 1 2 3
-- !point_select --
-1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 \N [119181.111100000,
819019.119100000, null]
+1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 [119181.111100000, 819019.119100000,
null] \N
-- !point_select --
-1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 \N [119181.111100000,
819019.119100000, null]
+1231 119291.110000000 ddd laooq \N 2020-01-01T12:36:38
\N 1022-01-01 \N 1.111 [119181.111100000, 819019.119100000,
null] \N
-- !point_select --
1237 120939.111300000 a ddd laooq 2030-01-02
2020-01-01T12:36:38 22.822 7022-01-01 false 90696620686827832.374
[1.100000000, 2.200000000, 3.300000000, 4.400000000, 5.500000000] []
@@ -90,7 +90,7 @@
251 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 251.0 7022-01-01
true 90696620686827832.374 [11111.000000000] []
-- !point_select --
-252 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 252.0 7022-01-01
false 90696620686827832.374 \N [0.000000000]
+252 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 252.0 7022-01-01
false 90696620686827832.374 [0.000000000] \N
-- !point_select --
298 120939.111300000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
laooq 2030-01-02 2020-01-01T12:36:38 298.0 7022-01-01
true 90696620686827832.374 [] []
diff --git a/regression-test/data/prepared_stmt_p0/prepared_stmt.out
b/regression-test/data/prepared_stmt_p0/prepared_stmt.out
index 257a5c62203..052094cd7d6 100644
--- a/regression-test/data/prepared_stmt_p0/prepared_stmt.out
+++ b/regression-test/data/prepared_stmt_p0/prepared_stmt.out
@@ -105,3 +105,33 @@ a
1236 100320.111390000 laa ddd Will we ignore LIMIT ?,?
2021-01-01 2020-01-01T12:36:38 2.7692 6022-01-01 [null]
1237 120939.111300000 a ddd Will we ignore LIMIT ?,?
2021-01-01 2020-01-01T12:36:38 22.822 7022-01-01 ["2025-01-01
11:30:38"]
+-- !select17 --
+3
+
+-- !select18 --
+1 [1, 2, 3] \N ["1"] \N \N [1.111]
+
+-- !select18_1 --
+1 [1, 2, 3] \N
+
+-- !select18_2 --
+1 [1, null, 3] \N [null] \N \N [null, null]
+
+-- !select19 --
+1 {"a":1} \N
+
+-- !select20 --
+1 {"col1":"a", "col2":1, "col3":"doris", "col4":"aaaaa", "col5":1.32}
\N
+
+-- !select21 --
+1 [[1, 2], [3, 4]] \N
+
+-- !select22 --
+1 {"a":{"b":2}} \N
+
+-- !select23 --
+1 {"col1":"name", "col2":"doris", "col3":"values", "col4":[1, 2, 3]}
\N
+
+-- !select24 --
+1 \N [{"id":"1", "name":"doris"}, {"id":"2", "name":"apache"}, null]
\N
+
diff --git a/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy
b/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy
index a64bd017564..53b83ed7335 100644
--- a/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy
+++ b/regression-test/suites/prepared_stmt_p0/prepared_stmt.groovy
@@ -89,6 +89,7 @@ suite("test_prepared_stmt", "nonConcurrent") {
stmt_read2.close()
sql "DROP TABLE IF EXISTS mytable1"
+ sql "DROP TABLE IF EXISTS mytable2"
sql """
CREATE TABLE mytable1
(
@@ -255,5 +256,58 @@ suite("test_prepared_stmt", "nonConcurrent") {
sql """set enable_server_side_prepared_statement = false"""
def stmt_insert = prepareStatement "insert into mytable1 values(?, ?,
?, ?)"
assertEquals(stmt_insert.class,
com.mysql.cj.jdbc.ClientPreparedStatement);
+
+ // test prepared with between, test placeholder equal
+ sql """insert into mytable2 values(3,1,'user1',10);"""
+ stmt_read = prepareStatement "SELECT COUNT() from mytable2 WHERE
siteid between ? and ?"
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ stmt_read.setInt(1, 0)
+ stmt_read.setInt(2, 3)
+ qe_select17 stmt_read
+
+
+ // test array1
+ stmt_read = prepareStatement """SELECT 1, [1, 2, 3], null, ["1"],
null, null, [1.111]"""
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select18 stmt_read
+
+ // test array2
+ stmt_read = prepareStatement "SELECT 1, [1, 2, 3], null"
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select18_1 stmt_read
+
+ // test array3
+ stmt_read = prepareStatement """SELECT 1, [1, null, 3], null, [null],
null, null, [null, null]"""
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select18_2 stmt_read
+
+ // test map
+ stmt_read = prepareStatement """SELECT 1, {"a" : 1}, null"""
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select19 stmt_read
+
+ // test struct
+ stmt_read = prepareStatement """SELECT 1, struct('a', 1, 'doris',
'aaaaa', 1.32), null"""
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select20 stmt_read
+
+ // test nested array
+ stmt_read = prepareStatement("""SELECT 1, [[1, 2], [3, 4]], null""")
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select21 stmt_read
+
+ // test nested map
+ stmt_read = prepareStatement("""SELECT 1, {"a": {"b": 2}}, null""")
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select22 stmt_read
+
+ // test struct with array
+ stmt_read = prepareStatement("""SELECT 1, struct('name', 'doris',
'values', [1, 2, 3]), null""")
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select23 stmt_read
+
+ stmt_read = prepareStatement("""SELECT 1, null, [{'id': 1, 'name' :
'doris'}, {'id': 2, 'name': 'apache'}, null], null""")
+ assertEquals(com.mysql.cj.jdbc.ServerPreparedStatement,
stmt_read.class)
+ qe_select24 stmt_read
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]