From c84bbbaff6586561a528f6f283eb11fd183166eb Mon Sep 17 00:00:00 2001 From: 0xacc Date: Tue, 19 Mar 2024 07:50:39 +0000 Subject: [PATCH] [to #55637389] deep copy package type member names when getting columns from table function --- src/sql/resolver/ob_resolver_utils.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/sql/resolver/ob_resolver_utils.cpp b/src/sql/resolver/ob_resolver_utils.cpp index d59d0f2dc7..c3d5a8eb31 100644 --- a/src/sql/resolver/ob_resolver_utils.cpp +++ b/src/sql/resolver/ob_resolver_utils.cpp @@ -137,9 +137,19 @@ int ObResolverUtils::get_all_function_table_column_names(const TableItem &table_ CK (user_type->is_record_type()); CK (OB_NOT_NULL(record_type = static_cast(user_type))); for (int64_t i = 0; OB_SUCC(ret) && i < record_type->get_member_count(); ++i) { + ObString name; const ObString *member_name = record_type->get_record_member_name(i); CK (OB_NOT_NULL(member_name)); - OZ (column_names.push_back(*member_name)); + + if (OB_FAIL(ret)) { + // do nothing + } else if (PL_TYPE_PACKAGE == user_type->get_type_from()) { + OZ (ob_write_string(*params.allocator_, *member_name, name)); + } else { + name = *member_name; + } + + OZ (column_names.push_back(name)); } } return ret;