Optimization for bpcharlen, textlen, varcharlen in case of single byte
authorTatsuo Ishii
Sun, 18 Nov 2001 12:07:07 +0000 (12:07 +0000)
committerTatsuo Ishii
Sun, 18 Nov 2001 12:07:07 +0000 (12:07 +0000)
encodings.

src/backend/utils/adt/varchar.c
src/backend/utils/adt/varlena.c

index b7230b5bbd92421bf8daf0d88b6874187aa054e0..f25a06e14499fded67abeb83cab67edc7cd937d2 100644 (file)
@@ -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)
        );
index 7b15cfa690f7c68eb30430b1404f1fe78c2acd8d..a6600a22545566bd6958920755dec1511c1e7066 100644 (file)
@@ -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