diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index a8db8080e29..b73cebfdb5d 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -51,7 +51,6 @@ typedef struct varlena VarString; */ typedef struct { - bool is_multibyte; /* T if multibyte encoding */ bool is_multibyte_char_in_char; /* need to check char boundaries? */ char *str1; /* haystack string */ @@ -1221,20 +1220,11 @@ text_position_setup(text *t1, text *t2, Oid collid, TextPositionState *state) * and continue the search if it was a false match. */ if (pg_database_encoding_max_length() == 1) - { - state->is_multibyte = false; state->is_multibyte_char_in_char = false; - } else if (GetDatabaseEncoding() == PG_UTF8) - { - state->is_multibyte = true; state->is_multibyte_char_in_char = false; - } else - { - state->is_multibyte = true; state->is_multibyte_char_in_char = true; - } state->str1 = VARDATA_ANY(t1); state->str2 = VARDATA_ANY(t2); @@ -1466,19 +1456,11 @@ text_position_get_match_ptr(TextPositionState *state) static int text_position_get_match_pos(TextPositionState *state) { - if (!state->is_multibyte) - return state->last_match - state->str1 + 1; - else - { - /* Convert the byte position to char position. */ - while (state->refpoint < state->last_match) - { - state->refpoint += pg_mblen(state->refpoint); - state->refpos++; - } - Assert(state->refpoint == state->last_match); - return state->refpos + 1; - } + /* Convert the byte position to char position. */ + state->refpos += pg_mbstrlen_with_len(state->refpoint, + state->last_match - state->refpoint); + state->refpoint = state->last_match; + return state->refpos + 1; } /*