csun5285 commented on code in PR #54358: URL: https://github.com/apache/doris/pull/54358#discussion_r2255736009
########## be/src/vec/common/schema_util.cpp: ########## @@ -1211,144 +1197,144 @@ void get_field_info(const Field& field, FieldInfo* info) { } } -// TODO(lihangyu): uncomment -// bool generate_sub_column_info(const TabletSchema& schema, int32_t col_unique_id, -// const std::string& path, -// TabletSchema::SubColumnInfo* sub_column_info) { -// const auto& parent_column = schema.column_by_uid(col_unique_id); -// std::function<void(const TabletColumn&, TabletColumn*)> generate_result_column = -// [&](const TabletColumn& from_column, TabletColumn* to_column) { -// to_column->set_name(parent_column.name_lower_case() + "." + path); -// to_column->set_type(from_column.type()); -// to_column->set_parent_unique_id(parent_column.unique_id()); -// bool is_typed = !parent_column.variant_enable_typed_paths_to_sparse(); -// to_column->set_path_info( -// PathInData(parent_column.name_lower_case() + "." + path, is_typed)); -// to_column->set_aggregation_method(parent_column.aggregation()); -// to_column->set_is_nullable(true); -// to_column->set_precision(from_column.precision()); -// to_column->set_frac(from_column.frac()); -// to_column->set_parent_unique_id(parent_column.unique_id()); -// to_column->set_is_decimal(from_column.is_decimal()); -// -// if (from_column.is_array_type()) { -// TabletColumn nested_column; -// generate_result_column(*from_column.get_sub_columns()[0], &nested_column); -// to_column->add_sub_column(nested_column); -// } -// }; -// -// auto generate_index = [&](const std::string& pattern) { -// // 1. find subcolumn's index -// if (const auto& indexes = schema.inverted_index_by_field_pattern(col_unique_id, pattern); -// !indexes.empty()) { -// for (const auto& index : indexes) { -// auto index_ptr = std::make_shared<TabletIndex>(*index); -// index_ptr->set_escaped_escaped_index_suffix_path( -// sub_column_info->column.path_info_ptr()->get_path()); -// sub_column_info->indexes.emplace_back(std::move(index_ptr)); -// } -// } -// // 2. find parent column's index -// else if (const auto parent_index = schema.inverted_indexs(col_unique_id); -// !parent_index.empty()) { -// inherit_index(parent_index, sub_column_info->indexes, sub_column_info->column); -// } else { -// sub_column_info->indexes.clear(); -// } -// }; -// -// const auto& sub_columns = parent_column.get_sub_columns(); -// for (const auto& sub_column : sub_columns) { -// const char* pattern = sub_column->name().c_str(); -// switch (sub_column->pattern_type()) { -// case PatternTypePB::MATCH_NAME: { -// if (strcmp(pattern, path.c_str()) == 0) { -// generate_result_column(*sub_column, &sub_column_info->column); -// generate_index(sub_column->name()); -// return true; -// } -// break; -// } -// case PatternTypePB::MATCH_NAME_GLOB: { -// int result = fnmatch(pattern, path.c_str(), FNM_PATHNAME); -// if (result == 0) { -// generate_result_column(*sub_column, &sub_column_info->column); -// generate_index(sub_column->name()); -// return true; -// } -// break; -// } -// default: -// break; -// } -// } -// return false; -// } -// -// TabletSchemaSPtr calculate_variant_extended_schema(const std::vector<RowsetSharedPtr>& rowsets, -// const TabletSchemaSPtr& base_schema) { -// if (rowsets.empty()) { -// return nullptr; -// } -// -// std::vector<TabletSchemaSPtr> schemas; -// for (const auto& rs : rowsets) { -// if (rs->num_segments() == 0) { -// continue; -// } -// const auto& tablet_schema = rs->tablet_schema(); -// SegmentCacheHandle segment_cache; -// auto st = SegmentLoader::instance()->load_segments(std::static_pointer_cast<BetaRowset>(rs), -// &segment_cache); -// if (!st.ok()) { -// return base_schema; -// } -// for (const auto& segment : segment_cache.get_segments()) { -// TabletSchemaSPtr schema = tablet_schema->copy_without_variant_extracted_columns(); -// for (const auto& column : tablet_schema->columns()) { -// if (!column->is_variant_type()) { -// continue; -// } -// segment_v2::ColumnReader* column_reader = nullptr; -// RETURN_IF_ERROR(segment->get_column_reader(column->unique_id(), &column_reader)); -// if (!column_reader) { -// continue; -// } -// -// CHECK(column_reader->get_meta_type() == FieldType::OLAP_FIELD_TYPE_VARIANT); -// const auto* subcolumn_readers = -// assert_cast<VariantColumnReader*>(column_reader)->get_subcolumn_readers(); -// for (const auto& entry : *subcolumn_readers) { -// if (entry->path.empty()) { -// continue; -// } -// const std::string& column_name = -// column->name_lower_case() + "." + entry->path.get_path(); -// const vectorized::DataTypePtr& data_type = entry->data.file_column_type; -// vectorized::PathInDataBuilder full_path_builder; -// auto full_path = full_path_builder.append(column->name_lower_case(), false) -// .append(entry->path.get_parts(), false) -// .build(); -// TabletColumn subcolumn = -// get_column_by_type(data_type, column_name, -// vectorized::schema_util::ExtraInfo { -// .unique_id = -1, -// .parent_unique_id = column->unique_id(), -// .path_info = full_path}); -// schema->append_column(subcolumn); -// } -// } -// schemas.emplace_back(schema); -// } -// } -// TabletSchemaSPtr least_common_schema; -// auto st = get_least_common_schema(schemas, base_schema, least_common_schema, false); -// if (!st.ok()) { -// return base_schema; -// } -// return least_common_schema; -// } +bool generate_sub_column_info(const TabletSchema& schema, int32_t col_unique_id, + const std::string& path, + TabletSchema::SubColumnInfo* sub_column_info) { + const auto& parent_column = schema.column_by_uid(col_unique_id); + std::function<void(const TabletColumn&, TabletColumn*)> generate_result_column = + [&](const TabletColumn& from_column, TabletColumn* to_column) { + to_column->set_name(parent_column.name_lower_case() + "." + path); + to_column->set_type(from_column.type()); + to_column->set_parent_unique_id(parent_column.unique_id()); + bool is_typed = !parent_column.variant_enable_typed_paths_to_sparse(); + to_column->set_path_info( + PathInData(parent_column.name_lower_case() + "." + path, is_typed)); + to_column->set_aggregation_method(parent_column.aggregation()); + to_column->set_is_nullable(true); + to_column->set_parent_unique_id(parent_column.unique_id()); + if (from_column.is_decimal()) { Review Comment: 用ColumnPB ########## be/src/vec/common/schema_util.cpp: ########## @@ -243,17 +244,17 @@ void get_column_by_type(const vectorized::DataTypePtr& data_type, const std::str column.set_length(cast_set<int32_t>(data_type->get_size_of_value_in_memory())); return; } - // TODO(lihangyu): uncomment - // if (is_decimal(type)) { - // column.set_precision_frac(data_type->get_precision(), data_type->get_scale()); - // column.set_is_decimal(true); - // return; - // } - // // datetimev2 needs scale - // if (type == PrimitiveType::TYPE_DATETIMEV2) { - // column.set_precision_frac(-1, data_type->get_scale()); - // return; - // } + if (is_decimal(type)) { Review Comment: 把这个方法改成ColumnPB 的那种吧 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org