Re: bytea functions documentation - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: bytea functions documentation
Date
Msg-id 200111201542.fAKFgXr09234@candle.pha.pa.us
Whole thread Raw
In response to bytea functions documentation  (Joe Conway <joseph.conway@home.com>)
List pgsql-patches
Patch applied.  Thanks.

---------------------------------------------------------------------------


> Here's my first attempt at a documentation patch :-)
>
> I've created a new section to func.sgml, "Binary String Functions and
> Operators", plagiarized shamelessly from the "String Functions and
> Operators" section. There were enough differences that it made sense (at
> least to me) to give this its own section instead of cramming it in with
> normal string functions. This way I could also make the examples
> relevant, which is particularly important for bytea.
>
> One thing I think worth mentioning: while documenting the trim()
> function I realized that I never implemented the bytea equivalent of
> rtrim and ltrim. Therefore, the 'leading' and 'trailing' forms of trim,
> available with text, are not available with bytea (I'd be happy to
> correct this, but since it would require an initdb, I guess not until
> 7.3) -- the submitted doc accurately reflects this.
>
> I will look for other areas of the docs that need mention of bytea, but
> any guidance would be much appreciated.
>
>
> regards,
>
> -- Joe

[ text/html is unsupported, treating like TEXT/PLAIN ]

