diff --git a/doc/src/sgml/admin.sgml b/doc/src/sgml/admin.sgml
index dd00a55bdaca6aba61b5ae49be38e68213b54a87..7850f4f85cd776fb689654572f1ef5c25a48bf8e 100644
--- a/doc/src/sgml/admin.sgml
+++ b/doc/src/sgml/admin.sgml
@@ -1,13 +1,16 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/admin.sgml,v 1.11 1999/05/04 02:16:57 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/admin.sgml,v 1.12 1999/05/12 07:32:42 thomas Exp $
 
 Postgres Administrator's Guide.
 Derived from postgres.sgml.
 - thomas 1998-10-27
 
 $Log: admin.sgml,v $
-Revision 1.11  1999/05/04 02:16:57  thomas
-Include chapter on security.
+Revision 1.12  1999/05/12 07:32:42  thomas
+Include mention of CASE, COALESCE, and IFNULL.
+Add date/time parsing procedure (perhaps should be in appendix).
+Add time zone information (ditto).
+Update keyword list.
 
 Revision 1.10  1999/01/19 16:06:25  thomas
 Merge current.sgml into release.sgml so all release notes are in the same
@@ -59,23 +62,23 @@ Bigger updates to the installation instructions (install and config).
 
 <!-- Title information -->
 
-<Title>PostgreSQL Administrator's Guide</Title>
-<BookInfo>
-    <ReleaseInfo>Covering v6.4 for general release</ReleaseInfo>
-    <BookBiblio>
-    <AuthorGroup>
-      <CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
-    </AuthorGroup>
+ <Title>PostgreSQL Administrator's Guide</Title>
+ <BookInfo>
+  <ReleaseInfo>Covering v6.4 for general release</ReleaseInfo>
+  <BookBiblio>
+   <AuthorGroup>
+    <CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
+   </AuthorGroup>
 <!-- editor in authorgroup is not supported
     <AuthorGroup>
 -->
-      <Editor>
-        <FirstName>Thomas</FirstName>
-        <SurName>Lockhart</SurName>
-        <Affiliation>
-          <OrgName>Caltech/JPL</OrgName>
-        </Affiliation>
-      </Editor>
+   <Editor>
+    <FirstName>Thomas</FirstName>
+    <SurName>Lockhart</SurName>
+    <Affiliation>
+     <OrgName>Caltech/JPL</OrgName>
+    </Affiliation>
+   </Editor>
 <!--
     </AuthorGroup>
 -->
@@ -84,17 +87,17 @@ Bigger updates to the installation instructions (install and config).
     <AuthorInitials>TGL</AuthorInitials>
 -->
 
-    <Date>(last updated 1998-10-27)</Date>
-    </BookBiblio>
+   <Date>(last updated 1999-04-08)</Date>
+  </BookBiblio>
 
-<LegalNotice>
-<Para>
-<ProductName>PostgreSQL</ProductName> is copyright (C) 1998 
-by the Postgres Global Development Group.
-</Para>
-</LegalNotice>
+  <LegalNotice>
+   <Para>
+    <ProductName>PostgreSQL</ProductName> is copyright (C) 1998-9
+    by the Postgres Global Development Group.
+   </Para>
+  </LegalNotice>
 
-</BookInfo>
+ </BookInfo>
 
 <!--
 <TOC> </TOC>
@@ -109,36 +112,36 @@ Your name here...
 </Dedication>
 -->
 
-<Preface id="preface">
-<Title>Summary</Title>
-
-<Para>
-<ProductName>Postgres</ProductName>, 
- developed originally in the UC Berkeley Computer Science Department,
- pioneered many of the object-relational concepts
- now becoming available in some commercial databases.
-It provides SQL92/SQL3 language support,
- transaction integrity, and type extensibility.
- <ProductName>PostgreSQL</ProductName> is a public-domain, open source descendant
- of this original Berkeley code.
-</Para>
-</Preface>
-
-&intro-ag;
-
-&ports;
-&config;
-&install;
-&installw;
-&runtime;
-&security;
-&options;
-&start-ag;
-&recovery;
-&regress;
-&release;
-
-&biblio;
+ <Preface id="preface">
+  <Title>Summary</Title>
+
+  <Para>
+   <ProductName>Postgres</ProductName>, 
+   developed originally in the UC Berkeley Computer Science Department,
+   pioneered many of the object-relational concepts
+   now becoming available in some commercial databases.
+   It provides SQL92/SQL3 language support,
+   transaction integrity, and type extensibility.
+   <ProductName>PostgreSQL</ProductName> is a public-domain, open source descendant
+   of this original Berkeley code.
+  </Para>
+ </Preface>
+
+  &intro-ag;
+
+  &ports;
+  &config;
+  &install;
+  &installw;
+  &runtime;
+  &security;
+  &options;
+  &start-ag;
+  &recovery;
+  &regress;
+  &release;
+
+  &biblio;
 
 <!--
 Don't bother with an index until we get some index entries.
diff --git a/doc/src/sgml/biblio.sgml b/doc/src/sgml/biblio.sgml
index 412f613d55b33bfbf80908515b28f4a453d11d8d..2e747ecbb21acb06fa1e825a57b75cfb854a2dd2 100644
--- a/doc/src/sgml/biblio.sgml
+++ b/doc/src/sgml/biblio.sgml
@@ -2,7 +2,8 @@
   <title>Bibliography</title>
 
   <para>
-   Selected references and readings for <acronym>SQL</acronym> and <productname>Postgres</productname>.
+   Selected references and readings for <acronym>SQL</acronym>
+   and <productname>Postgres</productname>.
   </para>
 
   <bibliodiv>
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index 245fd1d4a08d971ccb69b197439322ff434b05bb..5cf23ee7d73c5583f3feb7a5f2abea4de5c64d6c 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -1,271 +1,271 @@
-<chapter id="datatype">
-<title>Data Types</title>
+ <chapter id="datatype">
+  <title>Data Types</title>
 
