This is an automated email from the ASF dual-hosted git repository. xuyang 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 88e08a92d8 [fix](array-type) fix the wrong result when import array element with double quotes (#12786) 88e08a92d8 is described below commit 88e08a92d839b795a4cfd44615b27f1a279e3c25 Author: carlvinhust2012 <huchengha...@126.com> AuthorDate: Thu Oct 13 23:07:19 2022 +0800 [fix](array-type) fix the wrong result when import array element with double quotes (#12786) Co-authored-by: hucheng01 <huchen...@baidu.com> --- be/src/vec/data_types/data_type_array.cpp | 23 ++++++++++++++++++---- .../data/load_p0/broker_load/simple_array.data | 4 ++-- .../data/load_p0/broker_load/test_array_load.out | 4 ++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/be/src/vec/data_types/data_type_array.cpp b/be/src/vec/data_types/data_type_array.cpp index 4a0c1ae049..f859dac193 100644 --- a/be/src/vec/data_types/data_type_array.cpp +++ b/be/src/vec/data_types/data_type_array.cpp @@ -221,12 +221,27 @@ Status DataTypeArray::from_string(ReadBuffer& rb, IColumn* column) const { continue; } - ReadBuffer read_buffer(rb.position(), nested_str_len); + // Note: here we will trim elements, such as + // ["2020-09-01", "2021-09-01" , "2022-09-01" ] ==> ["2020-09-01","2021-09-01","2022-09-01"] + size_t begin_pos = 0; + size_t end_pos = nested_str_len - 1; + while (begin_pos < end_pos) { + if (isspace(*(rb.position() + begin_pos))) { + ++begin_pos; + } else if (isspace(*(rb.position() + end_pos))) { + --end_pos; + } else { + break; + } + } + // dispose the case of ["123"] or ['123'] - auto begin_char = *rb.position(); - auto end_char = *(rb.position() + nested_str_len - 1); + ReadBuffer read_buffer(rb.position(), nested_str_len); + auto begin_char = *(rb.position() + begin_pos); + auto end_char = *(rb.position() + end_pos); if (begin_char == end_char && (begin_char == '"' || begin_char == '\'')) { - read_buffer = ReadBuffer(rb.position() + 1, nested_str_len - 2); + int64_t length = end_pos - begin_pos - 1; + read_buffer = ReadBuffer(rb.position() + begin_pos + 1, (length > 0 ? length : 0)); } auto st = nested->from_string(read_buffer, &nested_column); diff --git a/regression-test/data/load_p0/broker_load/simple_array.data b/regression-test/data/load_p0/broker_load/simple_array.data index 88eb710915..614f610f16 100644 --- a/regression-test/data/load_p0/broker_load/simple_array.data +++ b/regression-test/data/load_p0/broker_load/simple_array.data @@ -1,5 +1,5 @@ -1/[1,2,3,4,5]/[32767,32768,32769]/[65534,65535,65536]/["a","b","c","d","e"]/["hello","world"]/["1991-01-01"]/["1991-01-01 00:00:00"]/[0.33,0.67]/[3.1415926,0.878787878]/[1,1.2,1.3] -2/[1,2,3,4,5]/[32767,32768,32769]/[65534,65535,65536]/["a","b","c","d","e"]/["hello","world"]/\N/\N/\N/\N/[1,\N,1.3] +1/[1,2,3,4,5]/[32767,32768,32769]/[65534,65535,65536]/["a","b","c","d","e"]/["hello","world"]/["1991-01-01", "1992-02-02", "1993-03-03"]/["1991-01-01 00:00:00"]/[0.33,0.67]/[3.1415926,0.878787878]/[1,1.2,1.3] +2/[1,2,3,4,5]/[32767,32768,32769]/[65534,65535,65536]/["a","b","c","d","e"]/["hello","world"]/['1991-01-01', '1992-02-02', '1993-03-03']/\N/\N/\N/[1,\N,1.3] 3/\N/\N/\N/\N/\N/\N/\N/\N/\N/\N 4/1,2,3,4,5/\N/\N/\N/\N/\N/\N/\N/\N/\N 5/[1,2,3,4,5/\N/\N/\N/\N/\N/\N/\N/\N/\N \ No newline at end of file diff --git a/regression-test/data/load_p0/broker_load/test_array_load.out b/regression-test/data/load_p0/broker_load/test_array_load.out index 0dfbd74d4f..c926e9534b 100644 --- a/regression-test/data/load_p0/broker_load/test_array_load.out +++ b/regression-test/data/load_p0/broker_load/test_array_load.out @@ -32,8 +32,8 @@ 100 [1, 2, 3] [32767, 32768, 32769] [65534, 65535, 65536] ['a', 'b', 'c'] ['hello', 'world'] [2022-07-13] [2022-07-13 12:30:00] [0.33, 0.67] [3.1415926, 0.878787878] [4, 5.5, 6.67] -- !select -- -1 [1, 2, 3, 4, 5] [32767, 32768, 32769] [65534, 65535, 65536] ['a', 'b', 'c', 'd', 'e'] ['hello', 'world'] [1991-01-01] [1991-01-01 00:00:00] [0.33, 0.67] [3.1415926, 0.878787878] [1, 1.2, 1.3] -2 [1, 2, 3, 4, 5] [32767, 32768, 32769] [65534, 65535, 65536] ['a', 'b', 'c', 'd', 'e'] ['hello', 'world'] \N \N \N \N [1, NULL, 1.3] +1 [1, 2, 3, 4, 5] [32767, 32768, 32769] [65534, 65535, 65536] ['a', 'b', 'c', 'd', 'e'] ['hello', 'world'] [1991-01-01, 1992-02-02, 1993-03-03] [1991-01-01 00:00:00] [0.33, 0.67] [3.1415926, 0.878787878] [1, 1.2, 1.3] +2 [1, 2, 3, 4, 5] [32767, 32768, 32769] [65534, 65535, 65536] ['a', 'b', 'c', 'd', 'e'] ['hello', 'world'] [1991-01-01, 1992-02-02, 1993-03-03] \N \N \N [1, NULL, 1.3] 3 \N \N \N \N \N \N \N \N \N \N 100 [1, 2, 3] [32767, 32768, 32769] [65534, 65535, 65536] ['a', 'b', 'c'] ['hello', 'world'] [2022-07-13] [2022-07-13 12:30:00] [0.33, 0.67] [3.1415926, 0.878787878] [4, 5.5, 6.67] --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org