]> granicus.if.org Git - postgresql/commitdiff
Optimization for bpcharlen, textlen, varcharlen in case of single byte
authorTatsuo Ishii <ishii@postgresql.org>
Sun, 18 Nov 2001 12:07:07 +0000 (12:07 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
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