-<abstract>
-<para>
-Describes the built-in data types available in 
-<productname>Postgres</productname>.
-</para>
-</abstract>
-
-<para>
-<productname>Postgres</productname> has a rich set of native data 
-types available to users.
-Users may add new types to <productname>Postgres</productname> using the
-<command>DEFINE TYPE</command>
-command described elsewhere.
-</para>
-
-<para>
-In the context of data types, the following sections will discuss 
-<acronym>SQL</acronym> standards compliance, porting issues, and usage.
-
-Some <productname>Postgres</productname> types correspond directly to 
-<acronym>SQL92</acronym>-compatible types. In other
-cases, data types defined by <acronym>SQL92</acronym> syntax are mapped directly
-into native <productname>Postgres</productname> types. 
-
-Many of the built-in types have obvious external formats. However, several
-types are either unique to <productname>Postgres</productname>, 
-such as open and closed paths, or have
-several possibilities for formats, such as the date and time types.
-</para>
-
-<para>
-<table tocentry="1">
-<title><productname>Postgres</productname> Data Types</title>
-<titleabbrev>Data Types</titleabbrev>
-<tgroup cols="3">
-<thead>
-  <row>
-    <entry><productname>Postgres</productname> Type</entry>
-    <entry><acronym>SQL92</acronym> or <acronym>SQL3</acronym> Type</entry>
-    <entry>Description</entry>
-  </row>
-</thead>
-<tbody>
-  <row>
-    <entry>bool</entry>
-    <entry>boolean</entry>
-    <entry>logical boolean (true/false)</entry>
-  </row>
-  <row>
-    <entry>box</entry>
-    <entry></entry>
-    <entry>rectangular box in 2D plane</entry>
-  </row>
-  <row>
-    <entry>char(n)</entry>
-    <entry>character(n)</entry>
-    <entry>fixed-length character string</entry>
-  </row>
-  <row>
-    <entry>cidr</entry>
-    <entry></entry>
-    <entry>IP version 4 network or host address</entry>
-  </row>
-  <row>
-    <entry>circle</entry>
-    <entry></entry>
-    <entry>circle in 2D plane</entry>
-  </row>
-  <row>
-    <entry>date</entry>
-    <entry>date</entry>
-    <entry>calendar date without time of day</entry>
-  </row>
-  <row>
-    <entry>float4/8</entry>
-    <entry>float(p)</entry>
-    <entry>floating-point number with precision p</entry>
-  </row>
-  <row>
-    <entry>float8</entry>
-    <entry>real, double precision</entry>
-    <entry>double-precision floating-point number</entry>
-  </row>
-  <row>
-    <entry>inet</entry>
-    <entry></entry>
-    <entry>IP version 4 network or host address</entry>
-  </row>
-  <row>
-    <entry>int2</entry>
-    <entry>smallint</entry>
-    <entry>signed two-byte integer</entry>
-  </row>
-  <row>
-    <entry>int4</entry>
-    <entry>int, integer</entry>
-    <entry>signed 4-byte integer</entry>
-  </row>
-  <row>
-    <entry>int4</entry>
-    <entry>decimal(p,s)</entry>
-    <entry>exact numeric for p <= 9, s = 0</entry>
-  </row>
-  <row>
-    <entry>int4</entry>
-    <entry>numeric(p,s)</entry>
-    <entry>exact numeric for p == 9, s = 0</entry>
-  </row>
-  <row>
-    <entry>int8</entry>
-    <entry></entry>
-    <entry>signed 8-byte integer</entry>
-  </row>
-  <row>
-    <entry>line</entry>
-    <entry></entry>
-    <entry>infinite line in 2D plane</entry>
-  </row>
-  <row>
-    <entry>lseg</entry>
-    <entry></entry>
-    <entry>line segment in 2D plane</entry>
-  </row>
-  <row>
-    <entry>money</entry>
-    <entry>decimal(9,2)</entry>
-    <entry>US-style currency</entry>
-  </row>
-  <row>
-    <entry>path</entry>
-    <entry></entry>
-    <entry>open and closed geometric path in 2D plane</entry>
-  </row>
-  <row>
-    <entry>point</entry>
-    <entry></entry>
-    <entry>geometric point in 2D plane</entry>
-  </row>
-  <row>
-    <entry>polygon</entry>
-    <entry></entry>
-    <entry>closed geometric path in 2D plane</entry>
-  </row>
-  <row>
-    <entry>serial</entry>
-    <entry></entry>
-    <entry>unique id for indexing and cross-reference</entry>
-  </row>
-  <row>
-    <entry>time</entry>
-    <entry>time</entry>
-    <entry>time of day</entry>
-  </row>
-  <row>
-    <entry>timespan</entry>
-    <entry>interval</entry>
-    <entry>general-use time span</entry>
-  </row>
-  <row>
-    <entry>timestamp</entry>
-    <entry>timestamp with time zone</entry>
-    <entry>date/time</entry>
-  </row>
-  <row>
-    <entry>varchar(n)</entry>
-    <entry>character varying(n)</entry>
-    <entry>variable-length character string</entry>
-  </row>
-</tbody>
-</tgroup>
-</table>
-</para>
-
-<para>
-<note>
-<para>
-The <type>cidr</type> and <type>inet</type> types are designed to handle any IP type 
-but only ipv4 is handled in the current implementation.  
-Everything here that talks about ipv4 will apply to ipv6 in a future release.</para>
-</note></para>
-
-<para>
-<table tocentry="1">
-<title><productname>Postgres</productname> Function Constants</title>
-<titleabbrev>Constants</titleabbrev>
-<tgroup cols="3">
-<thead>
-  <row>
-    <entry><productname>Postgres</productname> Function</entry>
-    <entry><acronym>SQL92</acronym> Constant</entry>
-    <entry>Description</entry>
-  </row>
-</thead>
-<tbody>
-  <row>
-    <entry>getpgusername()</entry>
-    <entry>current_user</entry>
-    <entry>user name in current session</entry>
-  </row>
-  <row>
-    <entry>date('now')</entry>
-    <entry>current_date</entry>
-    <entry>date of current transaction</entry>
-  </row>
-  <row>
-    <entry>time('now')</entry>
-    <entry>current_time</entry>
-    <entry>time of current transaction</entry>
-  </row>
-  <row>
-    <entry>timestamp('now')</entry>
-    <entry>current_timestamp</entry>
-    <entry>date and time of current transaction</entry>
-  </row>
-</tbody>
-</tgroup>
-</table>
-</para>
-
-<para>
-<productname>Postgres</productname> has features at the forefront of 
-<acronym>ORDBMS</acronym> development. In addition to
-<acronym>SQL3</acronym> conformance, substantial portions 
-of <acronym>SQL92</acronym> are also supported.
-Although we strive for <acronym>SQL92</acronym> compliance, 
-there are some aspects of the standard
-which are ill considered and which should not live through subsequent standards.
-<productname>Postgres</productname> will not make great efforts to 
-conform to these features; however, these tend to apply in little-used 
-or obsure cases, and a typical user is not likely to run into them.</para>
-
-<para>
-Most of the input and output functions corresponding to the
-base types (e.g., integers and floating point numbers) do some
-error-checking.
-Some of the operators and functions (e.g.,
-addition and multiplication) do not perform run-time error-checking in the
-interests of improving execution speed.
-On some systems, for example, the numeric operators for some data types may
-silently underflow or overflow.
-</para>
-
-<para>
-Note that some of the input and output functions are not invertible.  That is,
-the result of an output function may lose precision when compared to
-the original input.
-
-<note>
-<para>
-The original <productname>Postgres</productname> v4.2 code received from
-Berkeley rounded all double precision floating point results to six digits for
-output. Starting with v6.1, floating point numbers are allowed to retain
-most of the intrinsic precision of the type (typically 15 digits for doubles, 
-6 digits for 4-byte floats). 
-Other types with underlying floating point fields (e.g. geometric
-types) carry similar precision.</para>
-</note>
-</para>
+  <abstract>
+   <para>
+    Describes the built-in data types available in 
+    <productname>Postgres</productname>.
+   </para>
+  </abstract>
+
+  <para>
+   <productname>Postgres</productname> has a rich set of native data 
+   types available to users.
+   Users may add new types to <productname>Postgres</productname> using the
+   <command>DEFINE TYPE</command>
+   command described elsewhere.
+  </para>
+
+  <para>
+   In the context of data types, the following sections will discuss 
+   <acronym>SQL</acronym> standards compliance, porting issues, and usage.
+
+   Some <productname>Postgres</productname> types correspond directly to 
+   <acronym>SQL92</acronym>-compatible types. In other
+   cases, data types defined by <acronym>SQL92</acronym> syntax are mapped directly
+   into native <productname>Postgres</productname> types. 
+
+   Many of the built-in types have obvious external formats. However, several
+   types are either unique to <productname>Postgres</productname>, 
+   such as open and closed paths, or have
+   several possibilities for formats, such as the date and time types.
+  </para>
+
+  <para>
+   <table tocentry="1">
+    <title><productname>Postgres</productname> Data Types</title>
+    <titleabbrev>Data Types</titleabbrev>
+    <tgroup cols="3">
+     <thead>
+      <row>
+       <entry><productname>Postgres</productname> Type</entry>
+       <entry><acronym>SQL92</acronym> or <acronym>SQL3</acronym> Type</entry>
+       <entry>Description</entry>
+      </row>
+     </thead>
+     <tbody>
+      <row>
+       <entry>bool</entry>
+       <entry>boolean</entry>
+       <entry>logical boolean (true/false)</entry>
+      </row>
+      <row>
+       <entry>box</entry>
+       <entry></entry>
+       <entry>rectangular box in 2D plane</entry>
+      </row>
+      <row>
+       <entry>char(n)</entry>
+       <entry>character(n)</entry>
+       <entry>fixed-length character string</entry>
+      </row>
+      <row>
+       <entry>cidr</entry>
+       <entry></entry>
+       <entry>IP version 4 network or host address</entry>
+      </row>
+      <row>
+       <entry>circle</entry>
+       <entry></entry>
+       <entry>circle in 2D plane</entry>
+      </row>
+      <row>
+       <entry>date</entry>
+       <entry>date</entry>
+       <entry>calendar date without time of day</entry>
+      </row>
+      <row>
+       <entry>float4/8</entry>
+       <entry>float(p)</entry>
+       <entry>floating-point number with precision p</entry>
+      </row>
+      <row>
+       <entry>float8</entry>
+       <entry>real, double precision</entry>
+       <entry>double-precision floating-point number</entry>
+      </row>
+      <row>
+       <entry>inet</entry>
+       <entry></entry>
+       <entry>IP version 4 network or host address</entry>
+      </row>
+      <row>
+       <entry>int2</entry>
+       <entry>smallint</entry>
+       <entry>signed two-byte integer</entry>
+      </row>
+      <row>
+       <entry>int4</entry>
+       <entry>int, integer</entry>
+       <entry>signed 4-byte integer</entry>
+      </row>
+      <row>
+       <entry>int4</entry>
+       <entry>decimal(p,s)</entry>
+       <entry>exact numeric for p <= 9, s = 0</entry>
+      </row>
+      <row>
+       <entry>int4</entry>
+       <entry>numeric(p,s)</entry>
+       <entry>exact numeric for p == 9, s = 0</entry>
+      </row>
+      <row>
+       <entry>int8</entry>
+       <entry></entry>
+       <entry>signed 8-byte integer</entry>
+      </row>
+      <row>
+       <entry>line</entry>
+       <entry></entry>
+       <entry>infinite line in 2D plane</entry>
+      </row>
+      <row>
+       <entry>lseg</entry>
+       <entry></entry>
+       <entry>line segment in 2D plane</entry>
+      </row>
+      <row>
+       <entry>money</entry>
+       <entry>decimal(9,2)</entry>
+       <entry>US-style currency</entry>
+      </row>
+      <row>
+       <entry>path</entry>
+       <entry></entry>
+       <entry>open and closed geometric path in 2D plane</entry>
+      </row>
+      <row>
+       <entry>point</entry>
+       <entry></entry>
+       <entry>geometric point in 2D plane</entry>
+      </row>
+      <row>
+       <entry>polygon</entry>
+       <entry></entry>
+       <entry>closed geometric path in 2D plane</entry>
+      </row>
+      <row>
+       <entry>serial</entry>
+       <entry></entry>
+       <entry>unique id for indexing and cross-reference</entry>
+      </row>
+      <row>
+       <entry>time</entry>
+       <entry>time</entry>
+       <entry>time of day</entry>
+      </row>
+      <row>
+       <entry>timespan</entry>
+       <entry>interval</entry>
+       <entry>general-use time span</entry>
+      </row>
+      <row>
+       <entry>timestamp</entry>
+       <entry>timestamp with time zone</entry>
+       <entry>date/time</entry>
+      </row>
+      <row>
+       <entry>varchar(n)</entry>
+       <entry>character varying(n)</entry>
+       <entry>variable-length character string</entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+  </para>
+
+  <para>
+   <note>
+    <para>
+     The <type>cidr</type> and <type>inet</type> types are designed to handle any IP type 
+     but only ipv4 is handled in the current implementation.  
+     Everything here that talks about ipv4 will apply to ipv6 in a future release.</para>
+   </note></para>
+
+  <para>
+   <table tocentry="1">
+    <title><productname>Postgres</productname> Function Constants</title>
+    <titleabbrev>Constants</titleabbrev>
+    <tgroup cols="3">
+     <thead>
+      <row>
+       <entry><productname>Postgres</productname> Function</entry>
+       <entry><acronym>SQL92</acronym> Constant</entry>
+       <entry>Description</entry>
+      </row>
+     </thead>
+     <tbody>
+      <row>
+       <entry>getpgusername()</entry>
+       <entry>current_user</entry>
+       <entry>user name in current session</entry>
+      </row>
+      <row>
+       <entry>date('now')</entry>
+       <entry>current_date</entry>
+       <entry>date of current transaction</entry>
+      </row>
+      <row>
+       <entry>time('now')</entry>
+       <entry>current_time</entry>
+       <entry>time of current transaction</entry>
+      </row>
+      <row>
+       <entry>timestamp('now')</entry>
+       <entry>current_timestamp</entry>
+       <entry>date and time of current transaction</entry>
+      </row>
+     </tbody>
+    </tgroup>
+   </table>
+  </para>
+
+  <para>
+   <productname>Postgres</productname> has features at the forefront of 
+   <acronym>ORDBMS</acronym> development. In addition to
+   <acronym>SQL3</acronym> conformance, substantial portions 
+   of <acronym>SQL92</acronym> are also supported.
+   Although we strive for <acronym>SQL92</acronym> compliance, 
+   there are some aspects of the standard
+   which are ill considered and which should not live through subsequent standards.
+   <productname>Postgres</productname> will not make great efforts to 
+   conform to these features; however, these tend to apply in little-used 
+   or obsure cases, and a typical user is not likely to run into them.</para>
+
+  <para>
+   Most of the input and output functions corresponding to the
+   base types (e.g., integers and floating point numbers) do some
+   error-checking.
+   Some of the operators and functions (e.g.,
+   addition and multiplication) do not perform run-time error-checking in the
+   interests of improving execution speed.
+   On some systems, for example, the numeric operators for some data types may
+   silently underflow or overflow.
+  </para>
+
+  <para>
+   Note that some of the input and output functions are not invertible.  That is,
+   the result of an output function may lose precision when compared to
+   the original input.
+
+   <note>
+    <para>
+     The original <productname>Postgres</productname> v4.2 code received from
+     Berkeley rounded all double precision floating point results to six digits for
+     output. Starting with v6.1, floating point numbers are allowed to retain
+     most of the intrinsic precision of the type (typically 15 digits for doubles, 
+     6 digits for 4-byte floats). 
+     Other types with underlying floating point fields (e.g. geometric
+     types) carry similar precision.</para>
+   </note>
+  </para>
 
-<sect1>
-<title>Numeric Types</title>
+  <sect1>
+   <title>Numeric Types</title>
 
-<para>
-Numeric types consist of two- and four-byte integers and four- and eight-byte
-floating point numbers.</para>
+   <para>
+    Numeric types consist of two- and four-byte integers and four- and eight-byte
+    floating point numbers.</para>
 
 <para>
 <table tocentry="1">
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index f6b640c1b863dc1a04d56d2f5217d58e7778220d..0c27254c2208fc40ea0ada115484c1b22ff572cf 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -1,69 +1,117 @@
-<Chapter Id="functions">
-<Title>Functions</Title>
+ <Chapter Id="functions">
+  <Title id="functions-title">Functions</Title>
 
-<Abstract>
-<Para>
-Describes the built-in functions available in <ProductName>Postgres</ProductName>.
-</Para>
-</Abstract>
+  <Abstract>
+   <Para>
+    Describes the built-in functions available in <ProductName>Postgres</ProductName>.
+   </Para>
+  </Abstract>
 
-<Para>
-Many data types have functions available for conversion to other related types.
-In addition, there are some type-specific functions. Some functions are also
-available through operators and may be documented as operators only.
-</Para>
+  <Para>
+   Many data types have functions available for conversion to other related types.
+   In addition, there are some type-specific functions. Some functions are also
+   available through operators and may be documented as operators only.
+  </Para>
 
-<sect1>
-<title id="math-funcs">Mathematical Functions</title>
+  <sect1>
+   <title id="sql-funcs">SQL Functions</title>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE>Mathematical Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> dexp(float8) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> raise e to the specified exponent </ENTRY>
-<ENTRY> dexp(2.0) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> dpow(float8,float8) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> raise a number to the specified exponent </ENTRY>
-<ENTRY> dpow(2.0, 16.0) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> float(int) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> convert integer to floating point </ENTRY>
-<ENTRY> float(2) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> float4(int) </ENTRY>
-<ENTRY> float4 </ENTRY>
-<ENTRY> convert integer to floating point </ENTRY>
-<ENTRY> float4(2) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> integer(float) </ENTRY>
-<ENTRY> int </ENTRY>
-<ENTRY> convert floating point to integer </ENTRY>
-<ENTRY> integer(2.0) </ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</sect1>
+   <para>
+    <quote><acronym>SQL</acronym> functions</quote> are constructs
+    defined by the <acronym>SQL92</acronym> standard which have
+    function-like syntax but which can not be implemented as simple
+    functions. 
+   </para>
+
+   <para>
+    <TABLE TOCENTRY="1">
+     <TITLE>SQL Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> COALESCE(<replaceable class="parameter">list</replaceable>) </ENTRY>
+	<ENTRY> non-NULL </ENTRY>
+	<ENTRY> return first non-NULL value in list </ENTRY>
+	<ENTRY> COALESCE(<replaceable class="parameter">c1</replaceable>, <replaceable class="parameter">c2</replaceable> + 5, 0) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> IFNULL(<replaceable
+	  class="parameter">input</replaceable>,<replaceable> class="parameter">non-NULL substitute</replaceable>) </ENTRY>
+	<ENTRY> non-NULL </ENTRY>
+	<ENTRY> return second argument if first is NULL </ENTRY>
+	<ENTRY> IFNULL(<replaceable class="parameter">c1</replaceable>, 'N/A')</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> CASE(WHEN <replaceable class="parameter">expr</replaceable> THEN <replaceable class="parameter">expr</replaceable> [...] ELSE <replaceable class="parameter">expr</replaceable> ) </ENTRY>
+	<ENTRY> <replaceable class="parameter">expr</replaceable> </ENTRY>
+	<ENTRY> return expression for first true clause </ENTRY>
+	<ENTRY> CASE(WHEN <replaceable class="parameter">c1</replaceable> = 1 THEN 'match' ELSE 'no match') </ENTRY>
+       </ROW>
+      </tbody>
+     </tgroup>
+    </table>
+   </para>
+  </sect1>
+
+  <sect1>
+   <title id="math-funcs">Mathematical Functions</title>
+
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE>Mathematical Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> dexp(float8) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> raise e to the specified exponent </ENTRY>
+	<ENTRY> dexp(2.0) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> dpow(float8,float8) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> raise a number to the specified exponent </ENTRY>
+	<ENTRY> dpow(2.0, 16.0) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> float(int) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> convert integer to floating point </ENTRY>
+	<ENTRY> float(2) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> float4(int) </ENTRY>
+	<ENTRY> float4 </ENTRY>
+	<ENTRY> convert integer to floating point </ENTRY>
+	<ENTRY> float4(2) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> integer(float) </ENTRY>
+	<ENTRY> int </ENTRY>
+	<ENTRY> convert floating point to integer </ENTRY>
+	<ENTRY> integer(2.0) </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </sect1>
 
   <sect1>
    <title>String Functions</title>
