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
commit 997d071fc3adebc1d9564f21573f350605d8597a Author: amory <wangqian...@selectdb.com> AuthorDate: Mon Jul 31 14:53:18 2023 +0800 [FIX](complex-type)fix complex type nested col_const (#22375) for array/map/struct in mysql_writer unpack_if_const only unpack self column not nested , so col_const should not used in nested column. --- .../vec/data_types/serde/data_type_array_serde.cpp | 4 ++-- .../vec/data_types/serde/data_type_map_serde.cpp | 12 +++++----- .../data_types/serde/data_type_nullable_serde.cpp | 1 + .../data_types/serde/data_type_struct_serde.cpp | 4 ++-- .../stream_load/test_map_load_and_function.out | 3 +++ .../test_array_functions_by_literal.out | 3 +++ .../array_functions/test_array_with_scale_type.out | 28 +++++++++++----------- .../test_struct_functions_by_literal.out | 3 +++ .../stream_load/test_map_load_and_function.groovy | 2 ++ .../test_array_functions_by_literal.groovy | 4 ++++ .../test_struct_functions_by_literal.groovy | 3 +++ 11 files changed, 43 insertions(+), 24 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 596209c9aa..93cc45414d 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 @@ -117,12 +117,12 @@ Status DataTypeArraySerDe::_write_column_to_mysql(const IColumn& column, if (0 != result.push_string("\"", 1)) { return Status::InternalError("pack mysql buffer failed."); } - RETURN_IF_ERROR(nested_serde->write_column_to_mysql(data, result, j, col_const)); + RETURN_IF_ERROR(nested_serde->write_column_to_mysql(data, result, j, false)); if (0 != result.push_string("\"", 1)) { return Status::InternalError("pack mysql buffer failed."); } } else { - RETURN_IF_ERROR(nested_serde->write_column_to_mysql(data, result, j, col_const)); + RETURN_IF_ERROR(nested_serde->write_column_to_mysql(data, result, j, false)); } } } 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 fcf67a8f53..5b7bb09147 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 @@ -146,13 +146,13 @@ Status DataTypeMapSerDe::_write_column_to_mysql(const IColumn& column, return Status::InternalError("pack mysql buffer failed."); } RETURN_IF_ERROR( - key_serde->write_column_to_mysql(nested_keys_column, result, j, col_const)); + key_serde->write_column_to_mysql(nested_keys_column, result, j, false)); if (0 != result.push_string("\"", 1)) { return Status::InternalError("pack mysql buffer failed."); } } else { RETURN_IF_ERROR( - key_serde->write_column_to_mysql(nested_keys_column, result, j, col_const)); + key_serde->write_column_to_mysql(nested_keys_column, result, j, false)); } } if (0 != result.push_string(":", 1)) { @@ -167,14 +167,14 @@ Status DataTypeMapSerDe::_write_column_to_mysql(const IColumn& column, if (0 != result.push_string("\"", 1)) { return Status::InternalError("pack mysql buffer failed."); } - RETURN_IF_ERROR(value_serde->write_column_to_mysql(nested_values_column, result, j, - col_const)); + RETURN_IF_ERROR( + value_serde->write_column_to_mysql(nested_values_column, result, j, false)); if (0 != result.push_string("\"", 1)) { return Status::InternalError("pack mysql buffer failed."); } } else { - RETURN_IF_ERROR(value_serde->write_column_to_mysql(nested_values_column, result, j, - col_const)); + RETURN_IF_ERROR( + value_serde->write_column_to_mysql(nested_values_column, result, j, false)); } } } diff --git a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp index 654890f501..d96a705def 100644 --- a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp @@ -129,6 +129,7 @@ Status DataTypeNullableSerDe::_write_column_to_mysql(const IColumn& column, int row_idx, bool col_const) const { auto& col = static_cast<const ColumnNullable&>(column); auto& nested_col = col.get_nested_column(); + col_const = col_const || is_column_const(nested_col); const auto col_index = index_check_const(row_idx, col_const); if (col.has_null() && col.is_null_at(col_index)) { if (UNLIKELY(0 != result.push_null())) { diff --git a/be/src/vec/data_types/serde/data_type_struct_serde.cpp b/be/src/vec/data_types/serde/data_type_struct_serde.cpp index ed6e9c1b7b..4dd8086fb9 100644 --- a/be/src/vec/data_types/serde/data_type_struct_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_struct_serde.cpp @@ -106,13 +106,13 @@ Status DataTypeStructSerDe::_write_column_to_mysql(const IColumn& column, return Status::InternalError("pack mysql buffer failed."); } RETURN_IF_ERROR(elemSerDeSPtrs[j]->write_column_to_mysql(col.get_column(j), result, - col_index, col_const)); + col_index, false)); if (0 != result.push_string("\"", 1)) { return Status::InternalError("pack mysql buffer failed."); } } else { RETURN_IF_ERROR(elemSerDeSPtrs[j]->write_column_to_mysql(col.get_column(j), result, - col_index, col_const)); + col_index, false)); } } begin = false; 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 c493af4441..71cd0b7528 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 @@ -63,6 +63,9 @@ -- !select_map3 -- {} +-- !select_map4 -- +{1000:"k11", 2000:"k22"} + -- !select_element1 -- 1000 diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out index 6d2e316090..63103fa437 100644 --- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out +++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out @@ -1,4 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +[1, 1, 2, 2, 2, 2] + -- !sql -- true diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_with_scale_type.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_with_scale_type.out index e2b4a2a2af..b887cdf11b 100644 --- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_with_scale_type.out +++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_with_scale_type.out @@ -58,8 +58,8 @@ [23.679] -- !select -- -[24.990, 24.990] -[24.990, 24.990] +[24.990, 25.990] +[24.990, 25.990] -- !select -- [24.990, 25.990] @@ -69,8 +69,8 @@ [34.679] -- !select -- -[24.990, 24.990] -[24.990, 24.990] +[24.990, 25.990] +[24.990, 25.990] -- !select -- [24.990, 25.990] @@ -80,8 +80,8 @@ [2022-12-02 22:23:24.999] -- !select -- -[2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999] -[2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999] +[2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] +[2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] -- !select -- [2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] @@ -111,8 +111,8 @@ \N -- !select -- -[2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999] -[2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999] +[2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] +[2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] -- !select -- [2022-12-01 22:23:24.999, 2022-12-01 23:23:24.999] @@ -131,8 +131,8 @@ [{23.679, 23.679, 2022-12-02 22:23:24.999, 23.679}, {34.679, 34.679, 2022-12-02 23:23:24.999, 34.679}] -- !select -- -[{2022-12-02 22:23:24.999}, {2022-12-02 22:23:24.999}] -[{2022-12-02 22:23:24.999}, {2022-12-02 22:23:24.999}] +[{2022-12-02 22:23:24.999}, {2022-12-02 22:23:23.997}] +[{2022-12-02 22:23:24.999}, {2022-12-02 22:23:23.997}] -- !select -- [{2022-12-01 22:23:24.999}, {2022-12-01 23:23:24.999}] @@ -143,8 +143,8 @@ [{2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999}, {2022-12-02 23:23:24.999, 2022-12-02 22:23:23.997}] -- !select -- -[2022-12-02 22:23:23.997, 2022-12-02 22:23:23.997] -[2022-12-02 22:23:23.997, 2022-12-02 22:23:23.997] +[2022-12-02 22:23:23.997, 2022-12-02 22:23:24.999] +[2022-12-02 22:23:23.997, 2022-12-02 22:23:24.999] -- !select -- [2023-03-08 23:23:23.997, 2022-12-01 22:23:24.999, 2022-12-01 23:23:24.999] @@ -163,8 +163,8 @@ 23.679 [23.679, 34.679] [23.679, 23.679, 34.679] -- !select -- -[2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999] -[2022-12-02 22:23:24.999, 2022-12-02 22:23:24.999] +[2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] +[2022-12-02 22:23:24.999, 2022-12-02 22:23:23.997] -- !select -- [2022-12-01 22:23:24.999, 2022-12-01 23:23:24.999, 2023-03-08 23:23:23.997] diff --git a/regression-test/data/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.out b/regression-test/data/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.out index 17e391b283..d6e14a7cc4 100644 --- a/regression-test/data/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.out +++ b/regression-test/data/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.out @@ -1,4 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +{"a", 1, "doris", "aaaaa", 1.32} + -- !sql -- {1, 2, 3} diff --git a/regression-test/suites/load_p0/stream_load/test_map_load_and_function.groovy b/regression-test/suites/load_p0/stream_load/test_map_load_and_function.groovy index 5ef0208bb2..c3e6ab8a20 100644 --- a/regression-test/suites/load_p0/stream_load/test_map_load_and_function.groovy +++ b/regression-test/suites/load_p0/stream_load/test_map_load_and_function.groovy @@ -79,6 +79,8 @@ suite("test_map_load_and_function", "p0") { qt_select_map1 "SELECT map('k11', 1000, 'k22', 2000)" qt_select_map2 "SELECT map(1000, 'k11', 2000, 'k22')" qt_select_map3 "SELECT map()" + // map nested + qt_select_map4 "select m from (SELECT map(1000, 'k11', 2000, 'k22') as m) t" // map element_at qt_select_element1 "SELECT map('k11', 1000, 'k22', 2000)['k11']" diff --git a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy index c29bf53103..d969312431 100644 --- a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy +++ b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy @@ -16,6 +16,10 @@ // under the License. suite("test_array_functions_by_literal") { + // array_nested function + qt_sql "select a from (select array(1, 1, 2, 2, 2, 2) as a) t" + + // array_contains function qt_sql "select array_contains([1,2,3], 1)" qt_sql "select array_contains([1,2,3], 4)" diff --git a/regression-test/suites/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.groovy b/regression-test/suites/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.groovy index a7ae109fd3..d394b3cbd4 100644 --- a/regression-test/suites/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.groovy +++ b/regression-test/suites/query_p0/sql_functions/struct_functions/test_struct_functions_by_literal.groovy @@ -16,6 +16,9 @@ // under the License. suite("test_struct_functions_by_literal") { + // struct-nested + qt_sql "select s from (select struct('a', 1, 'doris', 'aaaaa', 1.32) as s) t" + // struct constructor qt_sql "select struct(1, 2, 3)" qt_sql "select struct(1, 1000, 10000000000)" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org