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

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 60c3de7d7d2 [fix](mysql-buffer) fix special buffer size with nested 
type (#45126)
60c3de7d7d2 is described below

commit 60c3de7d7d2cbf66a4eb05978aba29c5191f5bb4
Author: amory <wangqian...@selectdb.com>
AuthorDate: Mon Dec 16 14:52:36 2024 +0800

    [fix](mysql-buffer) fix special buffer size with nested type (#45126)
    
    ### What problem does this PR solve?
    in special table with sepcial data insert into
    we could make sql with mysql return Malformed packet
    ```
    mysql> select * from use1r;
    ERROR 2027 (HY000): Malformed packet
    ```
    this pr can resolve this problem
---
 be/src/util/mysql_row_buffer.cpp                   |   6 +-
 .../test_special_buffer_before_nested.out          |   4 +
 .../test_special_buffer_before_nested.groovy       | 181 +++++++++++++++++++++
 3 files changed, 190 insertions(+), 1 deletion(-)

diff --git a/be/src/util/mysql_row_buffer.cpp b/be/src/util/mysql_row_buffer.cpp
index 3e20a2d9de7..4fd7de13753 100644
--- a/be/src/util/mysql_row_buffer.cpp
+++ b/be/src/util/mysql_row_buffer.cpp
@@ -107,7 +107,11 @@ MysqlRowBuffer<is_binary_format>::~MysqlRowBuffer() {
 template <bool is_binary_format>
 void MysqlRowBuffer<is_binary_format>::open_dynamic_mode() {
     if (!_dynamic_mode) {
-        *_pos++ = NEXT_EIGHT_BYTE;
+        // if _pos now exactly at the end of _buf memory,
+        // we should reserve 1 byte for _dynamic_mode flag byte to avoid *pos 
= 254
+        // cause _dynamic_mode flag byte be overwritten
+        reserve(1);
+        *_pos++ = NEXT_EIGHT_BYTE; // *_pos = 254 ; _pos++
         // write length when dynamic mode close
         _len_pos = (_pos - _buf);
         _pos = _pos + 8;
diff --git 
a/regression-test/data/datatype_p0/nested_types/corner_cases/test_special_buffer_before_nested.out
 
b/regression-test/data/datatype_p0/nested_types/corner_cases/test_special_buffer_before_nested.out
new file mode 100644
index 00000000000..8bc27332c19
--- /dev/null
+++ 
b/regression-test/data/datatype_p0/nested_types/corner_cases/test_special_buffer_before_nested.out
@@ -0,0 +1,4 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql --
+71111112       2024-06-22T00:55:50     prem    \N      Sarkar sultan   \N      
amorynanwaas...@gmail.com       en      1       PK      \N      Asia/Karachi    
\N      
https://aaa.dddddd.cccc/asgte/bbbccc/1997-11-18/abcdefghigklmnopk0f4c9cbff3b2aac.png
    1       \N      \N      \N      \N      1       \N      21      \N      \N  
    \N      \N      1       \N      \N      \N      R+F-M-  \N      \N      \N  
    \N      \N      \N      \N      \N      wlg     \N      Google  \N      \N  
    \N      bb851bcb725b4fc8b2495bde4898e5f5        2024-12-01T11:17:42     \N  
    PK      \N      2024-06-24T12:52:56     \N      google  \N      0       \N  
    20      1       ["154.81.244.112", "154.80.91.113", "154.80.72.110", 
"154.80.73.110", "103.131.212.96", "154.80. [...]
+
diff --git 
a/regression-test/suites/datatype_p0/nested_types/corner_cases/test_special_buffer_before_nested.groovy
 
b/regression-test/suites/datatype_p0/nested_types/corner_cases/test_special_buffer_before_nested.groovy
new file mode 100644
index 00000000000..b7a8572b898
--- /dev/null
+++ 
b/regression-test/suites/datatype_p0/nested_types/corner_cases/test_special_buffer_before_nested.groovy
@@ -0,0 +1,181 @@
+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_special_buffer_before_nested", "p0") {
+    // note: this column order cannot be changed which with data should 
trigger mysql row buffer exactly reach 4096 before
+    // open_dynamic_mode to write array
+    sql """ DROP TABLE IF EXISTS test_special_buffer_before_nested """
+    sql """ CREATE TABLE `test_special_buffer_before_nested` (
+              `account_id` bigint NOT NULL,
+              `register_time` datetime NULL,
+              `nickname` varchar(1024) NULL,
+              `facebook_name` varchar(1024) NULL,
+              `google_name` varchar(1024) NULL,
+              `twitter_name` varchar(1024) NULL,
+              `email` varchar(1024) NULL,
+              `language` varchar(1024) NULL,
+              `gender` int NULL,
+              `country` varchar(1024) NULL,
+              `phone` varchar(1024) NULL,
+              `timezone` varchar(1024) NULL,
+              `sponsor` varchar(1024) NULL,
+              `avatar` varchar(65533) NULL,
+              `certification` int NULL,
+              `suspicious_user` int NULL,
+              `audit_user` int NULL,
+              `tt_audit_user` int NULL,
+              `auto_invite_bind` int NULL,
+              `third_party_payment` int NULL,
+              `official_payment` int NULL,
+              `user_security_level` int NULL,
+              `vip_end_time` datetime NULL,
+              `agent` int NULL,
+              `user_group_level` int NULL,
+              `nearby_toggle` int NULL,
+              `open_msg_notification` int NULL,
+              `recall_time` datetime NULL,
+              `first_recharge_time` datetime NULL,
+              `total_recharge_amount` double NULL,
+              `user_rfm_level` varchar(1024) NULL,
+              `recharge_credit_amount` double NULL,
+              `recharge_credit_count` int NULL,
+              `recharge_credit_no_callback_count` int NULL,
+              `total_withdraw_amount` double NULL,
+              `withdraw_list` array<int> NULL,
+              `user_charm_level` int NULL,
+              `user_charm_history_level` int NULL,
+              `user_auto_greetings_status` int NULL,
+              `channel` varchar(1024) NULL,
+              `bundle_id` varchar(1024) NULL,
+              `platform` varchar(1024) NULL,
+              `campaign_group_name` varchar(1024) NULL,
+              `similar_group_id` varchar(1024) NULL,
+              `cancel_account_time` datetime NULL,
+              `log_seq` varchar(1024) NULL,
+              `date_time` datetime NULL,
+              `time_millis` bigint NULL,
+              `first_country` varchar(1024) NULL,
+              `invite_time` datetime NULL,
+              `certification_time` datetime NULL,
+              `certification_url` varchar(65533) NULL,
+              `login_type` varchar(1024) NULL,
+              `vip_start_time` datetime NULL,
+              `vip_type` int NULL,
+              `agent_time` datetime NULL,
+              `recall_count` int NULL,
+              `wake_count` int NULL,
+              `client_ips` array<varchar(1024)> NULL,
+              `client_ip` varchar(1024) NULL,
+              `first_client_ip` varchar(1024) NULL,
+              `device_ids` array<varchar(1024)> NULL,
+              `device_id` varchar(1024) NULL,
+              `first_device_id` varchar(1024) NULL,
+              `phone_model` varchar(1024) NULL,
+              `os_version` varchar(1024) NULL,
+              `mcc_mnc` varchar(1024) NULL,
+              `sys_region` varchar(1024) NULL,
+              `carrier_region` varchar(1024) NULL,
+              `cloud_id` varchar(1024) NULL,
+              `device_name` varchar(1024) NULL,
+              `first_channel` varchar(1024) NULL,
+              `version` varchar(1024) NULL,
+              `first_version` varchar(1024) NULL,
+              `app_name` varchar(1024) NULL,
+              `first_app_name` varchar(1024) NULL,
+              `ad_campaign` varchar(65533) NULL,
+              `last_ad_campaign` varchar(65533) NULL,
+              `ad_campaign_id` varchar(65533) NULL,
+              `last_ad_campaign_id` varchar(65533) NULL,
+              `campaign` varchar(65533) NULL,
+              `last_campaign` varchar(65533) NULL,
+              `campaign_time` datetime NULL,
+              `last_campaign_time` datetime NULL,
+              `ad_name` varchar(65533) NULL,
+              `last_ad_name` varchar(65533) NULL,
+              `ad_advertiser` varchar(1024) NULL,
+              `last_ad_advertiser` varchar(1024) NULL,
+              `ad_advertiser_team` varchar(1024) NULL,
+              `last_ad_advertiser_team` varchar(1024) NULL,
+              `ad_app` varchar(1024) NULL,
+              `last_ad_app` varchar(1024) NULL,
+              `ad_group` varchar(65533) NULL,
+              `last_ad_group` varchar(65533) NULL,
+              `adid` varchar(65533) NULL,
+              `last_adid` varchar(65533) NULL,
+              `creative` varchar(65533) NULL,
+              `last_creative` varchar(65533) NULL,
+              `match_type` varchar(1024) NULL,
+              `last_match_type` varchar(1024) NULL,
+              `network` varchar(1024) NULL,
+              `last_network` varchar(1024) NULL,
+              `ad_country` varchar(1024) NULL,
+              `last_ad_country` varchar(1024) NULL,
+              `last_platform` varchar(1024) NULL,
+              `ad_platform` varchar(1024) NULL,
+              `last_ad_platform` varchar(1024) NULL,
+              `install_begin_time` datetime NULL,
+              `last_install_begin_time` datetime NULL,
+              `installed_at` datetime NULL,
+              `last_installed_at` datetime NULL,
+              `install_finish_time` datetime NULL,
+              `last_install_finish_time` datetime NULL,
+              `click_time` datetime NULL,
+              `last_click_time` datetime NULL,
+              `referral_time` datetime NULL,
+              `last_referral_time` datetime NULL,
+              `registration_cost` double NULL,
+              `abtest_sub` array<int> NULL,
+              `abtest_id` array<int> NULL,
+              `block_level_upgrade` int NULL,
+              `passcard_grade` int NULL,
+              `passcard_grade_end_time` datetime NULL,
+              `passcard_pay` array<datetime> NULL,
+              `passcard_number` datetime NULL,
+              `vcast_grade_charm` int NULL,
+              `vcast_grade_wealth` int NULL,
+              `im_chat_violation` int NULL,
+              `process_time` datetime NULL DEFAULT CURRENT_TIMESTAMP
+            ) ENGINE=OLAP
+            UNIQUE KEY(`account_id`)
+            DISTRIBUTED BY HASH(`account_id`) BUCKETS 64
+            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" = "V1",
+            "enable_unique_key_merge_on_write" = "true",
+            "light_schema_change" = "true",
+            "store_row_column" = "true",
+            "row_store_page_size" = "16384",
+            "disable_auto_compaction" = "false",
+            "enable_single_replica_compaction" = "false",
+            "enable_mow_light_delete" = "false"
+            );
+            """
+    sql """ truncate table test_special_buffer_before_nested """
+    sql """ insert into test_special_buffer_before_nested 
values(71111112,'2024-06-22 00:55:50','prem',NULL,'Sarkar 
sultan',NULL,'amorynanwaas...@gmail.com','en',1,'PK',NULL,'Asia/Karachi',NULL,'https://aaa.dddddd.cccc/asgte/bbbccc/1997-11-18/abcdefghigklmnopk0f4c9cbff3b2aac.png',1
+            
,NULL,NULL,NULL,NULL,1,NULL,21,NULL,NULL,NULL,NULL,1,NULL,NULL,NULL,'R+F-M-',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'wlg',NULL,'Google',NULL,NULL,NULL,'bb851bcb725b4fc8b2495bde4898e5f5','2024-12-01
 11:17:42',NULL,'PK',NULL,'2024-06-24 12:52:56',
+            NULL,'google',NULL,0,NULL,20,1,'["154.81.244.112", 
"154.80.91.113", "154.80.72.110", "154.80.73.110", "103.131.212.96", 
"154.80.64.213", "103.131.212.19", "154.80.116.29", "154.80.117.215", 
"103.131.212.45", "154.80.115.43", "154.80.78.149", "154.80.65.149", 
"154.80.83.110", "154.80.67.46", "154.81.243.198", "154.80.83.118", 
"154.81.244.140", "154.80.105.177", "154.80.123.254", "154.80.99.141", 
"154.80.109.50", "154.80.100.66", "103.131.213.174", "154.80.122.66", 
"103.131.213 [...]
+            
'154.80.118.95','154.81.244.112','["7e5007a7-09e3-4ffa-888b-4487a654c39b"]','7e5007a7-09e3-4ffa-888b-4487a654c39b','7e5007a7-09e3-4ffa-888b-4487a654c39b','vivo_vivo%2B1814','Android_Android_8.1.0','41001','US',NULL,NULL,NULL,'wlg','3.4.6','3.3.5','com.video.welive','com.video.welive',
+            
'EN_wlg_zt_ray_gg_ac_2.5_Sup_all_240409_vo',NULL,'21174044377',NULL,NULL,NULL,NULL,NULL,'b3202c4487fe9728e68d748350b84f86',NULL,'ray',NULL,'zt',NULL,'wlg',NULL,'mix-EN-0409',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EN',NULL,NULL,'Google',
+            NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'[59, 
4]','[17, 1]',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,'2024-12-02 09:50:52'); """
+    qt_sql """ select * from  test_special_buffer_before_nested """
+}


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

Reply via email to