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

Reply via email to