@@ -146,573 +194,574 @@ available through operators and may be documented as operators only.
     Some are used internally to implement the SQL92 string functions listed above.
    </Para>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE>String Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> char(text) </ENTRY>
-<ENTRY> char </ENTRY>
-<ENTRY> convert text to char type </ENTRY>
-<ENTRY> char('text string') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> char(varchar) </ENTRY>
-<ENTRY> char </ENTRY>
-<ENTRY> convert varchar to char type </ENTRY>
-<ENTRY> char(varchar 'varchar string') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> initcap(text) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> first letter of each word to upper case </ENTRY>
-<ENTRY> initcap('thomas') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> lpad(text,int,text) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> left pad string to specified length </ENTRY>
-<ENTRY> lpad('hi',4,'??') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> ltrim(text,text) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> left trim characters from text </ENTRY>
-<ENTRY> ltrim('xxxxtrim','x') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> textpos(text,text) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> locate specified substring </ENTRY>
-<ENTRY> position('high','ig') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> rpad(text,int,text) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> right pad string to specified length </ENTRY>
-<ENTRY> rpad('hi',4,'x') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> rtrim(text,text) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> right trim characters from text </ENTRY>
-<ENTRY> rtrim('trimxxxx','x') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> substr(text,int[,int]) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> extract specified substring </ENTRY>
-<ENTRY> substr('hi there',3,5) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> text(char) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> convert char to text type </ENTRY>
-<ENTRY> text('char string') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> text(varchar) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> convert varchar to text type </ENTRY>
-<ENTRY> text(varchar 'varchar string') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> translate(text,from,to) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> convert character in string </ENTRY>
-<ENTRY> translate('12345', '1', 'a') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> varchar(char) </ENTRY>
-<ENTRY> varchar </ENTRY>
-<ENTRY> convert char to varchar type </ENTRY>
-<ENTRY> varchar('char string') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> varchar(text) </ENTRY>
-<ENTRY> varchar </ENTRY>
-<ENTRY> convert text to varchar type </ENTRY>
-<ENTRY> varchar('text string') </ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE>String Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> char(text) </ENTRY>
+	<ENTRY> char </ENTRY>
+	<ENTRY> convert text to char type </ENTRY>
+	<ENTRY> char('text string') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> char(varchar) </ENTRY>
+	<ENTRY> char </ENTRY>
+	<ENTRY> convert varchar to char type </ENTRY>
+	<ENTRY> char(varchar 'varchar string') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> initcap(text) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> first letter of each word to upper case </ENTRY>
+	<ENTRY> initcap('thomas') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> lpad(text,int,text) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> left pad string to specified length </ENTRY>
+	<ENTRY> lpad('hi',4,'??') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ltrim(text,text) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> left trim characters from text </ENTRY>
+	<ENTRY> ltrim('xxxxtrim','x') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> textpos(text,text) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> locate specified substring </ENTRY>
+	<ENTRY> position('high','ig') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> rpad(text,int,text) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> right pad string to specified length </ENTRY>
+	<ENTRY> rpad('hi',4,'x') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> rtrim(text,text) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> right trim characters from text </ENTRY>
+	<ENTRY> rtrim('trimxxxx','x') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> substr(text,int[,int]) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> extract specified substring </ENTRY>
+	<ENTRY> substr('hi there',3,5) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> text(char) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> convert char to text type </ENTRY>
+	<ENTRY> text('char string') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> text(varchar) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> convert varchar to text type </ENTRY>
+	<ENTRY> text(varchar 'varchar string') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> translate(text,from,to) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> convert character in string </ENTRY>
+	<ENTRY> translate('12345', '1', 'a') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> varchar(char) </ENTRY>
+	<ENTRY> varchar </ENTRY>
+	<ENTRY> convert char to varchar type </ENTRY>
+	<ENTRY> varchar('char string') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> varchar(text) </ENTRY>
+	<ENTRY> varchar </ENTRY>
+	<ENTRY> convert text to varchar type </ENTRY>
+	<ENTRY> varchar('text string') </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
 
-<para>
-Most functions explicitly defined for text will work for char() and varchar() arguments.
-</para>
-</sect1>
+   <para>
+    Most functions explicitly defined for text will work for char() and varchar() arguments.
+   </para>
+  </sect1>
 
-<sect1>
-<title>Date/Time Functions</title>
+  <sect1>
+   <title>Date/Time Functions</title>
 
