Re: Fix doc for initcap - Mailing list pgsql-patches
From | Neil Conway |
---|---|
Subject | Re: Fix doc for initcap |
Date | |
Msg-id | 87k729i32f.fsf@mailbox.samurai.com Whole thread Raw |
In response to | Fix doc for initcap (Dennis Bjorklund <db@zigo.dhs.org>) |
Responses |
Re: Fix doc for initcap
(Dennis Bjorklund <db@zigo.dhs.org>)
|
List | pgsql-patches |
Dennis Bjorklund <db@zigo.dhs.org> writes: > Here is a small doc patch that says that initcap lowercases the rest > of the characters in the string. The current doc suggests that it > only touches the first character in each word, which is not what the > function does. The improved text is still wrong: initcap() no longer uses whitespace to separate words. I've applied the attached patch to CVS HEAD, which fixes this properly and makes some other doc cleanups. Thanks for the patch! -Neil Index: doc/src/sgml/func.sgml =================================================================== RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/func.sgml,v retrieving revision 1.187 diff -c -r1.187 func.sgml *** a/doc/src/sgml/func.sgml 22 Feb 2004 04:14:06 -0000 1.187 --- b/doc/src/sgml/func.sgml 27 Feb 2004 03:47:17 -0000 *************** *** 1003,1009 **** <row> <entry><literal><function>upper</function>(<parameter>string</parameter>)</literal></entry> <entry><type>text</type></entry> ! <entry>Convert string to upper case</entry> <entry><literal>upper('tom')</literal></entry> <entry><literal>TOM</literal></entry> </row> --- 1003,1009 ---- <row> <entry><literal><function>upper</function>(<parameter>string</parameter>)</literal></entry> <entry><type>text</type></entry> ! <entry>Convert string to uppercase</entry> <entry><literal>upper('tom')</literal></entry> <entry><literal>TOM</literal></entry> </row> *************** *** 1033,1039 **** <tbody> <row> <entry><literal><function>ascii</function>(<type>text</type>)</literal></entry> ! <entry>integer</entry> <entry><acronym>ASCII</acronym> code of the first character of the argument</entry> <entry><literal>ascii('x')</literal></entry> <entry><literal>120</literal></entry> --- 1033,1039 ---- <tbody> <row> <entry><literal><function>ascii</function>(<type>text</type>)</literal></entry> ! <entry><type>integer</type></entry> <entry><acronym>ASCII</acronym> code of the first character of the argument</entry> <entry><literal>ascii('x')</literal></entry> <entry><literal>120</literal></entry> *************** *** 1109,1124 **** <row> <entry><literal><function>initcap</function>(<type>text</type>)</literal></entry> <entry><type>text</type></entry> ! <entry>Convert first letter of each word (whitespace-separated) to upper case</entry> ! <entry><literal>initcap('hi thomas')</literal></entry> <entry><literal>Hi Thomas</literal></entry> </row> <row> ! <entry><literal><function>length</function>(<parameter>string</parameter>)</literal></entry> <entry><type>integer</type></entry> <entry> ! Number of characters in string <indexterm> <primary>character string</primary> <secondary>length</secondary> --- 1109,1128 ---- <row> <entry><literal><function>initcap</function>(<type>text</type>)</literal></entry> <entry><type>text</type></entry> ! <entry> ! Convert the first letter of each word to uppercase and the ! rest to lowercase. Words are sequences of alphanumeric ! characters separated by non-alphanumeric characters. ! </entry> ! <entry><literal>initcap('hi THOMAS')</literal></entry> <entry><literal>Hi Thomas</literal></entry> </row> <row> ! <entry><literal><function>length</function>(<parameter>string</parameter> <type>text</type>)</literal></entry> <entry><type>integer</type></entry> <entry> ! Number of characters in <parameter>string</parameter>. <indexterm> <primary>character string</primary> <secondary>length</secondary> *************** *** 1139,1145 **** <parameter>length</parameter> <type>integer</type> <optional>, <parameter>fill</parameter> <type>text</type></optional>)</literal> </entry> ! <entry>text</entry> <entry> Fill up the <parameter>string</parameter> to length <parameter>length</parameter> by prepending the characters --- 1143,1149 ---- <parameter>length</parameter> <type>integer</type> <optional>, <parameter>fill</parameter> <type>text</type></optional>)</literal> </entry> ! <entry><type>text</type></entry> <entry> Fill up the <parameter>string</parameter> to length <parameter>length</parameter> by prepending the characters *************** *** 1157,1163 **** <entry><type>text</type></entry> <entry> Remove the longest string containing only characters from ! <parameter>characters</parameter> from the start of the string. </entry> <entry><literal>ltrim('zzzytrim', 'xyz')</literal></entry> <entry><literal>trim</literal></entry> --- 1161,1168 ---- <entry><type>text</type></entry> <entry> Remove the longest string containing only characters from ! <parameter>characters</parameter> from the start of ! <parameter>string</parameter>. </entry> <entry><literal>ltrim('zzzytrim', 'xyz')</literal></entry> <entry><literal>trim</literal></entry> *************** *** 1167,1173 **** <entry><literal><function>md5</function>(<parameter>string</parameter> <type>text</type>)</literal></entry> <entry><type>text</type></entry> <entry> ! Calculates the MD5 hash of given string, returning the result in hexadecimal. </entry> <entry><literal>md5('abc')</literal></entry> <entry><literal>900150983cd24fb0 d6963f7d28e17f72</literal></entry> --- 1172,1179 ---- <entry><literal><function>md5</function>(<parameter>string</parameter> <type>text</type>)</literal></entry> <entry><type>text</type></entry> <entry> ! Calculates the MD5 hash of <parameter>string</parameter>, ! returning the result in hexadecimal. </entry> <entry><literal>md5('abc')</literal></entry> <entry><literal>900150983cd24fb0 d6963f7d28e17f72</literal></entry> *************** *** 1210,1218 **** </row> <row> ! <entry><literal><function>repeat</function>(<type>text</type>, <type>integer</type>)</literal></entry> <entry><type>text</type></entry> ! <entry>Repeat text a number of times</entry> <entry><literal>repeat('Pg', 4)</literal></entry> <entry><literal>PgPgPgPg</literal></entry> </row> --- 1216,1225 ---- </row> <row> ! <entry><literal><function>repeat</function>(<parameter>string</parameter> <type>text</type>, <parameter>number</parameter><type>integer</type>)</literal></entry> <entry><type>text</type></entry> ! <entry>Repeat <parameter>string</parameter> the specified ! <parameter>number</parameter> of times</entry> <entry><literal>repeat('Pg', 4)</literal></entry> <entry><literal>PgPgPgPg</literal></entry> </row> *************** *** 1253,1259 **** <entry><type>text</type></entry> <entry> Remove the longest string containing only characters from ! <parameter>characters</parameter> from the end of the string. </entry> <entry><literal>rtrim('trimxxxx', 'x')</literal></entry> <entry><literal>trim</literal></entry> --- 1260,1267 ---- <entry><type>text</type></entry> <entry> Remove the longest string containing only characters from ! <parameter>characters</parameter> from the end of ! <parameter>string</parameter>. </entry> <entry><literal>rtrim('trimxxxx', 'x')</literal></entry> <entry><literal>trim</literal></entry> *************** *** 3956,3967 **** <row> <entry><literal>AM</literal> or <literal>A.M.</literal> or <literal>PM</literal> or <literal>P.M.</literal></entry> ! <entry>meridian indicator (upper case)</entry> </row> <row> <entry><literal>am</literal> or <literal>a.m.</literal> or <literal>pm</literal> or <literal>p.m.</literal></entry> ! <entry>meridian indicator (lower case)</entry> </row> <row> <entry><literal>Y,YYY</literal></entry> --- 3964,3975 ---- <row> <entry><literal>AM</literal> or <literal>A.M.</literal> or <literal>PM</literal> or <literal>P.M.</literal></entry> ! <entry>meridian indicator (uppercase)</entry> </row> <row> <entry><literal>am</literal> or <literal>a.m.</literal> or <literal>pm</literal> or <literal>p.m.</literal></entry> ! <entry>meridian indicator (lowercase)</entry> </row> <row> <entry><literal>Y,YYY</literal></entry> *************** *** 4002,4017 **** <row> <entry><literal>BC</literal> or <literal>B.C.</literal> or <literal>AD</literal> or <literal>A.D.</literal></entry> ! <entry>era indicator (upper case)</entry> </row> <row> <entry><literal>bc</literal> or <literal>b.c.</literal> or <literal>ad</literal> or <literal>a.d.</literal></entry> ! <entry>era indicator (lower case)</entry> </row> <row> <entry><literal>MONTH</literal></entry> ! <entry>full upper-case month name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>Month</literal></entry> --- 4010,4025 ---- <row> <entry><literal>BC</literal> or <literal>B.C.</literal> or <literal>AD</literal> or <literal>A.D.</literal></entry> ! <entry>era indicator (uppercase)</entry> </row> <row> <entry><literal>bc</literal> or <literal>b.c.</literal> or <literal>ad</literal> or <literal>a.d.</literal></entry> ! <entry>era indicator (lowercase)</entry> </row> <row> <entry><literal>MONTH</literal></entry> ! <entry>full uppercase month name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>Month</literal></entry> *************** *** 4019,4029 **** </row> <row> <entry><literal>month</literal></entry> ! <entry>full lower-case month name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>MON</literal></entry> ! <entry>abbreviated upper-case month name (3 chars)</entry> </row> <row> <entry><literal>Mon</literal></entry> --- 4027,4037 ---- </row> <row> <entry><literal>month</literal></entry> ! <entry>full lowercase month name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>MON</literal></entry> ! <entry>abbreviated uppercase month name (3 chars)</entry> </row> <row> <entry><literal>Mon</literal></entry> *************** *** 4031,4037 **** </row> <row> <entry><literal>mon</literal></entry> ! <entry>abbreviated lower-case month name (3 chars)</entry> </row> <row> <entry><literal>MM</literal></entry> --- 4039,4045 ---- </row> <row> <entry><literal>mon</literal></entry> ! <entry>abbreviated lowercase month name (3 chars)</entry> </row> <row> <entry><literal>MM</literal></entry> *************** *** 4039,4045 **** </row> <row> <entry><literal>DAY</literal></entry> ! <entry>full upper-case day name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>Day</literal></entry> --- 4047,4053 ---- </row> <row> <entry><literal>DAY</literal></entry> ! <entry>full uppercase day name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>Day</literal></entry> *************** *** 4047,4057 **** </row> <row> <entry><literal>day</literal></entry> ! <entry>full lower-case day name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>DY</literal></entry> ! <entry>abbreviated upper-case day name (3 chars)</entry> </row> <row> <entry><literal>Dy</literal></entry> --- 4055,4065 ---- </row> <row> <entry><literal>day</literal></entry> ! <entry>full lowercase day name (blank-padded to 9 chars)</entry> </row> <row> <entry><literal>DY</literal></entry> ! <entry>abbreviated uppercase day name (3 chars)</entry> </row> <row> <entry><literal>Dy</literal></entry> *************** *** 4059,4065 **** </row> <row> <entry><literal>dy</literal></entry> ! <entry>abbreviated lower-case day name (3 chars)</entry> </row> <row> <entry><literal>DDD</literal></entry> --- 4067,4073 ---- </row> <row> <entry><literal>dy</literal></entry> ! <entry>abbreviated lowercase day name (3 chars)</entry> </row> <row> <entry><literal>DDD</literal></entry> *************** *** 4099,4117 **** </row> <row> <entry><literal>RM</literal></entry> ! <entry>month in Roman numerals (I-XII; I=January) (upper case)</entry> </row> <row> <entry><literal>rm</literal></entry> ! <entry>month in Roman numerals (i-xii; i=January) (lower case)</entry> </row> <row> <entry><literal>TZ</literal></entry> ! <entry>time-zone name (upper case)</entry> </row> <row> <entry><literal>tz</literal></entry> ! <entry>time-zone name (lower case)</entry> </row> </tbody> </tgroup> --- 4107,4125 ---- </row> <row> <entry><literal>RM</literal></entry> ! <entry>month in Roman numerals (I-XII; I=January) (uppercase)</entry> </row> <row> <entry><literal>rm</literal></entry> ! <entry>month in Roman numerals (i-xii; i=January) (lowercase)</entry> </row> <row> <entry><literal>TZ</literal></entry> ! <entry>time-zone name (uppercase)</entry> </row> <row> <entry><literal>tz</literal></entry> ! <entry>time-zone name (lowercase)</entry> </row> </tbody> </tgroup> *************** *** 4144,4155 **** </row> <row> <entry><literal>TH</literal> suffix</entry> ! <entry>upper-case ordinal number suffix</entry> <entry><literal>DDTH</literal></entry> </row> <row> <entry><literal>th</literal> suffix</entry> ! <entry>lower-case ordinal number suffix</entry> <entry><literal>DDth</literal></entry> </row> <row> --- 4152,4163 ---- </row> <row> <entry><literal>TH</literal> suffix</entry> ! <entry>uppercase ordinal number suffix</entry> <entry><literal>DDTH</literal></entry> </row> <row> <entry><literal>th</literal> suffix</entry> ! <entry>lowercase ordinal number suffix</entry> <entry><literal>DDth</literal></entry> </row> <row> *************** *** 6216,6222 **** sequence-function call is specified by a text-string argument. To achieve some compatibility with the handling of ordinary <acronym>SQL</acronym> names, the sequence functions convert their ! argument to lower case unless the string is double-quoted. Thus <programlisting> nextval('foo') <lineannotation>operates on sequence <literal>foo</literal></> nextval('FOO') <lineannotation>operates on sequence <literal>foo</literal></> --- 6224,6230 ---- sequence-function call is specified by a text-string argument. To achieve some compatibility with the handling of ordinary <acronym>SQL</acronym> names, the sequence functions convert their ! argument to lowercase unless the string is double-quoted. Thus <programlisting> nextval('foo') <lineannotation>operates on sequence <literal>foo</literal></> nextval('FOO') <lineannotation>operates on sequence <literal>foo</literal></> Index: doc/src/sgml/plpgsql.sgml =================================================================== RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/plpgsql.sgml,v retrieving revision 1.35 diff -c -r1.35 plpgsql.sgml *** a/doc/src/sgml/plpgsql.sgml 3 Feb 2004 17:34:02 -0000 1.35 --- b/doc/src/sgml/plpgsql.sgml 27 Feb 2004 03:47:48 -0000 *************** *** 392,398 **** <para> All key words and identifiers can be written in mixed upper and ! lower case. Identifiers are implicitly converted to lower-case unless double-quoted. </para> --- 392,398 ---- <para> All key words and identifiers can be written in mixed upper and ! lower case. Identifiers are implicitly converted to lowercase unless double-quoted. </para> Index: src/backend/utils/adt/oracle_compat.c =================================================================== RCS file: /var/lib/cvs/pgsql-server/src/backend/utils/adt/oracle_compat.c,v retrieving revision 1.49 diff -c -r1.49 oracle_compat.c *** a/src/backend/utils/adt/oracle_compat.c 29 Nov 2003 19:51:59 -0000 1.49 --- b/src/backend/utils/adt/oracle_compat.c 27 Feb 2004 03:21:00 -0000 *************** *** 106,114 **** * * Purpose: * ! * Returns string, with first letter of each word in uppercase, ! * all other letters in lowercase. A word is delimited by white ! * space. * ********************************************************************/ --- 106,115 ---- * * Purpose: * ! * Returns string, with first letter of each word in uppercase, all ! * other letters in lowercase. A word is defined as a sequence of ! * alphanumeric characters, delimited by non-alphanumeric ! * characters. * ********************************************************************/ *************** *** 872,878 **** ********************************************************************/ Datum ! chr (PG_FUNCTION_ARGS) { int32 cvalue = PG_GETARG_INT32(0); text *result; --- 873,879 ---- ********************************************************************/ Datum ! chr(PG_FUNCTION_ARGS) { int32 cvalue = PG_GETARG_INT32(0); text *result;
pgsql-patches by date: