diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-02-01 06:27:48 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-02-01 06:27:48 +0000 |
| commit | f27976c85b1fb9002727cce65b9f9567e158f754 (patch) | |
| tree | a9f1424789b87795a21f0ae3453f49915c274681 /src | |
| parent | 08b0e605636d52bb8b2168dded694fe86f1acbea (diff) | |
| download | postgresql-f27976c85b1fb9002727cce65b9f9567e158f754.tar.gz | |
Make length() disregard trailing spaces in char(n) values, per discussion
some time ago and recent patch from Gavin Sherry. Update documentation
to point out that trailing spaces are insignificant in char(n).
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/utils/adt/varchar.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 2c10ca1485..6b26a91192 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/varchar.c,v 1.103 2003/11/29 19:51:59 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/varchar.c,v 1.104 2004/02/01 06:27:48 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -510,14 +510,16 @@ Datum bpcharlen(PG_FUNCTION_ARGS) { BpChar *arg = PG_GETARG_BPCHAR_P(0); + int len; - /* optimization for single byte encoding */ - if (pg_database_encoding_max_length() <= 1) - PG_RETURN_INT32(VARSIZE(arg) - VARHDRSZ); + /* get number of bytes, ignoring trailing spaces */ + len = bcTruelen(arg); + + /* in multibyte encoding, convert to number of characters */ + if (pg_database_encoding_max_length() != 1) + len = pg_mbstrlen_with_len(VARDATA(arg), len); - PG_RETURN_INT32( - pg_mbstrlen_with_len(VARDATA(arg), VARSIZE(arg) - VARHDRSZ) - ); + PG_RETURN_INT32(len); } Datum |