-<para>
-The date/time functions provide a powerful set of tools for manipulating various date/time types.
-</para>
+   <para>
+    The date/time functions provide a powerful set of tools
+    for manipulating various date/time types.
+   </para>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE>Date/Time Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> abstime(datetime) </ENTRY>
-<ENTRY> abstime </ENTRY>
-<ENTRY> convert to abstime </ENTRY>
-<ENTRY> abstime('now'::datetime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> age(datetime,datetime) </ENTRY>
-<ENTRY> timespan </ENTRY>
-<ENTRY> span preserving months and years </ENTRY>
-<ENTRY> age('now','1957-06-13'::datetime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> datetime(abstime) </ENTRY>
-<ENTRY> datetime </ENTRY>
-<ENTRY> convert to datetime </ENTRY>
-<ENTRY> datetime('now'::abstime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> datetime(date) </ENTRY>
-<ENTRY> datetime </ENTRY>
-<ENTRY> convert to datetime </ENTRY>
-<ENTRY> datetime('today'::date) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> datetime(date,time) </ENTRY>
-<ENTRY> datetime </ENTRY>
-<ENTRY> convert to datetime </ENTRY>
-<ENTRY> datetime('1998-02-24'::datetime, '23:07'::time); </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> date_part(text,datetime) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> specified portion of date field </ENTRY>
-<ENTRY> date_part('dow','now'::datetime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> date_part(text,timespan) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> specified portion of time field </ENTRY>
-<ENTRY> date_part('hour','4 hrs 3 mins'::timespan) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> date_trunc(text,datetime) </ENTRY>
-<ENTRY> datetime </ENTRY>
-<ENTRY> truncate date at specified units </ENTRY>
-<ENTRY> date_trunc('month','now'::abstime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> isfinite(abstime) </ENTRY>
-<ENTRY> bool </ENTRY>
-<ENTRY> TRUE if this is a finite time </ENTRY>
-<ENTRY> isfinite('now'::abstime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> isfinite(datetime) </ENTRY>
-<ENTRY> bool </ENTRY>
-<ENTRY> TRUE if this is a finite time </ENTRY>
-<ENTRY> isfinite('now'::datetime) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> isfinite(timespan) </ENTRY>
-<ENTRY> bool </ENTRY>
-<ENTRY> TRUE if this is a finite time </ENTRY>
-<ENTRY> isfinite('4 hrs'::timespan) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> reltime(timespan) </ENTRY>
-<ENTRY> reltime </ENTRY>
-<ENTRY> convert to reltime </ENTRY>
-<ENTRY> reltime('4 hrs'::timespan) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> timespan(reltime) </ENTRY>
-<ENTRY> timespan </ENTRY>
-<ENTRY> convert to timespan </ENTRY>
-<ENTRY> timespan('4 hours'::reltime) </ENTRY>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE>Date/Time Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> abstime(datetime) </ENTRY>
+	<ENTRY> abstime </ENTRY>
+	<ENTRY> convert to abstime </ENTRY>
+	<ENTRY> abstime('now'::datetime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> age(datetime,datetime) </ENTRY>
+	<ENTRY> timespan </ENTRY>
+	<ENTRY> span preserving months and years </ENTRY>
+	<ENTRY> age('now','1957-06-13'::datetime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> datetime(abstime) </ENTRY>
+	<ENTRY> datetime </ENTRY>
+	<ENTRY> convert to datetime </ENTRY>
+	<ENTRY> datetime('now'::abstime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> datetime(date) </ENTRY>
+	<ENTRY> datetime </ENTRY>
+	<ENTRY> convert to datetime </ENTRY>
+	<ENTRY> datetime('today'::date) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> datetime(date,time) </ENTRY>
+	<ENTRY> datetime </ENTRY>
+	<ENTRY> convert to datetime </ENTRY>
+	<ENTRY> datetime('1998-02-24'::datetime, '23:07'::time); </ENTRY>
   </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
+       <ROW>
+	<ENTRY> date_part(text,datetime) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> specified portion of date field </ENTRY>
+	<ENTRY> date_part('dow','now'::datetime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> date_part(text,timespan) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> specified portion of time field </ENTRY>
+	<ENTRY> date_part('hour','4 hrs 3 mins'::timespan) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> date_trunc(text,datetime) </ENTRY>
+	<ENTRY> datetime </ENTRY>
+	<ENTRY> truncate date at specified units </ENTRY>
+	<ENTRY> date_trunc('month','now'::abstime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> isfinite(abstime) </ENTRY>
+	<ENTRY> bool </ENTRY>
+	<ENTRY> TRUE if this is a finite time </ENTRY>
+	<ENTRY> isfinite('now'::abstime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> isfinite(datetime) </ENTRY>
+	<ENTRY> bool </ENTRY>
+	<ENTRY> TRUE if this is a finite time </ENTRY>
+	<ENTRY> isfinite('now'::datetime) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> isfinite(timespan) </ENTRY>
+	<ENTRY> bool </ENTRY>
+	<ENTRY> TRUE if this is a finite time </ENTRY>
+	<ENTRY> isfinite('4 hrs'::timespan) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> reltime(timespan) </ENTRY>
+	<ENTRY> reltime </ENTRY>
+	<ENTRY> convert to reltime </ENTRY>
+	<ENTRY> reltime('4 hrs'::timespan) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> timespan(reltime) </ENTRY>
+	<ENTRY> timespan </ENTRY>
+	<ENTRY> convert to timespan </ENTRY>
+	<ENTRY> timespan('4 hours'::reltime) </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
 
-<Para>
-For the
-<Function>date_part</Function> and <Function>date_trunc</Function>
-functions, arguments can be
-`year', `month', `day', `hour', `minute', and `second',
-as well as the more specialized quantities
-`decade', `century', `millenium', `millisecond', and `microsecond'.
-<Function>date_part</Function> allows `dow'
-to return day of week and `epoch' to return seconds since 1970 (for <Type>datetime</Type>)
-or 'epoch' to return total elapsed seconds (for <Type>timespan</Type>).
-</Para>
-</sect1>
+   <Para>
+    For the
+    <Function>date_part</Function> and <Function>date_trunc</Function>
+    functions, arguments can be
+    `year', `month', `day', `hour', `minute', and `second',
+    as well as the more specialized quantities
+    `decade', `century', `millenium', `millisecond', and `microsecond'.
+    <Function>date_part</Function> allows `dow'
+    to return day of week and `epoch' to return seconds since 1970 (for <Type>datetime</Type>)
+    or 'epoch' to return total elapsed seconds (for <Type>timespan</Type>).
+   </Para>
+  </sect1>
 
-<sect1>
-<title>Geometric Functions</title>
+  <sect1>
+   <title>Geometric Functions</title>
 
-<para>
-The geometric types point, box, lseg, line, path, polygon, and circle have a large set of native
-support functions.
-</para>
+   <para>
+    The geometric types point, box, lseg, line, path, polygon, and
+    circle have a large set of native support functions.
+   </para>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE>Geometric Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> area(box) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> area of box </ENTRY>
-<ENTRY> area('((0,0),(1,1))'::box) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> area(circle) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> area of circle </ENTRY>
-<ENTRY> area('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> box(box,box) </ENTRY>
-<ENTRY> box </ENTRY>
-<ENTRY> boxes to intersection box </ENTRY>
-<ENTRY> box('((0,0),(1,1))','((0.5,0.5),(2,2))') </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> center(box) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> center of object </ENTRY>
-<ENTRY> center('((0,0),(1,2))'::box) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> center(circle) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> center of object </ENTRY>
-<ENTRY> center('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> diameter(circle) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> diameter of circle </ENTRY>
-<ENTRY> diameter('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> height(box) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> vertical size of box </ENTRY>
-<ENTRY> height('((0,0),(1,1))'::box) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> isclosed(path) </ENTRY>
-<ENTRY> bool </ENTRY>
-<ENTRY> TRUE if this is a closed path </ENTRY>
-<ENTRY> isclosed('((0,0),(1,1),(2,0))'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> isopen(path) </ENTRY>
-<ENTRY> bool </ENTRY>
-<ENTRY> TRUE if this is an open path </ENTRY>
-<ENTRY> isopen('[(0,0),(1,1),(2,0)]'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> length(lseg) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> length of line segment </ENTRY>
-<ENTRY> length('((-1,0),(1,0))'::lseg) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> length(path) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> length of path </ENTRY>
-<ENTRY> length('((0,0),(1,1),(2,0))'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> pclose(path) </ENTRY>
-<ENTRY> path </ENTRY>
-<ENTRY> convert path to closed variant </ENTRY>
-<ENTRY> popen('[(0,0),(1,1),(2,0)]'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> point(lseg,lseg) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> convert to point (intersection) </ENTRY>
-<ENTRY> point('((-1,0),(1,0))'::lseg,'((-2,-2),(2,2))'::lseg) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> points(path) </ENTRY>
-<ENTRY> int4 </ENTRY>
-<ENTRY> number of points in path </ENTRY>
-<ENTRY> points('[(0,0),(1,1),(2,0)]'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> popen(path) </ENTRY>
-<ENTRY> path </ENTRY>
-<ENTRY> convert path to open variant </ENTRY>
-<ENTRY> popen('((0,0),(1,1),(2,0))'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> radius(circle) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> radius of circle </ENTRY>
-<ENTRY> radius('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> width(box) </ENTRY>
-<ENTRY> float8 </ENTRY>
-<ENTRY> horizontal size of box </ENTRY>
-<ENTRY> width('((0,0),(1,1))'::box) </ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE>Geometric Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> area(box) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> area of box </ENTRY>
+	<ENTRY> area('((0,0),(1,1))'::box) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> area(circle) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> area of circle </ENTRY>
+	<ENTRY> area('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> box(box,box) </ENTRY>
+	<ENTRY> box </ENTRY>
+	<ENTRY> boxes to intersection box </ENTRY>
+	<ENTRY> box('((0,0),(1,1))','((0.5,0.5),(2,2))') </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> center(box) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> center of object </ENTRY>
+	<ENTRY> center('((0,0),(1,2))'::box) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> center(circle) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> center of object </ENTRY>
+	<ENTRY> center('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> diameter(circle) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> diameter of circle </ENTRY>
+	<ENTRY> diameter('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> height(box) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> vertical size of box </ENTRY>
+	<ENTRY> height('((0,0),(1,1))'::box) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> isclosed(path) </ENTRY>
+	<ENTRY> bool </ENTRY>
+	<ENTRY> TRUE if this is a closed path </ENTRY>
+	<ENTRY> isclosed('((0,0),(1,1),(2,0))'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> isopen(path) </ENTRY>
+	<ENTRY> bool </ENTRY>
+	<ENTRY> TRUE if this is an open path </ENTRY>
+	<ENTRY> isopen('[(0,0),(1,1),(2,0)]'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> length(lseg) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> length of line segment </ENTRY>
+	<ENTRY> length('((-1,0),(1,0))'::lseg) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> length(path) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> length of path </ENTRY>
+	<ENTRY> length('((0,0),(1,1),(2,0))'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> pclose(path) </ENTRY>
+	<ENTRY> path </ENTRY>
+	<ENTRY> convert path to closed variant </ENTRY>
+	<ENTRY> popen('[(0,0),(1,1),(2,0)]'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> point(lseg,lseg) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> convert to point (intersection) </ENTRY>
+	<ENTRY> point('((-1,0),(1,0))'::lseg,'((-2,-2),(2,2))'::lseg) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> points(path) </ENTRY>
+	<ENTRY> int4 </ENTRY>
+	<ENTRY> number of points in path </ENTRY>
+	<ENTRY> points('[(0,0),(1,1),(2,0)]'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> popen(path) </ENTRY>
+	<ENTRY> path </ENTRY>
+	<ENTRY> convert path to open variant </ENTRY>
+	<ENTRY> popen('((0,0),(1,1),(2,0))'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> radius(circle) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> radius of circle </ENTRY>
+	<ENTRY> radius('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> width(box) </ENTRY>
+	<ENTRY> float8 </ENTRY>
+	<ENTRY> horizontal size of box </ENTRY>
+	<ENTRY> width('((0,0),(1,1))'::box) </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE>Geometric Type Conversion Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> box(circle) </ENTRY>
-<ENTRY> box </ENTRY>
-<ENTRY> convert circle to box </ENTRY>
-<ENTRY> box('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> box(point,point) </ENTRY>
-<ENTRY> box </ENTRY>
-<ENTRY> convert points to box </ENTRY>
-<ENTRY> box('(0,0)'::point,'(1,1)'::point) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> box(polygon) </ENTRY>
-<ENTRY> box </ENTRY>
-<ENTRY> convert polygon to box </ENTRY>
-<ENTRY> box('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> circle(box) </ENTRY>
-<ENTRY> circle </ENTRY>
-<ENTRY> convert to circle </ENTRY>
-<ENTRY> circle('((0,0),(1,1))'::box) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> circle(point,float8) </ENTRY>
-<ENTRY> circle </ENTRY>
-<ENTRY> convert to circle </ENTRY>
-<ENTRY> circle('(0,0)'::point,2.0) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> lseg(box) </ENTRY>
-<ENTRY> lseg </ENTRY>
-<ENTRY> convert diagonal to lseg </ENTRY>
-<ENTRY> lseg('((-1,0),(1,0))'::box) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> lseg(point,point) </ENTRY>
-<ENTRY> lseg </ENTRY>
-<ENTRY> convert to lseg </ENTRY>
-<ENTRY> lseg('(-1,0)'::point,'(1,0)'::point) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> path(polygon) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> convert to path </ENTRY>
-<ENTRY> path('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> point(circle) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> convert to point (center) </ENTRY>
-<ENTRY> point('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> point(lseg,lseg) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> convert to point (intersection) </ENTRY>
-<ENTRY> point('((-1,0),(1,0))'::lseg,'((-2,-2),(2,2))'::lseg) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> point(polygon) </ENTRY>
-<ENTRY> point </ENTRY>
-<ENTRY> center of polygon </ENTRY>
-<ENTRY> point('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> polygon(box) </ENTRY>
-<ENTRY> polygon </ENTRY>
-<ENTRY> convert to polygon with 12 points </ENTRY>
-<ENTRY> polygon('((0,0),(1,1))'::box) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> polygon(circle) </ENTRY>
-<ENTRY> polygon </ENTRY>
-<ENTRY> convert to polygon with 12 points </ENTRY>
-<ENTRY> polygon('((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> polygon(npts,circle) </ENTRY>
-<ENTRY> polygon </ENTRY>
-<ENTRY> convert to polygon with npts points </ENTRY>
-<ENTRY> polygon(12,'((0,0),2.0)'::circle) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> polygon(path) </ENTRY>
-<ENTRY> polygon </ENTRY>
-<ENTRY> convert to polygon </ENTRY>
-<ENTRY> polygon('((0,0),(1,1),(2,0))'::path) </ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE>Geometric Type Conversion Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> box(circle) </ENTRY>
+	<ENTRY> box </ENTRY>
+	<ENTRY> convert circle to box </ENTRY>
+	<ENTRY> box('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> box(point,point) </ENTRY>
+	<ENTRY> box </ENTRY>
+	<ENTRY> convert points to box </ENTRY>
+	<ENTRY> box('(0,0)'::point,'(1,1)'::point) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> box(polygon) </ENTRY>
+	<ENTRY> box </ENTRY>
+	<ENTRY> convert polygon to box </ENTRY>
+	<ENTRY> box('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> circle(box) </ENTRY>
+	<ENTRY> circle </ENTRY>
+	<ENTRY> convert to circle </ENTRY>
+	<ENTRY> circle('((0,0),(1,1))'::box) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> circle(point,float8) </ENTRY>
+	<ENTRY> circle </ENTRY>
+	<ENTRY> convert to circle </ENTRY>
+	<ENTRY> circle('(0,0)'::point,2.0) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> lseg(box) </ENTRY>
+	<ENTRY> lseg </ENTRY>
+	<ENTRY> convert diagonal to lseg </ENTRY>
+	<ENTRY> lseg('((-1,0),(1,0))'::box) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> lseg(point,point) </ENTRY>
+	<ENTRY> lseg </ENTRY>
+	<ENTRY> convert to lseg </ENTRY>
+	<ENTRY> lseg('(-1,0)'::point,'(1,0)'::point) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> path(polygon) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> convert to path </ENTRY>
+	<ENTRY> path('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> point(circle) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> convert to point (center) </ENTRY>
+	<ENTRY> point('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> point(lseg,lseg) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> convert to point (intersection) </ENTRY>
+	<ENTRY> point('((-1,0),(1,0))'::lseg,'((-2,-2),(2,2))'::lseg) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> point(polygon) </ENTRY>
+	<ENTRY> point </ENTRY>
+	<ENTRY> center of polygon </ENTRY>
+	<ENTRY> point('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> polygon(box) </ENTRY>
+	<ENTRY> polygon </ENTRY>
+	<ENTRY> convert to polygon with 12 points </ENTRY>
+	<ENTRY> polygon('((0,0),(1,1))'::box) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> polygon(circle) </ENTRY>
+	<ENTRY> polygon </ENTRY>
+	<ENTRY> convert to polygon with 12 points </ENTRY>
+	<ENTRY> polygon('((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> polygon(npts,circle) </ENTRY>
+	<ENTRY> polygon </ENTRY>
+	<ENTRY> convert to polygon with npts points </ENTRY>
+	<ENTRY> polygon(12,'((0,0),2.0)'::circle) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> polygon(path) </ENTRY>
+	<ENTRY> polygon </ENTRY>
+	<ENTRY> convert to polygon </ENTRY>
+	<ENTRY> polygon('((0,0),(1,1),(2,0))'::path) </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE>Geometric Upgrade Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> isoldpath(path) </ENTRY>
-<ENTRY> path </ENTRY>
-<ENTRY> test path for pre-v6.1 form </ENTRY>
-<ENTRY> isoldpath('(1,3,0,0,1,1,2,0)'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> revertpoly(polygon) </ENTRY>
-<ENTRY> polygon </ENTRY>
-<ENTRY> convert pre-v6.1 polygon </ENTRY>
-<ENTRY> revertpoly('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> upgradepath(path) </ENTRY>
-<ENTRY> path </ENTRY>
-<ENTRY> convert pre-v6.1 path </ENTRY>
-<ENTRY> upgradepath('(1,3,0,0,1,1,2,0)'::path) </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> upgradepoly(polygon) </ENTRY>
-<ENTRY> polygon </ENTRY>
-<ENTRY> convert pre-v6.1 polygon </ENTRY>
-<ENTRY> upgradepoly('(0,1,2,0,1,0)'::polygon) </ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</sect1>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE>Geometric Upgrade Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> isoldpath(path) </ENTRY>
+	<ENTRY> path </ENTRY>
+	<ENTRY> test path for pre-v6.1 form </ENTRY>
+	<ENTRY> isoldpath('(1,3,0,0,1,1,2,0)'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> revertpoly(polygon) </ENTRY>
+	<ENTRY> polygon </ENTRY>
+	<ENTRY> convert pre-v6.1 polygon </ENTRY>
+	<ENTRY> revertpoly('((0,0),(1,1),(2,0))'::polygon) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> upgradepath(path) </ENTRY>
+	<ENTRY> path </ENTRY>
+	<ENTRY> convert pre-v6.1 path </ENTRY>
+	<ENTRY> upgradepath('(1,3,0,0,1,1,2,0)'::path) </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> upgradepoly(polygon) </ENTRY>
+	<ENTRY> polygon </ENTRY>
+	<ENTRY> convert pre-v6.1 polygon </ENTRY>
+	<ENTRY> upgradepoly('(0,1,2,0,1,0)'::polygon) </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </sect1>
 
-<sect1>
-<title id="cidr-funcs">IP V4 Functions</title>
+  <sect1>
+   <title id="cidr-funcs">IP V4 Functions</title>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName>IP V4 Functions</TITLE>
-<TGROUP COLS="4">
-<THEAD>
-  <ROW>
-    <ENTRY>Function</ENTRY>
-    <ENTRY>Returns</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Example</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-<ENTRY> broadcast(cidr) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> construct broadcast address as text </ENTRY>
-<ENTRY> broadcast('192.168.1.5/24') ==> '192.168.1.255' </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> broadcast(inet) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> construct broadcast address as text </ENTRY>
-<ENTRY> broadcast('192.168.1.5/24') ==> '192.168.1.255' </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> host(inet) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> extract host address as text </ENTRY>
-<ENTRY> host('192.168.1.5/24') ==> '192.168.1.5' </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> masklen(cidr) </ENTRY>
-<ENTRY> int4 </ENTRY>
-<ENTRY> calculate netmask length </ENTRY>
-<ENTRY> masklen('192.168.1.5/24') ==> 24</ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> masklen(inet) </ENTRY>
-<ENTRY> int4 </ENTRY>
-<ENTRY> calculate netmask length </ENTRY>
-<ENTRY> masklen('192.168.1.5/24') ==> 24 </ENTRY>
-  </ROW>
-  <ROW>
-<ENTRY> netmask(inet) </ENTRY>
-<ENTRY> text </ENTRY>
-<ENTRY> construct netmask as text </ENTRY>
-<ENTRY> netmask('192.168.1.5/24') ==> '255.255.255.0' </ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName>IP V4 Functions</TITLE>
+     <TGROUP COLS="4">
+      <THEAD>
+       <ROW>
+	<ENTRY>Function</ENTRY>
+	<ENTRY>Returns</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Example</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> broadcast(cidr) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> construct broadcast address as text </ENTRY>
+	<ENTRY> broadcast('192.168.1.5/24') ==> '192.168.1.255' </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> broadcast(inet) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> construct broadcast address as text </ENTRY>
+	<ENTRY> broadcast('192.168.1.5/24') ==> '192.168.1.255' </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> host(inet) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> extract host address as text </ENTRY>
+	<ENTRY> host('192.168.1.5/24') ==> '192.168.1.5' </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> masklen(cidr) </ENTRY>
+	<ENTRY> int4 </ENTRY>
+	<ENTRY> calculate netmask length </ENTRY>
+	<ENTRY> masklen('192.168.1.5/24') ==> 24</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> masklen(inet) </ENTRY>
+	<ENTRY> int4 </ENTRY>
+	<ENTRY> calculate netmask length </ENTRY>
+	<ENTRY> masklen('192.168.1.5/24') ==> 24 </ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> netmask(inet) </ENTRY>
+	<ENTRY> text </ENTRY>
+	<ENTRY> construct netmask as text </ENTRY>
+	<ENTRY> netmask('192.168.1.5/24') ==> '255.255.255.0' </ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
 
-</Sect1>
+  </Sect1>
 
-</chapter>
+ </chapter>
 
 <!-- Keep this comment at the end of the file
 Local variables:
 mode: sgml
-sgml-omittag:t
+sgml-omittag:nil
 sgml-shorttag:t
 sgml-minimize-attributes:nil
 sgml-always-quote-attributes:t
diff --git a/doc/src/sgml/oper.sgml b/doc/src/sgml/oper.sgml
index 99f96df5946799ef50ce23ec6a3e26db1691bf08..a2452db4114ab5734684df5d41e5b55dfe374ba1 100644
--- a/doc/src/sgml/oper.sgml
+++ b/doc/src/sgml/oper.sgml
@@ -1,26 +1,26 @@
-<Chapter Id="operators">
-<Title>Operators</Title>
+ <Chapter Id="operators">
+  <Title id="operators-title">Operators</Title>
 
-<Abstract>
-<Para>
-Describes the built-in operators available in 
-<ProductName>Postgres</ProductName>.
-</Para>
-</Abstract>
+  <Abstract>
+   <Para>
+    Describes the built-in operators available in 
+    <ProductName>Postgres</ProductName>.
+   </Para>
+  </Abstract>
 
-<Para>
-<ProductName>Postgres</ProductName> provides a large number of 
-built-in operators on system types.
-These operators are declared in the system catalog
-pg_operator.  Every entry in pg_operator includes
-the name of the procedure that implements the operator and the
-class <Acronym>OIDs</Acronym> of the input and output types.
-</Para>
+  <Para>
+   <ProductName>Postgres</ProductName> provides a large number of 
+   built-in operators on system types.
+   These operators are declared in the system catalog
+   pg_operator.  Every entry in pg_operator includes
+   the name of the procedure that implements the operator and the
+   class <Acronym>OIDs</Acronym> of the input and output types.
+  </Para>
 
-<Para>
-To view all variations of the <Quote>||</Quote> string concatenation operator, 
-try
-<ProgramListing>
+  <Para>
+   To view all variations of the <Quote>||</Quote> string concatenation operator, 
+   try
+   <ProgramListing>
     SELECT oprleft, oprright, oprresult, oprcode
     FROM pg_operator WHERE oprname = '||';
 
@@ -30,37 +30,37 @@ oprleft|oprright|oprresult|oprcode
    1042|    1042|     1042|textcat
    1043|    1043|     1043|textcat
 (3 rows)
-</ProgramListing>
-</Para>
+   </ProgramListing>
+  </Para>
 
-<Para>
-Users may invoke operators using the operator name, as in:
+  <Para>
+   Users may invoke operators using the operator name, as in:
 
-<ProgramListing>
+   <ProgramListing>
 select * from emp where salary < 40000;
-</ProgramListing>
+   </ProgramListing>
 
-Alternatively, users may call the functions that implement the
-operators directly.  In this case, the query above would be expressed
-as:
-<ProgramListing>
+   Alternatively, users may call the functions that implement the
+   operators directly.  In this case, the query above would be expressed
+   as:
+   <ProgramListing>
 select * from emp where int4lt(salary, 40000);
-</ProgramListing>
-</Para>
+   </ProgramListing>
+  </Para>
 
-<Para>
-<Application>psql</Application>
-has a command (<Command>\dd</Command>) to show these operators.
-</Para>
+  <Para>
+   <Application>psql</Application>
+   has a command (<Command>\dd</Command>) to show these operators.
+  </Para>
 
-<sect1>
-<title>Lexical Precedence</title>
+  <sect1>
+   <title>Lexical Precedence</title>
 
-<para>
-Operators have a precedence which is currently hardcoded into the parser.
-Most operators have the same precedence and are left-associative. This may lead
-to non-intuitive behavior; for example the boolean operators "&lt;" and "&gt;"
-have a different precedence that the boolean operators "&lt;=" and "&gt;=".
+   <para>
+    Operators have a precedence which is currently hardcoded into the parser.
+    Most operators have the same precedence and are left-associative. This may lead
+    to non-intuitive behavior; for example the boolean operators "&lt;" and "&gt;"
+    have a different precedence that the boolean operators "&lt;=" and "&gt;=".
 
 <table tocentry="1">
 <title>
@@ -322,560 +322,577 @@ logical union
 </para>
 </sect1>
 
-<sect1>
-<title>General Operators</title>
+  <sect1>
+   <title>General Operators</title>
 
-<para>
-The operators listed here are defined for a number of native data types, 
-ranging from numeric types to data/time types.
-</para>
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName> Operators</TITLE>
-<TITLEABBREV>Operators</TITLEABBREV>
-<TGROUP COLS="3">
-<THEAD>
-  <ROW>
-    <ENTRY>Operator</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Usage</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-    <ENTRY> &lt; </ENTRY>
-    <ENTRY>Less than?</ENTRY>
-    <ENTRY>1 &lt; 2</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;= </ENTRY>
-    <ENTRY>Less than or equal to?</ENTRY>
-    <ENTRY>1 &lt;= 2</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&gt; </ENTRY>
-    <ENTRY>Not equal?</ENTRY>
-    <ENTRY>1 &lt;&gt; 2</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> = </ENTRY>
-    <ENTRY>Equal?</ENTRY>
-    <ENTRY>1 = 1</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt; </ENTRY>
-    <ENTRY>Greater than?</ENTRY>
-    <ENTRY>2 &gt; 1</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;= </ENTRY>
-    <ENTRY>Greater than or equal to?</ENTRY>
-    <ENTRY>2 &gt;= 1</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> || </ENTRY>
-    <ENTRY>Concatenate strings</ENTRY>
-    <ENTRY>'Postgre' || 'SQL'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> !!= </ENTRY>
-    <ENTRY>NOT IN</ENTRY>
-    <ENTRY>3 !!= i</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ~~ </ENTRY>
-    <ENTRY>LIKE</ENTRY>
-    <ENTRY>'scrappy,marc,hermit' ~~ '%scrappy%'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> !~~ </ENTRY>
-    <ENTRY>NOT LIKE</ENTRY>
-    <ENTRY>'bruce' !~~ '%al%'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ~ </ENTRY>
-    <ENTRY>Match (regex), case sensitive</ENTRY>
-    <ENTRY>'thomas' ~ '.*thomas.*'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ~* </ENTRY>
-    <ENTRY>Match (regex), case insensitive</ENTRY>
-    <ENTRY>'thomas' ~* '.*Thomas.*'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> !~ </ENTRY>
-    <ENTRY>Does not match (regex), case sensitive</ENTRY>
-    <ENTRY>'thomas' !~ '.*Thomas.*'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> !~* </ENTRY>
-    <ENTRY>Does not match (regex), case insensitive</ENTRY>
-    <ENTRY>'thomas' !~ '.*vadim.*'</ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</sect1>
-
-<sect1>
-<title id="math-opers">Numerical Operators</title>
-
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName> Numerical Operators</TITLE>
-<TITLEABBREV>Operators</TITLEABBREV>
-<TGROUP COLS="3">
-<THEAD>
-  <ROW>
-    <ENTRY>Operator</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Usage</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-    <ENTRY> !  </ENTRY>
-    <ENTRY>Factorial</ENTRY>
-    <ENTRY>3 !</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> !!  </ENTRY>
-    <ENTRY>Factorial (left operator)</ENTRY>
-    <ENTRY>!! 3</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> % </ENTRY>
-    <ENTRY>Modulo</ENTRY>
-    <ENTRY>5 % 4</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> % </ENTRY>
-    <ENTRY>Truncate</ENTRY>
-    <ENTRY>% 4.5</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> * </ENTRY>
-    <ENTRY>Multiplication</ENTRY>
-    <ENTRY>2 * 3</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> + </ENTRY>
-    <ENTRY>Addition</ENTRY>
-    <ENTRY>2 + 3</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> - </ENTRY>
-    <ENTRY>Subtraction</ENTRY>
-    <ENTRY>2 - 3</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> / </ENTRY>
-    <ENTRY>Division</ENTRY>
-    <ENTRY>4 / 2</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> : </ENTRY>
-    <ENTRY>Natural Exponentiation</ENTRY>
-    <ENTRY>: 3.0</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ; </ENTRY>
-    <ENTRY>Natural Logarithm</ENTRY>
-    <ENTRY>(; 5.0)</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> @ </ENTRY>
-    <ENTRY>Absolute value</ENTRY>
-    <ENTRY>@ -5.0</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ^ </ENTRY>
-    <ENTRY>Exponentiation</ENTRY>
-    <ENTRY>2.0 ^ 3.0</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> |/ </ENTRY>
-    <ENTRY>Square root</ENTRY>
-    <ENTRY>|/ 25.0</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ||/ </ENTRY>
-    <ENTRY>Cube root</ENTRY>
-    <ENTRY>||/ 27.0</ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</sect1>
-
-<sect1>
-<title>Geometric Operators</title>
+   <para>
+    The operators listed here are defined for a number of native data types, 
+    ranging from numeric types to data/time types.
+   </para>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName> Geometric Operators</TITLE>
-<TITLEABBREV>Operators</TITLEABBREV>
-<TGROUP COLS="3">
-<THEAD>
-  <ROW>
-    <ENTRY>Operator</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Usage</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-    <ENTRY> + </ENTRY>
-    <ENTRY>Translation</ENTRY>
-    <ENTRY>'((0,0),(1,1))'::box + '(2.0,0)'::point</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> - </ENTRY>
-    <ENTRY>Translation</ENTRY>
-    <ENTRY>'((0,0),(1,1))'::box - '(2.0,0)'::point</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> * </ENTRY>
-    <ENTRY>Scaling/rotation</ENTRY>
-    <ENTRY>'((0,0),(1,1))'::box * '(2.0,0)'::point</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> / </ENTRY>
-    <ENTRY>Scaling/rotation</ENTRY>
-    <ENTRY>'((0,0),(2,2))'::box / '(2.0,0)'::point</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> # </ENTRY>
-    <ENTRY>Intersection</ENTRY>
-    <ENTRY>'((1,-1),(-1,1))' # '((1,1),(-1,-1))'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> # </ENTRY>
-    <ENTRY>Number of points in polygon</ENTRY>
-    <ENTRY># '((1,0),(0,1),(-1,0))'</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ## </ENTRY>
-    <ENTRY>Point of closest proximity</ENTRY>
-    <ENTRY>'(0,0)'::point ## '((2,0),(0,2))'::lseg</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &amp;&amp; </ENTRY>
-    <ENTRY>Overlaps?</ENTRY>
-    <ENTRY>'((0,0),(1,1))'::box &amp;&amp; '((0,0),(2,2))'::box</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &amp;&lt; </ENTRY>
-    <ENTRY>Overlaps to left?</ENTRY>
-    <ENTRY>'((0,0),(1,1))'::box &amp;&lt; '((0,0),(2,2))'::box</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &amp;&gt; </ENTRY>
-    <ENTRY>Overlaps to right?</ENTRY>
-    <ENTRY>'((0,0),(3,3))'::box &amp;&gt; '((0,0),(2,2))'::box</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;-&gt; </ENTRY>
-    <ENTRY>Distance between</ENTRY>
-    <ENTRY>'((0,0),1)'::circle &lt;-&gt; '((5,0),1)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&lt; </ENTRY>
-    <ENTRY>Left of?</ENTRY>
-    <ENTRY>'((0,0),1)'::circle &lt;&lt; '((5,0),1)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;^ </ENTRY>
-    <ENTRY>Is below?</ENTRY>
-    <ENTRY>'((0,0),1)'::circle &lt;^ '((0,5),1)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;&gt; </ENTRY>
-    <ENTRY>Is right of?</ENTRY>
-    <ENTRY>'((5,0),1)'::circle &gt;&gt; '((0,0),1)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;^ </ENTRY>
-    <ENTRY>Is above?</ENTRY>
-    <ENTRY>'((0,5),1)'::circle >^ '((0,0),1)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ?# </ENTRY>
-    <ENTRY>Intersects or overlaps</ENTRY>
-    <ENTRY>'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box;</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ?- </ENTRY>
-    <ENTRY>Is horizontal?</ENTRY>
-    <ENTRY>'(1,0)'::point ?- '(0,0)'::point</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ?-| </ENTRY>
-    <ENTRY>Is perpendicular?</ENTRY>
-    <ENTRY>'((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> @-@  </ENTRY>
-    <ENTRY>Length or circumference</ENTRY>
-    <ENTRY>@-@ '((0,0),(1,0))'::path</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ?| </ENTRY>
-    <ENTRY>Is vertical?</ENTRY>
-    <ENTRY>'(0,1)'::point ?| '(0,0)'::point</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ?|| </ENTRY>
-    <ENTRY>Is parallel?</ENTRY>
-    <ENTRY>'((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> @ </ENTRY>
-    <ENTRY>Contained or on</ENTRY>
-    <ENTRY>'(1,1)'::point @ '((0,0),2)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> @@ </ENTRY>
-    <ENTRY>Center of</ENTRY>
-    <ENTRY>@@ '((0,0),10)'::circle</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ~= </ENTRY>
-    <ENTRY>Same as</ENTRY>
-    <ENTRY>'((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon</ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</sect1>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName> Operators</TITLE>
+     <TITLEABBREV>Operators</TITLEABBREV>
+     <TGROUP COLS="3">
+      <THEAD>
+       <ROW>
+	<ENTRY>Operator</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Usage</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> &lt; </ENTRY>
+	<ENTRY>Less than?</ENTRY>
+	<ENTRY>1 &lt; 2</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;= </ENTRY>
+	<ENTRY>Less than or equal to?</ENTRY>
+	<ENTRY>1 &lt;= 2</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&gt; </ENTRY>
+	<ENTRY>Not equal?</ENTRY>
+	<ENTRY>1 &lt;&gt; 2</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> = </ENTRY>
+	<ENTRY>Equal?</ENTRY>
+	<ENTRY>1 = 1</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt; </ENTRY>
+	<ENTRY>Greater than?</ENTRY>
+	<ENTRY>2 &gt; 1</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;= </ENTRY>
+	<ENTRY>Greater than or equal to?</ENTRY>
+	<ENTRY>2 &gt;= 1</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> || </ENTRY>
+	<ENTRY>Concatenate strings</ENTRY>
+	<ENTRY>'Postgre' || 'SQL'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> !!= </ENTRY>
+	<ENTRY>NOT IN</ENTRY>
+	<ENTRY>3 !!= i</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ~~ </ENTRY>
+	<ENTRY>LIKE</ENTRY>
+	<ENTRY>'scrappy,marc,hermit' ~~ '%scrappy%'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> !~~ </ENTRY>
+	<ENTRY>NOT LIKE</ENTRY>
+	<ENTRY>'bruce' !~~ '%al%'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ~ </ENTRY>
+	<ENTRY>Match (regex), case sensitive</ENTRY>
+	<ENTRY>'thomas' ~ '.*thomas.*'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ~* </ENTRY>
+	<ENTRY>Match (regex), case insensitive</ENTRY>
+	<ENTRY>'thomas' ~* '.*Thomas.*'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> !~ </ENTRY>
+	<ENTRY>Does not match (regex), case sensitive</ENTRY>
+	<ENTRY>'thomas' !~ '.*Thomas.*'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> !~* </ENTRY>
+	<ENTRY>Does not match (regex), case insensitive</ENTRY>
+	<ENTRY>'thomas' !~ '.*vadim.*'</ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </sect1>
 
-<sect1>
-<title>Time Interval Operators</title>
+  <sect1>
+   <title id="math-opers">Numerical Operators</title>
 
-<Para>
-The time interval data type <Type>tinterval</Type> is a legacy from the original
-date/time types and is not as well supported as the more modern types. There
-are several operators for this type.
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName> Numerical Operators</TITLE>
+     <TITLEABBREV>Operators</TITLEABBREV>
+     <TGROUP COLS="3">
+      <THEAD>
+       <ROW>
+	<ENTRY>Operator</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Usage</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> !  </ENTRY>
+	<ENTRY>Factorial</ENTRY>
+	<ENTRY>3 !</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> !!  </ENTRY>
+	<ENTRY>Factorial (left operator)</ENTRY>
+	<ENTRY>!! 3</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> % </ENTRY>
+	<ENTRY>Modulo</ENTRY>
+	<ENTRY>5 % 4</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> % </ENTRY>
+	<ENTRY>Truncate</ENTRY>
+	<ENTRY>% 4.5</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> * </ENTRY>
+	<ENTRY>Multiplication</ENTRY>
+	<ENTRY>2 * 3</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> + </ENTRY>
+	<ENTRY>Addition</ENTRY>
+	<ENTRY>2 + 3</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> - </ENTRY>
+	<ENTRY>Subtraction</ENTRY>
+	<ENTRY>2 - 3</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> / </ENTRY>
+	<ENTRY>Division</ENTRY>
+	<ENTRY>4 / 2</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> : </ENTRY>
+	<ENTRY>Natural Exponentiation</ENTRY>
+	<ENTRY>: 3.0</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ; </ENTRY>
+	<ENTRY>Natural Logarithm</ENTRY>
+	<ENTRY>(; 5.0)</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> @ </ENTRY>
+	<ENTRY>Absolute value</ENTRY>
+	<ENTRY>@ -5.0</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ^ </ENTRY>
+	<ENTRY>Exponentiation</ENTRY>
+	<ENTRY>2.0 ^ 3.0</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> |/ </ENTRY>
+	<ENTRY>Square root</ENTRY>
+	<ENTRY>|/ 25.0</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ||/ </ENTRY>
+	<ENTRY>Cube root</ENTRY>
+	<ENTRY>||/ 27.0</ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </sect1>
 
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName> Time Interval Operators</TITLE>
-<TITLEABBREV>Operators</TITLEABBREV>
-<TGROUP COLS="3">
-<THEAD>
-  <ROW>
-    <ENTRY>Operator</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Usage</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-    <ENTRY> #&lt; </ENTRY>
-    <ENTRY>Interval less than?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> #&lt;= </ENTRY>
-    <ENTRY>Interval less than or equal to?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> #&lt;&gt; </ENTRY>
-    <ENTRY>Interval not equal?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> #= </ENTRY>
-    <ENTRY>Interval equal?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> #&gt; </ENTRY>
-    <ENTRY>Interval greater than?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> #&gt;= </ENTRY>
-    <ENTRY>Interval greater than or equal to?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;#&gt; </ENTRY>
-    <ENTRY>Convert to time interval</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&lt; </ENTRY>
-    <ENTRY>Interval less than?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> | </ENTRY>
-    <ENTRY>Start of interval</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> ~= </ENTRY>
-    <ENTRY>Same as</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;?&gt; </ENTRY>
-    <ENTRY>Time inside interval?</ENTRY>
-    <ENTRY></ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</sect1>
+  <sect1>
+   <title>Geometric Operators</title>
 
-<Sect1>
-<title id="cidr-opers">IP V4 CIDR Operators</title>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName> Geometric Operators</TITLE>
+     <TITLEABBREV>Operators</TITLEABBREV>
+     <TGROUP COLS="3">
+      <THEAD>
+       <ROW>
+	<ENTRY>Operator</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Usage</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> + </ENTRY>
+	<ENTRY>Translation</ENTRY>
+	<ENTRY>'((0,0),(1,1))'::box + '(2.0,0)'::point</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> - </ENTRY>
+	<ENTRY>Translation</ENTRY>
+	<ENTRY>'((0,0),(1,1))'::box - '(2.0,0)'::point</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> * </ENTRY>
+	<ENTRY>Scaling/rotation</ENTRY>
+	<ENTRY>'((0,0),(1,1))'::box * '(2.0,0)'::point</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> / </ENTRY>
+	<ENTRY>Scaling/rotation</ENTRY>
+	<ENTRY>'((0,0),(2,2))'::box / '(2.0,0)'::point</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> # </ENTRY>
+	<ENTRY>Intersection</ENTRY>
+	<ENTRY>'((1,-1),(-1,1))' # '((1,1),(-1,-1))'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> # </ENTRY>
+	<ENTRY>Number of points in polygon</ENTRY>
+	<ENTRY># '((1,0),(0,1),(-1,0))'</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ## </ENTRY>
+	<ENTRY>Point of closest proximity</ENTRY>
+	<ENTRY>'(0,0)'::point ## '((2,0),(0,2))'::lseg</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &amp;&amp; </ENTRY>
+	<ENTRY>Overlaps?</ENTRY>
+	<ENTRY>'((0,0),(1,1))'::box &amp;&amp; '((0,0),(2,2))'::box</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &amp;&lt; </ENTRY>
+	<ENTRY>Overlaps to left?</ENTRY>
+	<ENTRY>'((0,0),(1,1))'::box &amp;&lt; '((0,0),(2,2))'::box</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &amp;&gt; </ENTRY>
+	<ENTRY>Overlaps to right?</ENTRY>
+	<ENTRY>'((0,0),(3,3))'::box &amp;&gt; '((0,0),(2,2))'::box</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;-&gt; </ENTRY>
+	<ENTRY>Distance between</ENTRY>
+	<ENTRY>'((0,0),1)'::circle &lt;-&gt; '((5,0),1)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&lt; </ENTRY>
+	<ENTRY>Left of?</ENTRY>
+	<ENTRY>'((0,0),1)'::circle &lt;&lt; '((5,0),1)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;^ </ENTRY>
+	<ENTRY>Is below?</ENTRY>
+	<ENTRY>'((0,0),1)'::circle &lt;^ '((0,5),1)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;&gt; </ENTRY>
+	<ENTRY>Is right of?</ENTRY>
+	<ENTRY>'((5,0),1)'::circle &gt;&gt; '((0,0),1)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;^ </ENTRY>
+	<ENTRY>Is above?</ENTRY>
+	<ENTRY>'((0,5),1)'::circle >^ '((0,0),1)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ?# </ENTRY>
+	<ENTRY>Intersects or overlaps</ENTRY>
+	<ENTRY>'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box;</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ?- </ENTRY>
+	<ENTRY>Is horizontal?</ENTRY>
+	<ENTRY>'(1,0)'::point ?- '(0,0)'::point</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ?-| </ENTRY>
+	<ENTRY>Is perpendicular?</ENTRY>
+	<ENTRY>'((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> @-@  </ENTRY>
+	<ENTRY>Length or circumference</ENTRY>
+	<ENTRY>@-@ '((0,0),(1,0))'::path</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ?| </ENTRY>
+	<ENTRY>Is vertical?</ENTRY>
+	<ENTRY>'(0,1)'::point ?| '(0,0)'::point</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ?|| </ENTRY>
+	<ENTRY>Is parallel?</ENTRY>
+	<ENTRY>'((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> @ </ENTRY>
+	<ENTRY>Contained or on</ENTRY>
+	<ENTRY>'(1,1)'::point @ '((0,0),2)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> @@ </ENTRY>
+	<ENTRY>Center of</ENTRY>
+	<ENTRY>@@ '((0,0),10)'::circle</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ~= </ENTRY>
+	<ENTRY>Same as</ENTRY>
+	<ENTRY>'((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon</ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </sect1>
+  
+  <sect1>
+   <title>Time Interval Operators</title>
+   
+   <Para>
+    The time interval data type <Type>tinterval</Type> is a legacy from the original
+    date/time types and is not as well supported as the more modern types. There
+    are several operators for this type.
+    
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName> Time Interval Operators</TITLE>
+     <TITLEABBREV>Operators</TITLEABBREV>
+     <TGROUP COLS="3">
+      <THEAD>
+       <ROW>
+	<ENTRY>Operator</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Usage</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> #&lt; </ENTRY>
+	<ENTRY>Interval less than?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> #&lt;= </ENTRY>
+	<ENTRY>Interval less than or equal to?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> #&lt;&gt; </ENTRY>
+	<ENTRY>Interval not equal?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> #= </ENTRY>
+	<ENTRY>Interval equal?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> #&gt; </ENTRY>
+	<ENTRY>Interval greater than?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> #&gt;= </ENTRY>
+	<ENTRY>Interval greater than or equal to?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;#&gt; </ENTRY>
+	<ENTRY>Convert to time interval</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&lt; </ENTRY>
+	<ENTRY>Interval less than?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> | </ENTRY>
+	<ENTRY>Start of interval</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> ~= </ENTRY>
+	<ENTRY>Same as</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;?&gt; </ENTRY>
+	<ENTRY>Time inside interval?</ENTRY>
+	<ENTRY></ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </sect1>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName>IP V4 CIDR Operators</TITLE>
-<TITLEABBREV>Operators</TITLEABBREV>
-<TGROUP COLS="3">
-<THEAD>
-  <ROW>
-    <ENTRY>Operator</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Usage</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-    <ENTRY> &lt; </ENTRY>
-    <ENTRY>Less than</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr &lt; '192.168.1.6'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;= </ENTRY>
-    <ENTRY>Less than or equal</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr &lt;= '192.168.1.5'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> = </ENTRY>
-    <ENTRY>Equals</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr = '192.168.1.5'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;= </ENTRY>
-    <ENTRY>Greater or equal</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr &gt;= '192.168.1.5'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt; </ENTRY>
-    <ENTRY>Greater</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr &gt; '192.168.1.4'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&gt; </ENTRY>
-    <ENTRY>Not equal</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr &lt;&gt; '192.168.1.4'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&lt; </ENTRY>
-    <ENTRY>is contained within</ENTRY>
-    <ENTRY>'192.168.1.5'::cidr &lt;&lt; '192.168.1/24'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&lt;= </ENTRY>
-    <ENTRY>is contained within or equals</ENTRY>
-    <ENTRY>'192.168.1/24'::cidr &lt;&lt;= '192.168.1/24'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;&gt; </ENTRY>
-    <ENTRY>contains</ENTRY>
-    <ENTRY>'192.168.1/24'::cidr &gt;&gt; '192.168.1.5'::cidr</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;&gt;= </ENTRY>
-    <ENTRY>contains or equals</ENTRY>
-    <ENTRY>'192.168.1/24'::cidr &gt;&gt;= '192.168.1/24'::cidr</ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</Sect1>
+  <Sect1>
+   <title id="cidr-opers">IP V4 CIDR Operators</title>
 
-<Sect1>
-<title id="inet-opers">IP V4 INET Operators</title>
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName>IP V4 CIDR Operators</TITLE>
+     <TITLEABBREV>Operators</TITLEABBREV>
+     <TGROUP COLS="3">
+      <THEAD>
+       <ROW>
+	<ENTRY>Operator</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Usage</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> &lt; </ENTRY>
+	<ENTRY>Less than</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr &lt; '192.168.1.6'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;= </ENTRY>
+	<ENTRY>Less than or equal</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr &lt;= '192.168.1.5'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> = </ENTRY>
+	<ENTRY>Equals</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr = '192.168.1.5'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;= </ENTRY>
+	<ENTRY>Greater or equal</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr &gt;= '192.168.1.5'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt; </ENTRY>
+	<ENTRY>Greater</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr &gt; '192.168.1.4'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&gt; </ENTRY>
+	<ENTRY>Not equal</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr &lt;&gt; '192.168.1.4'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&lt; </ENTRY>
+	<ENTRY>is contained within</ENTRY>
+	<ENTRY>'192.168.1.5'::cidr &lt;&lt; '192.168.1/24'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&lt;= </ENTRY>
+	<ENTRY>is contained within or equals</ENTRY>
+	<ENTRY>'192.168.1/24'::cidr &lt;&lt;= '192.168.1/24'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;&gt; </ENTRY>
+	<ENTRY>contains</ENTRY>
+	<ENTRY>'192.168.1/24'::cidr &gt;&gt; '192.168.1.5'::cidr</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;&gt;= </ENTRY>
+	<ENTRY>contains or equals</ENTRY>
+	<ENTRY>'192.168.1/24'::cidr &gt;&gt;= '192.168.1/24'::cidr</ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </Sect1>
 
-<Para>
-<TABLE TOCENTRY="1">
-<TITLE><ProductName>Postgres</ProductName>IP V4 INET Operators</TITLE>
-<TITLEABBREV>Operators</TITLEABBREV>
-<TGROUP COLS="3">
-<THEAD>
-  <ROW>
-    <ENTRY>Operator</ENTRY>
-    <ENTRY>Description</ENTRY>
-    <ENTRY>Usage</ENTRY>
-  </ROW>
-</THEAD>
-<TBODY>
-  <ROW>
-    <ENTRY> &lt; </ENTRY>
-    <ENTRY>Less than</ENTRY>
-    <ENTRY>'192.168.1.5'::inet &lt; '192.168.1.6'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;= </ENTRY>
-    <ENTRY>Less than or equal</ENTRY>
-    <ENTRY>'192.168.1.5'::inet &lt;= '192.168.1.5'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> = </ENTRY>
-    <ENTRY>Equals</ENTRY>
-    <ENTRY>'192.168.1.5'::inet = '192.168.1.5'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;= </ENTRY>
-    <ENTRY>Greater or equal</ENTRY>
-    <ENTRY>'192.168.1.5'::inet &gt;= '192.168.1.5'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt; </ENTRY>
-    <ENTRY>Greater</ENTRY>
-    <ENTRY>'192.168.1.5'::inet &gt; '192.168.1.4'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&gt; </ENTRY>
-    <ENTRY>Not equal</ENTRY>
-    <ENTRY>'192.168.1.5'::inet &lt;&gt; '192.168.1.4'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&lt; </ENTRY>
-    <ENTRY>is contained within</ENTRY>
-    <ENTRY>'192.168.1.5'::inet &lt;&lt; '192.168.1/24'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &lt;&lt;= </ENTRY>
-    <ENTRY>is contained within or equals</ENTRY>
-    <ENTRY>'192.168.1/24'::inet &lt;&lt;= '192.168.1/24'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;&gt; </ENTRY>
-    <ENTRY>contains</ENTRY>
-    <ENTRY>'192.168.1/24'::inet &gt;&gt; '192.168.1.5'::inet</ENTRY>
-  </ROW>
-  <ROW>
-    <ENTRY> &gt;&gt;= </ENTRY>
-    <ENTRY>contains or equals</ENTRY>
-    <ENTRY>'192.168.1/24'::inet &gt;&gt;= '192.168.1/24'::inet</ENTRY>
-  </ROW>
-</TBODY>
-</TGROUP>
-</TABLE>
-</Para>
-</Sect1>
+  <Sect1>
+   <title id="inet-opers">IP V4 INET Operators</title>
+   
+   <Para>
+    <TABLE TOCENTRY="1">
+     <TITLE><ProductName>Postgres</ProductName>IP V4 INET Operators</TITLE>
+     <TITLEABBREV>Operators</TITLEABBREV>
+     <TGROUP COLS="3">
+      <THEAD>
+       <ROW>
+	<ENTRY>Operator</ENTRY>
+	<ENTRY>Description</ENTRY>
+	<ENTRY>Usage</ENTRY>
+       </ROW>
+      </THEAD>
+      <TBODY>
+       <ROW>
+	<ENTRY> &lt; </ENTRY>
+	<ENTRY>Less than</ENTRY>
+	<ENTRY>'192.168.1.5'::inet &lt; '192.168.1.6'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;= </ENTRY>
+	<ENTRY>Less than or equal</ENTRY>
+	<ENTRY>'192.168.1.5'::inet &lt;= '192.168.1.5'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> = </ENTRY>
+	<ENTRY>Equals</ENTRY>
+	<ENTRY>'192.168.1.5'::inet = '192.168.1.5'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;= </ENTRY>
+	<ENTRY>Greater or equal</ENTRY>
+	<ENTRY>'192.168.1.5'::inet &gt;= '192.168.1.5'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt; </ENTRY>
+	<ENTRY>Greater</ENTRY>
+	<ENTRY>'192.168.1.5'::inet &gt; '192.168.1.4'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&gt; </ENTRY>
+	<ENTRY>Not equal</ENTRY>
+	<ENTRY>'192.168.1.5'::inet &lt;&gt; '192.168.1.4'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&lt; </ENTRY>
+	<ENTRY>is contained within</ENTRY>
+	<ENTRY>'192.168.1.5'::inet &lt;&lt; '192.168.1/24'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &lt;&lt;= </ENTRY>
+	<ENTRY>is contained within or equals</ENTRY>
+	<ENTRY>'192.168.1/24'::inet &lt;&lt;= '192.168.1/24'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;&gt; </ENTRY>
+	<ENTRY>contains</ENTRY>
+	<ENTRY>'192.168.1/24'::inet &gt;&gt; '192.168.1.5'::inet</ENTRY>
+       </ROW>
+       <ROW>
+	<ENTRY> &gt;&gt;= </ENTRY>
+	<ENTRY>contains or equals</ENTRY>
+	<ENTRY>'192.168.1/24'::inet &gt;&gt;= '192.168.1/24'::inet</ENTRY>
+       </ROW>
+      </TBODY>
+     </TGROUP>
+    </TABLE>
+   </Para>
+  </Sect1>
 
-</Chapter>
+ </Chapter>
 
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:nil
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:"./reference.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:"/usr/lib/sgml/CATALOG"
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml
index 65f46cd24dd004ab180b292033f71360a308117f..72043575f3801f878ece6ceb635c9146eb6c4048 100644
--- a/doc/src/sgml/syntax.sgml
+++ b/doc/src/sgml/syntax.sgml
@@ -1,62 +1,73 @@
-<chapter>
-<title>SQL Syntax</title>
-
-<sect1>
-<title>Key Words</title>
-
-<para>
-<acronym>SQL92</acronym> defines <firstterm>key words</firstterm> 
-for the language
-which have specific meaning. Some key words are
-<firstterm>reserved</firstterm>, which indicates that they are
-restricted to appear in only certain contexts. Other key words are
-<firstterm>not restricted</firstterm>, which indicates that in certain 
-contexts they
-have a specific meaning but are not otherwise constrained.
-</para>
-
-<para>
-<productname>Postgres</productname> implements an extended subset of the
-<acronym>SQL92</acronym> and <acronym>SQL3</acronym> languages. Some language
-elements are not as restricted in this implementation as is
-called for in the language standards, in part due
-to the extensibility features of <productname>Postgres</productname>. 
-</para>
-
-<para>
-Information on <acronym>SQL92</acronym> and <acronym>SQL3</acronym> key words
-is derived from <xref linkend="DATE97" endterm="DATE97">.
-</para>
-
-<sect2>
-<title>Reserved Key Words</title>
-
-<para>
-<acronym>SQL92</acronym> and <acronym>SQL3</acronym> have 
-<firstterm>reserved key words</firstterm> which are not allowed 
-as identifiers and not allowed in any usage other than as fundamental
-tokens in <acronym>SQL</acronym> statements.
-<productname>Postgres</productname> has additional key words
-which have similar restrictions. In particular, these key words
-are not allowed as column or table names, though in some cases
-they are allowed to be column labels (i.e. in AS clauses).
-</para>
-
-<tip>
-<para>
-Any string can be specified as an identifier if surrounded by
-double quotes (<quote>like this!</quote>). Some care is required since
-such an identifier will be case sensitive
-and will retain embedded whitespace other special characters.</para>
-</tip>
-
-<para>
-The following are <productname>Postgres</productname>
-reserved words which are neither <acronym>SQL92</acronym>
-nor <acronym>SQL3</acronym> reserved words. These are allowed
-to be present as column labels, but not as identifiers:
-
-<programlisting>
+ <chapter>
+  <title>SQL Syntax</title>
+
+  <abstract>
+   <para>
+    <acronym>SQL</acronym> manipulates sets of data. The language is
+    composed of various <firstterm>key words</firstterm>. Arithmetic
+    and procedural expressions are allowed. We will cover these topics
+    in this chapter; subsequent chapters will include details on data
+    types, functions, and operators.
+   </para>
+  </abstract>
+
+  <sect1>
+   <title>Key Words</title>
+
+   <para>
+    <acronym>SQL92</acronym> defines <firstterm>key words</firstterm> 
+    for the language
+    which have specific meaning. Some key words are
+    <firstterm>reserved</firstterm>, which indicates that they are
+    restricted to appear in only certain contexts. Other key words are
+    <firstterm>not restricted</firstterm>, which indicates that in certain 
+    contexts they
+    have a specific meaning but are not otherwise constrained.
+   </para>
+
+   <para>
+    <productname>Postgres</productname> implements an extended subset of the
+    <acronym>SQL92</acronym> and <acronym>SQL3</acronym> languages. Some language
+    elements are not as restricted in this implementation as is
+    called for in the language standards, in part due
+    to the extensibility features of <productname>Postgres</productname>. 
+   </para>
+
+   <para>
+    Information on <acronym>SQL92</acronym> and <acronym>SQL3</acronym> key words
+    is derived from <xref linkend="DATE97" endterm="DATE97">.
+   </para>
+
+   <sect2>
+    <title>Reserved Key Words</title>
+
+    <para>
+     <acronym>SQL92</acronym> and <acronym>SQL3</acronym> have 
+     <firstterm>reserved key words</firstterm> which are not allowed 
+     as identifiers and not allowed in any usage other than as fundamental
+     tokens in <acronym>SQL</acronym> statements.
+     <productname>Postgres</productname> has additional key words
+     which have similar restrictions. In particular, these key words
+     are not allowed as column or table names, though in some cases
+     they are allowed to be column labels (i.e. in AS clauses).
+    </para>
+
+    <tip>
+     <para>
+      Any string can be specified as an identifier if surrounded by
+      double quotes (<quote>like this!</quote>). Some care is required since
+      such an identifier will be case sensitive
+      and will retain embedded whitespace other special characters.
+     </para>
+    </tip>
+
+    <para>
+     The following are <productname>Postgres</productname>
+     reserved words which are neither <acronym>SQL92</acronym>
+     nor <acronym>SQL3</acronym> reserved words. These are allowed
+     to be present as column labels, but not as identifiers:
+
+     <programlisting>
 ABORT ANALYZE 
 BINARY 
 CLUSTER CONSTRAINT COPY
@@ -69,32 +80,33 @@ RESET
 SETOF SHOW
 UNLISTEN UNTIL 
 VACUUM VERBOSE
-</programlisting>
-</para>
+     </programlisting>
+    </para>
 
-<para>
-The following are <productname>Postgres</productname>
-reserved words which are also <acronym>SQL92</acronym> 
-or <acronym>SQL3</acronym> reserved words, and which
-are allowed to be present as column labels, but not as identifiers:
+    <para>
+     The following are <productname>Postgres</productname>
+     reserved words which are also <acronym>SQL92</acronym> 
+     or <acronym>SQL3</acronym> reserved words, and which
+     are allowed to be present as column labels, but not as identifiers:
 
-<programlisting>
+     <programlisting>
 CASE COALESCE CROSS CURRENT 
 ELSE END
 FALSE FOREIGN 
-GROUP 
+GLOBAL GROUP 
+LOCAL
 NULLIF
 ORDER 
 POSITION PRECISION 
 TABLE THEN TRANSACTION TRUE
 WHEN
-</programlisting>
+     </programlisting>
 
-The following are <productname>Postgres</productname>
-reserved words which are also <acronym>SQL92</acronym> 
-or <acronym>SQL3</acronym> reserved words:
+     The following are <productname>Postgres</productname>
+     reserved words which are also <acronym>SQL92</acronym> 
+     or <acronym>SQL3</acronym> reserved words:
 
-<programlisting>
+     <programlisting>
 ADD ALL ALTER AND ANY AS ASC
 BEGIN BETWEEN BOTH BY
 CASCADE CAST CHAR CHARACTER CHECK CLOSE 
@@ -118,49 +130,49 @@ TO TRAILING TRIM
 UNION UNIQUE UPDATE USER USING
 VALUES VARCHAR VARYING VIEW
 WHERE WITH WORK 
-</programlisting>
-</para>
+     </programlisting>
+    </para>
 
-<para>
-The following are <acronym>SQL92</acronym> reserved key words which
-are not <productname>Postgres</productname> reserved key words, but which
-if used as function names are always translated into the function
-<function>length</function>:
+    <para>
+     The following are <acronym>SQL92</acronym> reserved key words which
+     are not <productname>Postgres</productname> reserved key words, but which
+     if used as function names are always translated into the function
+     <function>length</function>:
 
-<programlisting>
+     <programlisting>
 CHAR_LENGTH CHARACTER_LENGTH
-</programlisting>
-</para>
+     </programlisting>
+    </para>
 
-<para>
-The following are <acronym>SQL92</acronym> or <acronym>SQL3</acronym> 
-reserved key words which
-are not <productname>Postgres</productname> reserved key words, but
-if used as type names are always translated into an alternate, native type:
+    <para>
+     The following are <acronym>SQL92</acronym> or <acronym>SQL3</acronym> 
+     reserved key words which
+     are not <productname>Postgres</productname> reserved key words, but
+     if used as type names are always translated into an alternate, native type:
 
-<programlisting>
+     <programlisting>
 BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
-</programlisting>
-</para>
-
-<para>
-The following are either <acronym>SQL92</acronym>
-or <acronym>SQL3</acronym> reserved key words
-which are not key words in <productname>Postgres</productname>.
-These have no proscribed usage in <productname>Postgres</productname>
-at the time of writing (v6.4) but may become reserved key words in the
-future:
-
-<note>
-<para>
-Some of these key words represent functions in <acronym>SQL92</acronym>.
-These functions are defined in <productname>Postgres</productname>,
-but the parser does not consider the names to be key words and they are allowed
-in other contexts.
-</para>
-</note>
-
-<programlisting>
+     </programlisting>
+    </para>
+
+    <para>
+     The following are either <acronym>SQL92</acronym>
+     or <acronym>SQL3</acronym> reserved key words
+     which are not key words in <productname>Postgres</productname>.
+     These have no proscribed usage in <productname>Postgres</productname>
+     at the time of writing (v6.5) but may become reserved key words in the
+     future:
+
+     <note>
+      <para>
+       Some of these key words represent functions in <acronym>SQL92</acronym>.
+       These functions are defined in <productname>Postgres</productname>,
+       but the parser does not consider the names to be key words and they are allowed
+       in other contexts.
+      </para>
+     </note>
+
+     <programlisting>
 ALLOCATE ARE ASSERTION AT AUTHORIZATION AVG 
 BIT BIT_LENGTH
 CASCADED CATALOG COLLATION CONNECT CONNECTION
@@ -168,7 +180,7 @@ CASCADED CATALOG COLLATION CONNECT CONNECTION
 DATE DEALLOCATE DEC DESCRIBE DESCRIPTOR DIAGNOSTICS DISCONNECT DOMAIN 
 END-EXEC ESCAPE EXCEPT EXCEPTION EXEC EXTERNAL 
 FIRST FOUND
-GET GLOBAL GO GOTO 
+GET GO GOTO 
 IDENTITY IMMEDIATE INDICATOR INITIALLY INPUT INTERSECT ISOLATION 
 LAST LEVEL LOWER 
 MAX MIN MODULE 
@@ -181,56 +193,56 @@ TEMPORARY TRANSLATE TRANSLATION
 UNKNOWN UPPER USAGE
 VALUE 
 WHENEVER WRITE
-</programlisting>
-</para>
-</sect2>
-
-<sect2>
-<title>Non-reserved Keywords</title>
-
-<para>
-<acronym>SQL92</acronym> and <acronym>SQL3</acronym> have 
-<firstterm>non-reserved keywords</firstterm> which have
-a proscribed meaning in the language but which are also allowed
-as identifiers.
-<productname>Postgres</productname> has additional keywords
-which allow similar unrestricted usage.
-In particular, these keywords
-are allowed as column or table names.
-</para>
-
-<para>
-The following are <productname>Postgres</productname>
-non-reserved key words which are neither <acronym>SQL92</acronym>
-nor <acronym>SQL3</acronym> non-reserved key words:
-
-<programlisting>
-AFTER AGGREGATE 
+     </programlisting>
+    </para>
+   </sect2>
+
+   <sect2>
+    <title>Non-reserved Keywords</title>
+
+    <para>
+     <acronym>SQL92</acronym> and <acronym>SQL3</acronym> have 
+     <firstterm>non-reserved keywords</firstterm> which have
+     a proscribed meaning in the language but which are also allowed
+     as identifiers.
+     <productname>Postgres</productname> has additional keywords
+     which allow similar unrestricted usage.
+     In particular, these keywords
+     are allowed as column or table names.
+    </para>
+
+    <para>
+     The following are <productname>Postgres</productname>
+     non-reserved key words which are neither <acronym>SQL92</acronym>
+     nor <acronym>SQL3</acronym> non-reserved key words:
+
+     <programlisting>
+ACCESS AFTER AGGREGATE 
 BACKWARD BEFORE 
 CACHE CREATEDB CREATEUSER CYCLE
 DATABASE DELIMITERS 
-EACH ENCODING 
+EACH ENCODING EXCLUSIVE
 FORWARD FUNCTION 
 HANDLER
 INCREMENT INDEX INHERITS INSENSITIVE INSTEAD ISNULL
 LANCOMPILER LOCATION 
-MAXVALUE MINVALUE
+MAXVALUE MINVALUE MODE
 NOCREATEDB NOCREATEUSER NOTHING NOTNULL 
 OIDS OPERATOR 
 PASSWORD PROCEDURAL
 RECIPE RENAME  RETURNS ROW RULE
-SEQUENCE SERIAL START STATEMENT STDIN STDOUT 
+SEQUENCE SERIAL SHARE START STATEMENT STDIN STDOUT 
 TRUSTED 
 VALID VERSION
-</programlisting>
-</para>
+     </programlisting>
+    </para>
 
-<para>
-The following are <productname>Postgres</productname>
-non-reserved key words which are <acronym>SQL92</acronym>
-or <acronym>SQL3</acronym> reserved key words:
+    <para>
+     The following are <productname>Postgres</productname>
+     non-reserved key words which are <acronym>SQL92</acronym>
+     or <acronym>SQL3</acronym> reserved key words:
 
-<programlisting>
+     <programlisting>
 ABSOLUTE ACTION
 DAY
 HOUR
@@ -246,30 +258,30 @@ SCROLL SECOND
 TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRIGGER 
 YEAR
 ZONE
-</programlisting>
-</para>
+     </programlisting>
+    </para>
 
-<para>
-The following are <productname>Postgres</productname>
-non-reserved key words which are also either <acronym>SQL92</acronym>
-or <acronym>SQL3</acronym> non-reserved key words:
+    <para>
+     The following are <productname>Postgres</productname>
+     non-reserved key words which are also either <acronym>SQL92</acronym>
+     or <acronym>SQL3</acronym> non-reserved key words:
 
-<programlisting>
-TYPE
-</programlisting>
-</para>
+     <programlisting>
+COMMITTED SERIALIZABLE TYPE
+     </programlisting>
+    </para>
 
-<para>
-The following are either <acronym>SQL92</acronym>
-or <acronym>SQL3</acronym> non-reserved key words which are not
-key words of any kind in <productname>Postgres</productname>:
+    <para>
+     The following are either <acronym>SQL92</acronym>
+     or <acronym>SQL3</acronym> non-reserved key words which are not
+     key words of any kind in <productname>Postgres</productname>:
 
-<programlisting>
+     <programlisting>
 ADA
 C CATALOG_NAME CHARACTER_SET_CATALOG CHARACTER_SET_NAME 
 CHARACTER_SET_SCHEMA CLASS_ORIGIN COBOL COLLATION_CATALOG
 COLLATION_NAME COLLATION_SCHEMA COLUMN_NAME
-COMMAND_FUNCTION COMMITTED CONDITION_NUMBER
+COMMAND_FUNCTION CONDITION_NUMBER
 CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME
 CONSTRAINT_SCHEMA CURSOR_NAME
 DATA DATE_TIME_INTERVAL_CODE DATE_TIME_INTERVAL_PRECISION
@@ -281,15 +293,29 @@ NAME NULLABLE NUMBER
 PAD PASCAL PLI
 REPEATABLE RETURNED_LENGTH RETURNED_OCTET_LENGTH
 RETURNED_SQLSTATE ROW_COUNT
-SCALE SCHEMA_NAME SERIALIZABLE SERVER_NAME SPACE
+SCALE SCHEMA_NAME SERVER_NAME SPACE
 SUBCLASS_ORIGIN
 TABLE_NAME
 UNCOMMITTED UNNAMED
-</programlisting>
-</para>
-</sect2>
-</sect1>
-</chapter>
+     </programlisting>
+    </para>
+   </sect2>
+  </sect1>
+
+  <sect1>
+   <title>Expressions</title>
+
+   <para>
+    <acronym>SQL92</acronym> allows <firstterm>expressions</firstterm>
+    to transform data in expressions. Expressions may contain operators
+    (see <xref linkend="operators-title" endterm="operators-title">
+    for more details) and functions
+    (<xref linkend="functions-title" endterm="functions-title"> has
+    more information).
+
+   </para>
+  </sect1>
+ </chapter>
 
 <!-- Keep this comment at the end of the file
 Local variables: