This is an automated email from the ASF dual-hosted git repository.

yiguolei 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 22b9cc6eb2e [fix](mysql)fix mysql row buf (#38145)
22b9cc6eb2e is described below

commit 22b9cc6eb2e0ae59992eaed2369b023c4cb3c590
Author: amory <wangqian...@selectdb.com>
AuthorDate: Fri Jul 19 22:18:42 2024 +0800

    [fix](mysql)fix mysql row buf (#38145)
    
    ## Proposed changes
    backport: https://github.com/apache/doris/pull/37936
    Issue Number: close #xxx
    
    <!--Describe your changes.-->
---
 be/src/util/mysql_row_buffer.cpp                   |  5 ++-
 .../test_large_string_and_nested_type.out          |  4 ++
 .../test_large_string_and_nested_type.groovy       | 46 ++++++++++++++++++++++
 3 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/be/src/util/mysql_row_buffer.cpp b/be/src/util/mysql_row_buffer.cpp
index 3e4aa332cea..4823920508a 100644
--- a/be/src/util/mysql_row_buffer.cpp
+++ b/be/src/util/mysql_row_buffer.cpp
@@ -44,6 +44,9 @@ namespace doris {
 static uint8_t NEXT_TWO_BYTE = 252;
 static uint8_t NEXT_THREE_BYTE = 253;
 static uint8_t NEXT_EIGHT_BYTE = 254;
+// the EXTRA_RESERVE_BYTE wanner to make sure _pos pointer is always in _buf 
memory
+// used in reserve() for allocate current buffer
+static size_t EXTRA_RESERVE_BYTE = 16;
 
 // the first byte:
 // <= 250: length
@@ -133,7 +136,7 @@ int MysqlRowBuffer<is_binary_format>::reserve(int64_t size) 
{
         return 0;
     }
 
-    int64_t alloc_size = std::max(need_size, _buf_size * 2);
+    int64_t alloc_size = std::max(need_size, _buf_size * 2) + 
EXTRA_RESERVE_BYTE;
     char* new_buf = new char[alloc_size];
 
     size_t offset = _pos - _buf;
diff --git 
a/regression-test/data/datatype_p0/nested_types/corner_cases/test_large_string_and_nested_type.out
 
b/regression-test/data/datatype_p0/nested_types/corner_cases/test_large_string_and_nested_type.out
new file mode 100644
index 00000000000..a9e54877534
--- /dev/null
+++ 
b/regression-test/data/datatype_p0/nested_types/corner_cases/test_large_string_and_nested_type.out
@@ -0,0 +1,4 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql --
+1      
bbyNAEofVG2QVSEnKaKtNIZRA9BgH409IxsionnxaH5z70Ttfz5mobCvUA5xM7O6jPMLHEoSkngDfficKjKJISfl822rQlrYithBeQLVw1upYyXCTxtS2Nl0B3vi3tGeN4j6kPuhJoCQLLSivaHQrTgCCpV8ItDuQIoiRlkolabnjDHKShh3YracboXMHAYebiUxuaq3G3glxz09zXccRCgXzyDUIV4sJMO0GsE8JDo2QnzZpIcUvngS8uJhyIes0eIuPTAVFWQzYlEPopQKViLSzckSi86yIUnNABwFSTp6CTL651nNe9XifaXqQphZdnrLs7ngSJVexlSVLc2ECV1e1ZCP98L18gtgsG8P0LbUaTiWQULfSiMBtt1h2N5AjOVLQaHrkquETQDmyAhYipPfHxp9In6GFlpilAJQFpOxRe54xkiYkBMQAO4hTq0reOjDH71hqH1fWrRe1CYbjhbh1PUQlWUsjgEM9FwVGz
 [...]
+
diff --git 
a/regression-test/suites/datatype_p0/nested_types/corner_cases/test_large_string_and_nested_type.groovy
 
b/regression-test/suites/datatype_p0/nested_types/corner_cases/test_large_string_and_nested_type.groovy
new file mode 100644
index 00000000000..28a68681f7c
--- /dev/null
+++ 
b/regression-test/suites/datatype_p0/nested_types/corner_cases/test_large_string_and_nested_type.groovy
@@ -0,0 +1,46 @@
+import org.apache.commons.lang3.StringUtils
+
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_large_string_and_nested_type", "p0") {
+    sql """ DROP TABLE IF EXISTS test_large_string_and_nested_type"""
+    sql """ CREATE TABLE `test_large_string_and_nested_type` (
+              `col1` INT NULL,
+              `col2` VARCHAR(49053) NOT NULL,
+              `col3` MAP<TEXT,TEXT> NULL
+            ) ENGINE=OLAP
+            DUPLICATE KEY(`col1`)
+            COMMENT 'OLAP'
+            DISTRIBUTED BY HASH(`col1`) BUCKETS 1
+            PROPERTIES (
+            "replication_allocation" = "tag.location.default: 1",
+            "min_load_replica_num" = "-1",
+            "is_being_synced" = "false",
+            "storage_medium" = "hdd",
+            "storage_format" = "V2",
+            "inverted_index_storage_format" = "V2",
+            "light_schema_change" = "true",
+            "disable_auto_compaction" = "false",
+            "enable_single_replica_compaction" = "false",
+            "group_commit_interval_ms" = "10000",
+            "group_commit_data_bytes" = "134217728"
+            );
+            """
+    sql """INSERT INTO test_large_string_and_nested_type VALUES (1, 
'bbyNAEofVG2QVSEnKaKtNIZRA9BgH409IxsionnxaH5z70Ttfz5mobCvUA5xM7O6jPMLHEoSkngDfficKjKJISfl822rQlrYithBeQLVw1upYyXCTxtS2Nl0B3vi3tGeN4j6kPuhJoCQLLSivaHQrTgCCpV8ItDuQIoiRlkolabnjDHKShh3YracboXMHAYebiUxuaq3G3glxz09zXccRCgXzyDUIV4sJMO0GsE8JDo2QnzZpIcUvngS8uJhyIes0eIuPTAVFWQzYlEPopQKViLSzckSi86yIUnNABwFSTp6CTL651nNe9XifaXqQphZdnrLs7ngSJVexlSVLc2ECV1e1ZCP98L18gtgsG8P0LbUaTiWQULfSiMBtt1h2N5AjOVLQaHrkquETQDmyAhYipPfHxp9In6GFlpilAJ
 [...]
+    qt_sql """ select * from  test_large_string_and_nested_type """
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to