fix prepare_alter_table_arg() core bug

This commit is contained in:
obdev
2023-02-07 17:25:05 +08:00
committed by ob-robot
parent f416882a75
commit 582e14995d
2 changed files with 10 additions and 6 deletions

View File

@ -417,8 +417,6 @@ int ObDDLTaskHeartBeatMananger::get_inactive_ddl_task_ids(ObArray<int64_t>& remo
return ret;
}
ObPrepareAlterTableArgParam::ObPrepareAlterTableArgParam() : session_id_(OB_INVALID_ID) {}
int ObPrepareAlterTableArgParam::init(const uint64_t session_id,
const ObSQLMode &sql_mode,
const ObString &ddl_stmt_str,
@ -458,9 +456,8 @@ int ObPrepareAlterTableArgParam::set_nls_formats(const common::ObString *nls_for
ret = OB_INVALID_ARGUMENT;
} else {
char *tmp_ptr[ObNLSFormatEnum::NLS_MAX] = {};
common::ObArenaAllocator allocator;
for (int64_t i = 0; OB_SUCC(ret) && i < ObNLSFormatEnum::NLS_MAX; ++i) {
if (OB_ISNULL(tmp_ptr[i] = (char *)allocator.alloc(nls_formats[i].length()))) {
if (OB_ISNULL(tmp_ptr[i] = (char *)allocator_.alloc(nls_formats[i].length()))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
SHARE_LOG(ERROR, "failed to alloc memory!", "size", nls_formats[i].length(), K(ret));
} else {
@ -470,7 +467,7 @@ int ObPrepareAlterTableArgParam::set_nls_formats(const common::ObString *nls_for
}
if (OB_FAIL(ret)) {
for (int64_t i = 0; i < ObNLSFormatEnum::NLS_MAX; ++i) {
allocator.free(tmp_ptr[i]);
allocator_.free(tmp_ptr[i]);
}
}
}

View File

@ -104,7 +104,13 @@ private:
struct ObPrepareAlterTableArgParam final
{
public:
ObPrepareAlterTableArgParam();
ObPrepareAlterTableArgParam() :
session_id_(common::OB_INVALID_ID),
sql_mode_(0),
tz_info_wrap_(),
allocator_(lib::ObLabel("PrepAlterTblArg")),
nls_formats_{}
{}
~ObPrepareAlterTableArgParam() = default;
int init(const uint64_t session_id,
const ObSQLMode &sql_mode,
@ -140,6 +146,7 @@ public:
common::ObString target_database_name_;
common::ObTimeZoneInfo tz_info_;
common::ObTimeZoneInfoWrap tz_info_wrap_;
common::ObArenaAllocator allocator_;
common::ObString nls_formats_[common::ObNLSFormatEnum::NLS_MAX];
};