Re: (b)trim anomalies

From: Thomas F(dot)O'Connell <tfo(at)sitening(dot)com>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: PgSql General <pgsql-general(at)postgresql(dot)org>
Subject: Re: (b)trim anomalies
Date: 2004-12-02 17:23:17
Message-ID: DB1EAE3F-4486-11D9-A917-000D93AE0944@sitening.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Nice. Thanks, Bruce. If I felt as if I could speak a little more
authoritatively about why it had been missing, I would've offered to
document it.

Now it is a psql/postgres internals issue that causes \df trim not to
reveal anything?

-tfo

--
Thomas F. O'Connell
Co-Founder, Information Architect
Sitening, LLC
http://www.sitening.com/
110 30th Avenue North, Suite 6
Nashville, TN 37203-6320
615-260-0005

On Dec 2, 2004, at 11:14 AM, Bruce Momjian wrote:

> OK, I have documented that the second parameter to btrim() is optional,
> and default to a space. Patch attached and applied.
>
> -----------------------------------------------------------------------
> ----
>
> Thomas F. O'Connell wrote:
>> Not entirely.
>>
>> Per <http://www.postgresql.org/docs/7.4/static/functions-string.html>,
>> btrim is documented as taking two arguments. There is a
>> single-argument
>> version that exists that trims whitespace if only the first argument
>> is
>> given (i.e., the characters to trim are omitted). This latter version
>> is nowhere documented as far as I can tell.
>>
>> I'm also curious why, despite its place in the ANSI standard, \df
>> seems
>> to reveal no information about trim.
>>
>> -tfo
>>
>> --
>> Thomas F. O'Connell
>> Co-Founder, Information Architect
>> Sitening, LLC
>> http://www.sitening.com/
>> 110 30th Avenue North, Suite 6
>> Nashville, TN 37203-6320
>> 615-260-0005
>>
>> On Nov 27, 2004, at 9:23 PM, Bruce Momjian wrote:
>>
>>> Thomas F.O'Connell wrote:
>>>> I was just wondering why the btrim syntax that takes only a single
>>>> argument is not documented in 9.4 in the documentation (I checked
>>>> both
>>>> 7.4 and 8.0 docs).
>>>>
>>>> This is in a 7.4.5 installation:
>>>>
>>>> pg=# \df btrim
>>>> List of functions
>>>> Result data type | Schema | Name | Argument data types
>>>> ------------------+------------+-------+---------------------
>>>> bytea | pg_catalog | btrim | bytea, bytea
>>>> text | pg_catalog | btrim | text
>>>> text | pg_catalog | btrim | text, text
>>>> (3 rows)
>>>>
>>>> Is it ever documented anywhere that the single-argument version of
>>>> btrim can be used to remove whitespace from the left and right of a
>>>> given string? Is this version not supposed to be user-facing for
>>>> some
>>>> reason?
>>>>
>>>> Also, in this post:
>>>>
>>>> http://archives.postgresql.org/pgsql-sql/2002-01/msg00053.php
>>>>
>>>> Bruce sort of explains that TRIM is an ANSI word but doesn't fully
>>>> explain why it doesn't show up in a \df listing:
>>>>
>>>> pg=# \df trim
>>>> List of functions
>>>> Result data type | Schema | Name | Argument data types
>>>> ------------------+--------+------+---------------------
>>>> (0 rows)
>>>>
>>>> This one's more a curiosity thing.
>>>
>>> Because TRIM is an ANSI standard, we document TRIM (BOTH, ...) but
>>> not
>>> btrim. The parser does the translation:
>>>
>>> | TRIM '(' BOTH trim_list ')'
>>> {
>>> /* various trim expressions are defined in SQL92
>>> * - thomas 1997-07-19
>>> */
>>> FuncCall *n = makeNode(FuncCall);
>>> n->funcname = SystemFuncName("btrim");
>>> n->args = $4;
>>> n->agg_star = FALSE;
>>> n->agg_distinct = FALSE;
>>> $$ = (Node *)n;
>>>
>>> Does that answer your questions?
>>>
>>> --
>>> Bruce Momjian | http://candle.pha.pa.us
>>> pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
>>> + If your life is a hard drive, | 13 Roberts Road
>>> + Christ can be your backup. | Newtown Square,
>>> Pennsylvania
>>> 19073
>>
>
> --
> Bruce Momjian | http://candle.pha.pa.us
> pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
> + If your life is a hard drive, | 13 Roberts Road
> + Christ can be your backup. | Newtown Square, Pennsylvania
> 19073
> Index: doc/src/sgml/func.sgml
> ===================================================================
> RCS file: /cvsroot/pgsql/doc/src/sgml/func.sgml,v
> retrieving revision 1.225
> diff -c -c -r1.225 func.sgml
> *** doc/src/sgml/func.sgml 1 Dec 2004 19:32:12 -0000 1.225
> --- doc/src/sgml/func.sgml 2 Dec 2004 17:12:57 -0000
> ***************
> *** 1070,1081 ****
> </row>
>
> <row>
> !
> <entry><literal><function>btrim</function>(<parameter>string</
> parameter> <type>text</type>, <parameter>characters</parameter>
> <type>text</type>)</literal></entry>
> <entry><type>text</type></entry>
> <entry>
> Remove the longest string consisting only of characters
> ! in <parameter>characters</parameter> from the start and end
> of
> ! <parameter>string</parameter>.
> </entry>
> <entry><literal>btrim('xyxtrimyyx', 'xy')</literal></entry>
> <entry><literal>trim</literal></entry>
> --- 1070,1082 ----
> </row>
>
> <row>
> !
> <entry><literal><function>btrim</function>(<parameter>string</
> parameter> <type>text</type>
> ! <optional>, <parameter>characters</parameter>
> <type>text</type></optional>)</literal></entry>
> <entry><type>text</type></entry>
> <entry>
> Remove the longest string consisting only of characters
> ! in <parameter>characters</parameter> (or spaces if not
> supplied)
> ! from the start and end of <parameter>string</parameter>.
> </entry>
> <entry><literal>btrim('xyxtrimyyx', 'xy')</literal></entry>
> <entry><literal>trim</literal></entry>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2004-12-02 17:26:53 Re: Changing column type from oid to int4
Previous Message Bruce Momjian 2004-12-02 17:14:18 Re: (b)trim anomalies