aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/varchar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/varchar.c')
-rw-r--r--src/backend/utils/adt/varchar.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index b7230b5bbd9..f25a06e1449 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.86 2001/11/08 04:05:13 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.87 2001/11/18 12:07:07 ishii Exp $
*
*-------------------------------------------------------------------------
*/
@@ -598,6 +598,10 @@ bpcharlen(PG_FUNCTION_ARGS)
BpChar *arg = PG_GETARG_BPCHAR_P(0);
#ifdef MULTIBYTE
+ /* optimization for single byte encoding */
+ if (pg_database_encoding_max_length() <= 1)
+ PG_RETURN_INT32(VARSIZE(arg) - VARHDRSZ);
+
PG_RETURN_INT32(
pg_mbstrlen_with_len(VARDATA(arg), VARSIZE(arg) - VARHDRSZ)
);
@@ -806,6 +810,10 @@ varcharlen(PG_FUNCTION_ARGS)
VarChar *arg = PG_GETARG_VARCHAR_P(0);
#ifdef MULTIBYTE
+ /* optimization for single byte encoding */
+ if (pg_database_encoding_max_length() <= 1)
+ PG_RETURN_INT32(VARSIZE(arg) - VARHDRSZ);
+
PG_RETURN_INT32(
pg_mbstrlen_with_len(VARDATA(arg), VARSIZE(arg) - VARHDRSZ)
);