diff options
author | Tatsuo Ishii <ishii@postgresql.org> | 2001-11-18 12:07:07 +0000 |
---|---|---|
committer | Tatsuo Ishii <ishii@postgresql.org> | 2001-11-18 12:07:07 +0000 |
commit | 226211f0af3b9deee6733a5393f32cb34c59bc53 (patch) | |
tree | 200d90ea15b5a7c1de85f1cea774ca0e58d6f3ae /src/backend/utils/adt/varlena.c | |
parent | e2548526cf21896c775aa35da8cc2ef24acda597 (diff) | |
download | postgresql-226211f0af3b9deee6733a5393f32cb34c59bc53.tar.gz postgresql-226211f0af3b9deee6733a5393f32cb34c59bc53.zip |
Optimization for bpcharlen, textlen, varcharlen in case of single byte
encodings.
Diffstat (limited to 'src/backend/utils/adt/varlena.c')
-rw-r--r-- | src/backend/utils/adt/varlena.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 7b15cfa690f..a6600a22545 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.74 2001/10/25 05:49:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.75 2001/11/18 12:07:07 ishii Exp $ * *------------------------------------------------------------------------- */ @@ -240,22 +240,13 @@ textlen(PG_FUNCTION_ARGS) text *t = PG_GETARG_TEXT_P(0); #ifdef MULTIBYTE - unsigned char *s; - int len, - l, - wl; - - len = 0; - s = VARDATA(t); - l = VARSIZE(t) - VARHDRSZ; - while (l > 0) - { - wl = pg_mblen(s); - l -= wl; - s += wl; - len++; - } - PG_RETURN_INT32(len); + /* optimization for single byte encoding */ + if (pg_database_encoding_max_length() <= 1) + PG_RETURN_INT32(VARSIZE(t) - VARHDRSZ); + + PG_RETURN_INT32( + pg_mbstrlen_with_len(VARDATA(t), VARSIZE(t) - VARHDRSZ) + ); #else PG_RETURN_INT32(VARSIZE(t) - VARHDRSZ); #endif |