fix handling invalid character in identifier
This commit is contained in:
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user