From c8f134649254384f9708dad27e7760aba025fa2d Mon Sep 17 00:00:00 2001 From: xianyu-w <707512433@qq.com> Date: Mon, 13 Jan 2025 04:44:52 +0000 Subject: [PATCH] [CP] Fix dynamic sampling bug --- src/sql/optimizer/ob_dynamic_sampling.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/sql/optimizer/ob_dynamic_sampling.cpp b/src/sql/optimizer/ob_dynamic_sampling.cpp index e838455cc8..f0d6c624d7 100644 --- a/src/sql/optimizer/ob_dynamic_sampling.cpp +++ b/src/sql/optimizer/ob_dynamic_sampling.cpp @@ -1215,15 +1215,27 @@ int ObDynamicSampling::gen_partition_str(const ObIArray &partition_inf ObSqlString &partition_str) { int ret = OB_SUCCESS; + ObArenaAllocator allocator("ObOptDS"); if (OB_UNLIKELY(partition_infos.empty())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected error", K(ret), K(partition_infos)); } else { for (int64_t i = 0; OB_SUCC(ret) && i < partition_infos.count(); ++i) { - char prefix = i == 0 ? ' ' : ','; - if (OB_FAIL(partition_str.append_fmt("%c%.*s", prefix, partition_infos.at(i).part_name_.length(), - partition_infos.at(i).part_name_.ptr()))) { - LOG_WARN("failed to append fmt", K(ret)); + const char *quot = lib::is_mysql_mode() ? "`" : "\""; + ObString print_name; + if (i > 0 && OB_FAIL(partition_str.append(","))) { + LOG_WARN("failed to append", K(ret)); + } else if (OB_FAIL(partition_str.append(quot))) { + LOG_WARN("failed to append", K(ret)); + } else if (OB_FAIL(ObSQLUtils::generate_new_name_with_escape_character(allocator, + partition_infos.at(i).part_name_, + print_name, + lib::is_oracle_mode()))) { + LOG_WARN("failed to generate new name with escape character", K(ret)); + } else if (OB_FAIL(partition_str.append(print_name))) { + LOG_WARN("failed to append", K(ret)); + } else if (OB_FAIL(partition_str.append(quot))) { + LOG_WARN("failed to append", K(ret)); } } }