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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new b8b7523df35 [FIX](serde) fix map/array deserialize string with quote 
pair (#24808)
b8b7523df35 is described below

commit b8b7523df3531431840008fbc0183fb63fa255f0
Author: amory <[email protected]>
AuthorDate: Sat Sep 23 01:12:20 2023 +0800

    [FIX](serde) fix map/array deserialize string with quote pair (#24808)
---
 .../vec/data_types/serde/data_type_array_serde.cpp |   9 +-
 .../vec/data_types/serde/data_type_map_serde.cpp   |   9 +-
 .../stream_load/test_map_load_and_function.out     | 102 ++++++++++-----------
 3 files changed, 67 insertions(+), 53 deletions(-)

diff --git a/be/src/vec/data_types/serde/data_type_array_serde.cpp 
b/be/src/vec/data_types/serde/data_type_array_serde.cpp
index 727d8234ac1..c7023b37852 100644
--- a/be/src/vec/data_types/serde/data_type_array_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_array_serde.cpp
@@ -109,10 +109,17 @@ Status 
DataTypeArraySerDe::deserialize_one_cell_from_json(IColumn& column, Slice
     slices.emplace_back(slice);
     size_t slice_size = slice.size;
     // pre add total slice can reduce lasted element check.
+    char quote_char = 0;
     for (int idx = 0; idx < slice_size; ++idx) {
         char c = slice[idx];
         if (c == '"' || c == '\'') {
-            has_quote = !has_quote;
+            if (!has_quote) {
+                quote_char = c;
+                has_quote = !has_quote;
+            } else if (has_quote && quote_char == c) {
+                quote_char = 0;
+                has_quote = !has_quote;
+            }
         } else if (!has_quote && (c == '[' || c == '{')) {
             ++nested_level;
         } else if (!has_quote && (c == ']' || c == '}')) {
diff --git a/be/src/vec/data_types/serde/data_type_map_serde.cpp 
b/be/src/vec/data_types/serde/data_type_map_serde.cpp
index 68c41a8d429..d91104c01cf 100644
--- a/be/src/vec/data_types/serde/data_type_map_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_map_serde.cpp
@@ -217,10 +217,17 @@ Status 
DataTypeMapSerDe::deserialize_one_cell_from_json(IColumn& column, Slice&
     bool key_added = false;
     int idx = 0;
     int elem_deserialized = 0;
+    char quote_char = 0;
     for (; idx < slice_size; ++idx) {
         char c = slice[idx];
         if (c == '"' || c == '\'') {
-            has_quote = !has_quote;
+            if (!has_quote) {
+                quote_char = c;
+                has_quote = !has_quote;
+            } else if (has_quote && quote_char == c) {
+                quote_char = 0;
+                has_quote = !has_quote;
+            }
         } else if (c == '\\' && idx + 1 < slice_size) { //escaped
             ++idx;
         } else if (!has_quote && (c == '[' || c == '{')) {
diff --git 
a/regression-test/data/load_p0/stream_load/test_map_load_and_function.out 
b/regression-test/data/load_p0/stream_load/test_map_load_and_function.out
index 4b742ac8532..4b61206fae3 100644
--- a/regression-test/data/load_p0/stream_load/test_map_load_and_function.out
+++ b/regression-test/data/load_p0/stream_load/test_map_load_and_function.out
@@ -10,7 +10,7 @@
 8      {}
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}
 10     {}
-11     {""k1'":4, "k2":400}
+11     {}
 12     {"k3":23, NULL:20, "k4":NULL}
 13     {"null":1}
 15     \N
@@ -27,7 +27,7 @@
 8      \N
 9      \N
 10     \N
-11     400
+11     \N
 12     \N
 13     \N
 15     \N
@@ -46,7 +46,7 @@
 8      {}
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}
 10     {}
-11     {""k1'":4, "k2":400}
+11     {}
 12     {"k3":23, NULL:20, "k4":NULL}
 13     {"null":1}
 15     \N
@@ -125,7 +125,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -144,7 +144,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    400
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -163,7 +163,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -182,7 +182,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -201,7 +201,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -220,7 +220,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -239,7 +239,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -258,7 +258,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -277,7 +277,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   2
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -296,7 +296,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   90
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -315,7 +315,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      1
 15     \N      \N
@@ -334,7 +334,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -353,7 +353,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   20
 13     {"null":1}      \N
 15     \N      \N
@@ -372,7 +372,7 @@ k22
 8      {}      \N
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   \N
 10     {}      \N
-11     {""k1'":4, "k2":400}    \N
+11     {}      \N
 12     {"k3":23, NULL:20, "k4":NULL}   \N
 13     {"null":1}      \N
 15     \N      \N
@@ -394,7 +394,7 @@ k22
 8      {}      0
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   3
 10     {}      0
-11     {""k1'":4, "k2":400}    2
+11     {}      0
 12     {"k3":23, NULL:20, "k4":NULL}   3
 13     {"null":1}      1
 15     \N      \N
@@ -428,7 +428,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -447,7 +447,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    true
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -466,7 +466,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -485,7 +485,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -504,7 +504,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -523,7 +523,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -542,7 +542,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -561,7 +561,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -580,7 +580,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -599,7 +599,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -618,7 +618,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      true
 15     \N      \N
@@ -637,7 +637,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -656,7 +656,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   true
 13     {"null":1}      false
 15     \N      \N
@@ -675,7 +675,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -706,7 +706,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   true
 13     {"null":1}      false
 15     \N      \N
@@ -725,7 +725,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   true
 13     {"null":1}      false
 15     \N      \N
@@ -744,7 +744,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -763,7 +763,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -782,7 +782,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -801,7 +801,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -820,7 +820,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    true
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -839,7 +839,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -858,7 +858,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -877,7 +877,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -896,7 +896,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -915,7 +915,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -934,7 +934,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      true
 15     \N      \N
@@ -953,7 +953,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   true
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -972,7 +972,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -991,7 +991,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   false
 13     {"null":1}      false
 15     \N      \N
@@ -1010,7 +1010,7 @@ false
 8      {}      false
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   false
 10     {}      false
-11     {""k1'":4, "k2":400}    false
+11     {}      false
 12     {"k3":23, NULL:20, "k4":NULL}   true
 13     {"null":1}      false
 15     \N      \N
@@ -1032,7 +1032,7 @@ false
 8      {}      []
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   ["  1,amy  ", " k2 ", " k7 "]
 10     {}      []
-11     {""k1'":4, "k2":400}    [""k1'", "k2"]
+11     {}      []
 12     {"k3":23, NULL:20, "k4":NULL}   ["k3", NULL, "k4"]
 13     {"null":1}      ["null"]
 15     \N      \N
@@ -1054,7 +1054,7 @@ false
 8      {}      []
 9      {"  1,amy  ":2, " k2 ":90, " k7 ":33}   [2, 90, 33]
 10     {}      []
-11     {""k1'":4, "k2":400}    [4, 400]
+11     {}      []
 12     {"k3":23, NULL:20, "k4":NULL}   [23, 20, NULL]
 13     {"null":1}      [1]
 15     \N      \N


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to