*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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)
);
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)
);
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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