> *** sgml.orig/func.sgml    Mon Nov 19 01:05:01 2001
> --- sgml/func.sgml    Mon Nov 19 20:00:36 2001
> ***************
> *** 1133,1139 ****
>         <entry><type>text</type></entry>
>         <entry>
>          Encodes binary data to <acronym>ASCII</acronym>-only representation.  Supported
> !        types are: 'base64', 'hex'.
>         </entry>
>         <entry><literal>encode('123\\000\\001', 'base64')</literal></entry>
>         <entry><literal>MTIzAAE=</literal></entry>
> --- 1133,1139 ----
>         <entry><type>text</type></entry>
>         <entry>
>          Encodes binary data to <acronym>ASCII</acronym>-only representation.  Supported
> !        types are: 'base64', 'hex', 'escape'.
>         </entry>
>         <entry><literal>encode('123\\000\\001', 'base64')</literal></entry>
>         <entry><literal>MTIzAAE=</literal></entry>
> ***************
> *** 1164,1169 ****
> --- 1164,1349 ----
>    </sect1>
>
>
> +  <sect1 id="functions-binarystring">
> +   <title>Binary String Functions and Operators</title>
> +
> +   <para>
> +    This section describes functions and operators for examining and
> +    manipulating binary string values.  Strings in this context include
> +    values of the type <type>BYTEA</type>.
> +   </para>
> +
> +   <para>
> +    <acronym>SQL</acronym> defines some string functions with a special syntax where
> +    certain keywords rather than commas are used to separate the
> +    arguments.  Details are in <xref linkend="functions-binarystring-sql">.
> +    Some functions are also implemented using the regular syntax for
> +    function invocation.  (See <xref linkend="functions-binarystring-other">.)
> +   </para>
> +
> +   <table id="functions-binarystring-sql">
> +    <title><acronym>SQL</acronym> Binary String Functions and Operators</title>
> +    <tgroup cols="5">
> +     <thead>
> +      <row>
> +       <entry>Function</entry>
> +       <entry>Return Type</entry>
> +       <entry>Description</entry>
> +       <entry>Example</entry>
> +       <entry>Result</entry>
> +      </row>
> +     </thead>
> +
> +     <tbody>
> +      <row>
> +       <entry> <parameter>string</parameter> <literal>||</literal> <parameter>string</parameter> </entry>
> +       <entry> <type>bytea</type> </entry>
> +       <entry>
> +        string concatenation
> +        <indexterm>
> +         <primary>binary strings</primary>
> +     <secondary>concatenation</secondary>
> +        </indexterm>
> +       </entry>
> +       <entry><literal>'\\\\Postgre'::bytea || '\\047SQL\\000'::bytea</></entry>
> +       <entry><literal>\\Postgre'SQL\000</></entry>
> +      </row>
> +
> +      <row>
> +       <entry><function>octet_length</function>(<parameter>string</parameter>)</entry>
> +       <entry><type>integer</type></entry>
> +       <entry>number of bytes in binary string</entry>
> +       <entry><literal>octet_length('jo\\000se'::bytea)</literal></entry>
> +       <entry><literal>5</literal></entry>
> +      </row>
> +
> +      <row>
> +       <entry><function>position</function>(<parameter>substring</parameter> in
<parameter>string</parameter>)</entry>
> +       <entry><type>integer</type></entry>
> +       <entry>location of specified substring</entry>
> +       <entry><literal>position('\\000om'::bytea in 'Th\\000omas'::bytea)</literal></entry>
> +       <entry><literal>3</literal></entry>
> +      </row>
> +
> +      <row>
> +       <entry><function>substring</function>(<parameter>string</parameter> <optional>from
<type>integer</type></optional><optional>for <type>integer</type></optional>)</entry> 
> +       <entry><type>bytea</type></entry>
> +       <entry>
> +        extract substring
> +        <indexterm>
> +         <primary>substring</primary>
> +        </indexterm>
> +       </entry>
> +       <entry><literal>substring('Th\\000omas'::bytea from 2 for 3)</literal></entry>
> +       <entry><literal>h\000o</literal></entry>
> +      </row>
> +
> +      <row>
> +       <entry>
> +        <function>trim</function>(<optional>both</optional>
> +        <parameter>characters</parameter> from
> +        <parameter>string</parameter>)
> +       </entry>
> +       <entry><type>bytea</type></entry>
> +       <entry>
> +        Removes the longest string containing only the
> +        <parameter>characters</parameter> from the
> +        beginning/end/both ends of the <parameter>string</parameter>.
> +       </entry>
> +       <entry><literal>trim('\\000'::bytea from '\\000Tom\\000'::bytea)</literal></entry>
> +       <entry><literal>Tom</literal></entry>
> +      </row>
> +
> +     </tbody>
> +    </tgroup>
> +   </table>
> +
> +   <para>
> +    Additional binary string manipulation functions are available and are
> +    listed below.  Some of them are used internally to implement the
> +    <acronym>SQL</acronym>-standard string functions listed above.
> +   </para>
> +
> +   <table id="functions-binarystring-other">
> +    <title>Other Binary String Functions</title>
> +    <tgroup cols="5">
> +     <thead>
> +      <row>
> +       <entry>Function</entry>
> +       <entry>Return Type</entry>
> +       <entry>Description</entry>
> +       <entry>Example</entry>
> +       <entry>Result</entry>
> +      </row>
> +     </thead>
> +
> +     <tbody>
> +      <row>
> +       <entry><function>btrim</function>(<parameter>string</parameter> <type>bytea</type>,
<parameter>trim</parameter><type>bytea</type>)</entry> 
> +       <entry><type>bytea</type></entry>
> +       <entry>
> +        Remove (trim) the longest string consisting only of characters
> +        in <parameter>trim</parameter> from the start and end of
> +        <parameter>string</parameter>.
> +       </entry>
> +       <entry><literal>btrim('\\000trim\\000'::bytea,'\\000'::bytea)</literal></entry>
> +       <entry><literal>trim</literal></entry>
> +      </row>
> +
> +      <row>
> +       <entry><function>length</function>(<parameter>string</parameter>)</entry>
> +       <entry><type>integer</type></entry>
> +       <entry>
> +        length of binary string
> +        <indexterm>
> +         <primary>binary strings</primary>
> +     <secondary>length</secondary>
> +        </indexterm>
> +        <indexterm>
> +         <primary>length</primary>
> +     <secondary>binary strings</secondary>
> +     <see>binary strings, length</see>
> +        </indexterm>
> +       </entry>
> +       <entry><literal>length('jo\\000se'::bytea)</></entry>
> +       <entry><literal>5</></entry>
> +      </row>
> +
> +      <row>
> +       <entry>
> +        <function>encode</function>(<parameter>string</parameter> <type>bytea</type>,
> +               <parameter>type</parameter> <type>text</type>)
> +       </entry>
> +       <entry><type>text</type></entry>
> +       <entry>
> +        Encodes binary string to <acronym>ASCII</acronym>-only representation.  Supported
> +        types are: 'base64', 'hex', 'escape'.
> +       </entry>
> +       <entry><literal>encode('123\\000456'::bytea, 'escape')</literal></entry>
> +       <entry><literal>123\000456</literal></entry>
> +      </row>
> +
> +      <row>
> +       <entry>
> +        <function>decode</function>(<parameter>string</parameter> <type>text</type>,
> +               <parameter>type</parameter> <type>text</type>)
> +       </entry>
> +       <entry><type>bytea</type></entry>
> +       <entry>
> +        Decodes binary string from <parameter>string</parameter> previously
> +        encoded with encode().  Parameter type is same as in encode().
> +       </entry>
> +       <entry><literal>decode('123\\000456', 'escape')</literal></entry>
> +       <entry><literal>123\000456</literal></entry>
> +      </row>
> +
> +     </tbody>
> +    </tgroup>
> +   </table>
> +
> +  </sect1>
> +
> +
>    <sect1 id="functions-matching">
>     <title>Pattern Matching</title>
>

>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: bytea datatype documentation patch
Next
From: Bruce Momjian
Date:
Subject: Re: fix pgcrypto usage of uint