From e60ecf91d18fc3a818547dc7441607e1f52c69f4 Mon Sep 17 00:00:00 2001 From: Hu Shenggang Date: Tue, 2 Dec 2025 14:59:13 +0800 Subject: [PATCH] [fix](olap) Fix the crash in column pruning caused by the light schema change --- .../olap/rowset/segment_v2/column_reader.cpp | 2 ++ .../complex_types/test_pruned_columns.out | 4 +++ .../complex_types/test_pruned_columns.groovy | 33 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp b/be/src/olap/rowset/segment_v2/column_reader.cpp index 8e3962236fef63..72e46848861fc1 100644 --- a/be/src/olap/rowset/segment_v2/column_reader.cpp +++ b/be/src/olap/rowset/segment_v2/column_reader.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -888,6 +889,7 @@ Status ColumnReader::new_struct_iterator(ColumnIteratorUPtr* iterator, TabletColumn column = tablet_column->get_sub_column(i); ColumnIteratorUPtr it; RETURN_IF_ERROR(Segment::new_default_iterator(column, &it)); + it->set_column_name(column.name()); sub_column_iterators.emplace_back(std::move(it)); } diff --git a/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out b/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out index 870a576307486f..86728bafd1ca8d 100644 --- a/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out +++ b/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out @@ -29,3 +29,7 @@ 0.41 0.99 +-- !sql8 -- +\N +added_z + diff --git a/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy b/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy index d54d924e97fdc9..c2a7e2b71466c1 100644 --- a/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy +++ b/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy @@ -85,4 +85,37 @@ suite("test_pruned_columns") { qt_sql7 """ select struct_element(dynamic_attributes['theme_preference'], 'confidence_score') from `tbl_test_pruned_columns_map` order by id; """ + + // test light schema change with nested complex types + sql """ + DROP TABLE IF EXISTS nested_sc_tbl; + CREATE TABLE nested_sc_tbl ( + `id` BIGINT, + `s_info` STRUCT, + `arr_s` ARRAY>, + `map_s` MAP> + ) + UNIQUE KEY(`id`) + DISTRIBUTED BY HASH(`id`) BUCKETS 4 + PROPERTIES ( + "replication_num" = "1", + "light_schema_change" = "true" + ); + """ + sql """ + ALTER TABLE nested_sc_tbl MODIFY COLUMN s_info STRUCT; + """ + sql """ + INSERT INTO nested_sc_tbl VALUES (1, struct(10, 'v1_struct', 100), array(struct(100, 200)), map('k1', struct(1, 1.1))); + """ + sql """ + ALTER TABLE nested_sc_tbl MODIFY COLUMN arr_s ARRAY>; + """ + sql """ + INSERT INTO nested_sc_tbl VALUES (3, struct(30.5, 'v3', 888), array(struct(500, 600, 'added_z'), struct(501, 601, 'added_z_2')), map('k3', struct(3, 3.3))); + """ + + qt_sql8 """ + select struct_element(element_at(arr_s, 1), 'z') as inner_z FROM nested_sc_tbl ORDER BY id; + """ } \ No newline at end of file