From 4c22b6f562284835aaf915316140a56b32e6114f Mon Sep 17 00:00:00 2001 From: 884244693 <884244693@qq.com> Date: Thu, 21 Nov 2024 14:44:40 +0000 Subject: [PATCH] [CP] [fix] multi cf get wrong column --- .../table/ob_table_query_async_processor.cpp | 32 +++++++++---------- .../table/ob_table_query_async_processor.h | 5 ++- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/observer/table/ob_table_query_async_processor.cpp b/src/observer/table/ob_table_query_async_processor.cpp index 13de2b692..2321165b0 100644 --- a/src/observer/table/ob_table_query_async_processor.cpp +++ b/src/observer/table/ob_table_query_async_processor.cpp @@ -683,33 +683,33 @@ int ObTableQueryAsyncP::process_columns(const ObIArray& columns, ObString real_column = column.after('.'); ObString family = column.split_on('.'); - if (!real_column.empty()) { - if (OB_FAIL(real_columns.push_back(real_column))) { - LOG_WARN("fail to push column name", K(ret)); - } else if (OB_FAIL(family_addfamily_flag_pairs.push_back(std::make_pair(family, false)))) { - LOG_WARN("fail to push family name and addfamily flag", K(ret)); - } - } else { - if (OB_FAIL(family_addfamily_flag_pairs.push_back(std::make_pair(family, true)))) { - LOG_WARN("fail to push family name and addfamily flag", K(ret)); - } + if (OB_FAIL(real_columns.push_back(real_column))) { + LOG_WARN("fail to push column name", K(ret)); + } else if (OB_FAIL(family_addfamily_flag_pairs.push_back(std::make_pair(family, real_column.empty())))) { + LOG_WARN("fail to push family name and addfamily flag", K(ret)); } } return ret; } int ObTableQueryAsyncP::update_table_info_columns(ObTableSingleQueryInfo* table_info, - const ObArray& real_columns) { + const ObArray>& family_addfamily_flag_pairs, + const ObArray& real_columns, + const std::pair& family_addfamily_flag) { int ret = OB_SUCCESS; if (OB_ISNULL(table_info)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("table info is NULL", K(ret)); } else { + ObString family_name = family_addfamily_flag.first; table_info->query_.htable_filter().clear_columns(); - for (int i = 0; OB_SUCC(ret) && i < real_columns.count(); ++i) { - ObString real_column = real_columns.at(i); - if (OB_FAIL(table_info->query_.htable_filter().add_column(real_column))) { - LOG_WARN("fail to add column to htable_filter", K(ret)); + for (int i = 0; OB_SUCC(ret) && i < family_addfamily_flag_pairs.count(); ++i) { + ObString curr_family = family_addfamily_flag_pairs.at(i).first; + if (curr_family == family_name) { + ObString real_column = real_columns.at(i); + if (OB_FAIL(table_info->query_.htable_filter().add_column(real_column))) { + LOG_WARN("fail to add column to htable_filter", K(ret)); + } } } } @@ -750,7 +750,7 @@ int ObTableQueryAsyncP::process_table_info(ObTableSingleQueryInfo* table_info, } else { if (family_addfamily_flag.second) { table_info->query_.htable_filter().clear_columns(); - } else if (OB_FAIL(update_table_info_columns(table_info, real_columns))) { + } else if (OB_FAIL(update_table_info_columns(table_info, family_addfamily_flag_pairs, real_columns, family_addfamily_flag))) { LOG_WARN("fail to update table info columns", K(ret)); } } diff --git a/src/observer/table/ob_table_query_async_processor.h b/src/observer/table/ob_table_query_async_processor.h index 19c547d8d..7516cff24 100644 --- a/src/observer/table/ob_table_query_async_processor.h +++ b/src/observer/table/ob_table_query_async_processor.h @@ -333,7 +333,10 @@ private: ObArray>& familys, ObArray& real_columns); - int update_table_info_columns(ObTableSingleQueryInfo* table_info, const ObArray& real_columns); + int update_table_info_columns(ObTableSingleQueryInfo* table_info, + const ObArray>& family_addfamily_flag_pairs, + const ObArray& real_columns, + const std::pair& family_addfamily_flag); bool found_family(const ObString& table_name, const ObArray>& family_clear_flags, std::pair& flag);