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]

Reply via email to