fix handling invalid character in identifier

This commit is contained in:
wjhh2008
2023-09-22 03:10:14 +00:00
committed by ob-robot
parent e4e09ecfb6
commit c13243ff23
54 changed files with 229 additions and 146 deletions

View File

@ -193,6 +193,35 @@ char *parse_strdup(const char *str, void *malloc_pool, int64_t *out_len)
return out_str;
}
char *replace_invalid_character(const struct ObCharsetInfo* src_cs, const struct ObCharsetInfo* oracle_db_cs,
const char *str, int64_t *out_len, void *malloc_pool, int *extra_errno)
{
char *out_str = NULL;
if (OB_ISNULL(str) || OB_ISNULL(extra_errno) || OB_ISNULL(out_len)) {
} else if (NULL == oracle_db_cs) {
out_str = const_cast<char *>(str);
} else {
ob_wc_t replace_char = !!(oracle_db_cs->state & OB_CS_UNICODE) ? 0xFFFD : '?';
uint errors = 0;
size_t str_len = STRLEN(str);
char *temp_str = NULL;
size_t temp_len = str_len * 4;
if (OB_ISNULL(temp_str = static_cast<char *>(parse_malloc(temp_len + 1, malloc_pool)))) {
} else {
int64_t temp_res_len = static_cast<int64_t>(
ob_convert(temp_str, temp_len, oracle_db_cs, str, str_len, src_cs, false, replace_char, &errors));
size_t dst_len = temp_res_len * 4;
if (OB_ISNULL(out_str = static_cast<char *>(parse_malloc(dst_len + 1, malloc_pool)))) {
} else {
*out_len = static_cast<int64_t>(
ob_convert(out_str, dst_len, src_cs, temp_str, temp_res_len, oracle_db_cs, false, replace_char, &errors));
out_str[*out_len] = '\0';
}
}
}
return out_str;
}
char *parse_str_convert_utf8(const struct ObCharsetInfo* src_cs, const char *str, void *malloc_pool, int64_t *out_len, int *extra_errno)
{
char *out_str = NULL;