fix replace expr charset mistaken code bug
This commit is contained in:
24
deps/oblib/src/lib/charset/ob_charset.cpp
vendored
24
deps/oblib/src/lib/charset/ob_charset.cpp
vendored
@ -3141,10 +3141,10 @@ int ObCharsetUtils::init(ObIAllocator &allocator)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ObStringScanner::next_character(ObString &encoding, int32_t &wchar, int &ret)
|
||||
bool ObStringScanner::next_character(ObString &encoding_value, int32_t &unicode_value, int &ret)
|
||||
{
|
||||
bool has_next = false;
|
||||
ret = next_character(encoding, wchar);
|
||||
ret = next_character(encoding_value, unicode_value);
|
||||
|
||||
if (OB_ITER_END == ret) {
|
||||
has_next = false;
|
||||
@ -3158,20 +3158,26 @@ bool ObStringScanner::next_character(ObString &encoding, int32_t &wchar, int &re
|
||||
return has_next;
|
||||
}
|
||||
|
||||
int ObStringScanner::next_character(ObString &encoding, int32_t &wchar)
|
||||
int ObStringScanner::next_character(ObString &encoding_value, int32_t &unicode_value)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int32_t length = 0;
|
||||
|
||||
ObString &str = const_cast<ObString &>(str_);
|
||||
ObString &str = str_;
|
||||
|
||||
if (str.empty()) {
|
||||
ret = OB_ITER_END;
|
||||
} else if (OB_FAIL(ObCharset::mb_wc(collation_type_, str.ptr(), str.length(), length, wchar))) {
|
||||
ret = OB_ERR_INCORRECT_STRING_VALUE;
|
||||
LOG_WARN("fail to call mb_wc", K(ret), KPHEX(str.ptr(), str.length()));
|
||||
} else {
|
||||
encoding.assign_ptr(str.ptr(), length);
|
||||
} else if (OB_FAIL(ObCharset::mb_wc(collation_type_, str.ptr(), str.length(), length, unicode_value))) {
|
||||
if (!!(IGNORE_INVALID_CHARACTER & flags_)) {
|
||||
ret = OB_SUCCESS;
|
||||
length = 1;
|
||||
} else {
|
||||
ret = OB_ERR_INCORRECT_STRING_VALUE;
|
||||
LOG_WARN("fail to call mb_wc", K(ret), KPHEX(str.ptr(), str.length()));
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
encoding_value.assign_ptr(str.ptr(), length);
|
||||
LOG_DEBUG("next_character", K(ret), KPHEX(str.ptr(), str.length()));
|
||||
str += length;
|
||||
}
|
||||
|
||||
17
deps/oblib/src/lib/charset/ob_charset.h
vendored
17
deps/oblib/src/lib/charset/ob_charset.h
vendored
@ -608,15 +608,22 @@ private:
|
||||
class ObStringScanner
|
||||
{
|
||||
public:
|
||||
ObStringScanner(const ObString &str, common::ObCollationType collation_type)
|
||||
: str_(str), collation_type_(collation_type)
|
||||
enum {
|
||||
IGNORE_INVALID_CHARACTER = 1<<0,
|
||||
};
|
||||
ObStringScanner(const ObString &str, common::ObCollationType collation_type, uint64_t flags = 0)
|
||||
: origin_str_(str), str_(str), collation_type_(collation_type), flags_(flags)
|
||||
{}
|
||||
int next_character(ObString &encoding, int32_t &wchar);
|
||||
bool next_character(ObString &encoding, int32_t &wchar, int &ret);
|
||||
int next_character(ObString &encoding_value, int32_t &unicode_value);
|
||||
bool next_character(ObString &encoding_value, int32_t &unicode_value, int &ret);
|
||||
ObString get_remain_str() { return str_; }
|
||||
void forward_bytes(int64_t n) { str_ += n; }
|
||||
TO_STRING_KV(K_(str), K_(collation_type));
|
||||
private:
|
||||
const ObString &str_;
|
||||
const ObString &origin_str_;
|
||||
ObString str_;
|
||||
common::ObCollationType collation_type_;
|
||||
uint64_t flags_;
|
||||
};
|
||||
|
||||
class ObCharSetString
|
||||
|
||||
Reference in New Issue
Block a user