aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/varlena.c28
1 files changed, 5 insertions, 23 deletions
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;
}
/*