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