]> granicus.if.org Git - postgresql/commitdiff
Replace some oldish, non-SQL'ish elements with more standard forms. (cast
authorPeter Eisentraut <peter_e@gmx.net>
Sat, 20 Jan 2001 20:59:29 +0000 (20:59 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Sat, 20 Jan 2001 20:59:29 +0000 (20:59 +0000)
syntax, type names, function names, etc.)

doc/src/sgml/dfunc.sgml
doc/src/sgml/func.sgml
doc/src/sgml/libpq++.sgml
doc/src/sgml/libpq.sgml
doc/src/sgml/odbc.sgml
doc/src/sgml/plsql.sgml
doc/src/sgml/ref/comment.sgml
doc/src/sgml/ref/create_aggregate.sgml
doc/src/sgml/rules.sgml
doc/src/sgml/typeconv.sgml
doc/src/sgml/xfunc.sgml

index aa3fa8bdad6cb0710986dc04103cb6bec259facd..f9e37e1f28b88594391955fce0dccb571518b28c 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.12 2001/01/12 22:15:32 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.13 2001/01/20 20:59:28 petere Exp $
 -->
 
 <sect2 id="dfunc">
@@ -20,7 +20,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.12 2001/01/12 22:15:32 peter
   In addition, the <productname>PostgreSQL</productname> source code
   contains several working examples in the
   <filename>contrib</filename> directory.  If you rely on these
-  examples you will make your modules dependent on the documentation
+  examples you will make your modules dependent on the availability
   of the <productname>PostgreSQL</productname> source code, however.
  </para>
 
@@ -29,8 +29,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.12 2001/01/12 22:15:32 peter
   executables:  first the source files are compiled into object files,
   then the object files are linked together.  The object files need to
   be created as <firstterm>position-independent code</firstterm>
-  (<acronym>PIC</acronym>), which conceptually means that it can be
-  placed at an arbitrary location in memory when it is loaded by the
+  (<acronym>PIC</acronym>), which conceptually means that they can be
+  placed at an arbitrary location in memory when they are loaded by the
   executable.  (Object files intended for executables are not compiled
   that way.)  The command to link a shared library contains special
   flags to distinguish it from linking an executable. --- At least
index 2c6237ab2906910dd7a4420542a4427c9455803b..4ea4881f81b5c73ad6a5403510b452af8cc1846c 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.47 2001/01/13 18:34:51 petere Exp $ -->
+<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.48 2001/01/20 20:59:28 petere Exp $ -->
 
 <chapter id="functions">
  <title>Functions and Operators</title>
        <entry>to_char(125, '999')</entry>
        </row>
        <row>
-       <entry>to_char(float, text)</entry>
+       <entry>to_char(double precision, text)</entry>
        <entry>text</entry>
-       <entry>convert float4/float8 to string</entry>
+       <entry>convert real/double precision to string</entry>
        <entry>to_char(125.8, '999D9')</entry>
        </row>
        <row>
        </row>
        <row>
        <entry>date_part(text,timestamp)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>portion of date</entry>
        <entry>date_part('dow',timestamp 'now')</entry>
        </row>
        <row>
        <entry>date_part(text,interval)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>portion of time</entry>
        <entry>date_part('hour',interval '4 hrs 3 mins')</entry>
        </row>
        <ROW>
        <ENTRY> + </ENTRY>
        <ENTRY>Translation</ENTRY>
-       <ENTRY>'((0,0),(1,1))'::box + '(2.0,0)'::point</ENTRY>
+       <ENTRY>box '((0,0),(1,1))' + point '(2.0,0)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> - </ENTRY>
        <ENTRY>Translation</ENTRY>
-       <ENTRY>'((0,0),(1,1))'::box - '(2.0,0)'::point</ENTRY>
+       <ENTRY>box '((0,0),(1,1))' - point '(2.0,0)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> * </ENTRY>
        <ENTRY>Scaling/rotation</ENTRY>
-       <ENTRY>'((0,0),(1,1))'::box * '(2.0,0)'::point</ENTRY>
+       <ENTRY>box '((0,0),(1,1))' * point '(2.0,0)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> / </ENTRY>
        <ENTRY>Scaling/rotation</ENTRY>
-       <ENTRY>'((0,0),(2,2))'::box / '(2.0,0)'::point</ENTRY>
+       <ENTRY>box '((0,0),(2,2))' / point '(2.0,0)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> # </ENTRY>
        <ROW>
        <ENTRY> ## </ENTRY>
        <ENTRY>Point of closest proximity</ENTRY>
-       <ENTRY>'(0,0)'::point ## '((2,0),(0,2))'::lseg</ENTRY>
+       <ENTRY>point '(0,0)' ## lseg '((2,0),(0,2))'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> &amp;&amp; </ENTRY>
        <ENTRY>Overlaps?</ENTRY>
-       <ENTRY>'((0,0),(1,1))'::box &amp;&amp; '((0,0),(2,2))'::box</ENTRY>
+       <ENTRY>box '((0,0),(1,1))' &amp;&amp; box '((0,0),(2,2))'</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>
+       <ENTRY>box '((0,0),(1,1))' &amp;&lt; box '((0,0),(2,2))'</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>
+       <ENTRY>box '((0,0),(3,3))' &amp;&gt; box '((0,0),(2,2))'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> &lt;-&gt; </ENTRY>
        <ENTRY>Distance between</ENTRY>
-       <ENTRY>'((0,0),1)'::circle &lt;-&gt; '((5,0),1)'::circle</ENTRY>
+       <ENTRY>circle '((0,0),1)' &lt;-&gt; circle '((5,0),1)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> &lt;&lt; </ENTRY>
        <ENTRY>Left of?</ENTRY>
-       <ENTRY>'((0,0),1)'::circle &lt;&lt; '((5,0),1)'::circle</ENTRY>
+       <ENTRY>circle '((0,0),1)' &lt;&lt; circle '((5,0),1)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> &lt;^ </ENTRY>
        <ENTRY>Is below?</ENTRY>
-       <ENTRY>'((0,0),1)'::circle &lt;^ '((0,5),1)'::circle</ENTRY>
+       <ENTRY>circle '((0,0),1)' &lt;^ circle '((0,5),1)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> &gt;&gt; </ENTRY>
        <ENTRY>Is right of?</ENTRY>
-       <ENTRY>'((5,0),1)'::circle &gt;&gt; '((0,0),1)'::circle</ENTRY>
+       <ENTRY>circle '((5,0),1)' &gt;&gt; circle '((0,0),1)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> &gt;^ </ENTRY>
        <ENTRY>Is above?</ENTRY>
-       <ENTRY>'((0,5),1)'::circle >^ '((0,0),1)'::circle</ENTRY>
+       <ENTRY>circle '((0,5),1)' >^ circle '((0,0),1)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> ?# </ENTRY>
        <ENTRY>Intersects or overlaps</ENTRY>
-       <ENTRY>'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box;</ENTRY>
+       <ENTRY>lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))';</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> ?- </ENTRY>
        <ENTRY>Is horizontal?</ENTRY>
-       <ENTRY>'(1,0)'::point ?- '(0,0)'::point</ENTRY>
+       <ENTRY>point '(1,0)' ?- point '(0,0)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> ?-| </ENTRY>
        <ENTRY>Is perpendicular?</ENTRY>
-       <ENTRY>'((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg</ENTRY>
+       <ENTRY>lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> @-@  </ENTRY>
        <ENTRY>Length or circumference</ENTRY>
-       <ENTRY>@-@ '((0,0),(1,0))'::path</ENTRY>
+       <ENTRY>@-@ path '((0,0),(1,0))'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> ?| </ENTRY>
        <ENTRY>Is vertical?</ENTRY>
-       <ENTRY>'(0,1)'::point ?| '(0,0)'::point</ENTRY>
+       <ENTRY>point '(0,1)' ?| point '(0,0)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> ?|| </ENTRY>
        <ENTRY>Is parallel?</ENTRY>
-       <ENTRY>'((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg</ENTRY>
+       <ENTRY>lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> @ </ENTRY>
        <ENTRY>Contained or on</ENTRY>
-       <ENTRY>'(1,1)'::point @ '((0,0),2)'::circle</ENTRY>
+       <ENTRY>point '(1,1)' @ circle '((0,0),2)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> @@ </ENTRY>
        <ENTRY>Center of</ENTRY>
-       <ENTRY>@@ '((0,0),10)'::circle</ENTRY>
+       <ENTRY>@@ circle '((0,0),10)'</ENTRY>
        </ROW>
        <ROW>
        <ENTRY> ~= </ENTRY>
        <ENTRY>Same as</ENTRY>
-       <ENTRY>'((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon</ENTRY>
+       <ENTRY>polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'</ENTRY>
        </ROW>
       </TBODY>
      </TGROUP>
       <tbody>
        <row>
        <entry>area(object)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>area of item</entry>
        <entry>area(box '((0,0),(1,1))')</entry>
        </row>
        <row>
-       <entry>box(box,box)</entry>
+       <entry>box(box, box)</entry>
        <entry>box</entry>
        <entry>intersection box</entry>
        <entry>box(box '((0,0),(1,1))',box '((0.5,0.5),(2,2))')</entry>
        </row>
        <row>
        <entry>diameter(circle)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>diameter of circle</entry>
        <entry>diameter(circle '((0,0),2.0)')</entry>
        </row>
        <row>
        <entry>height(box)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>vertical size of box</entry>
        <entry>height(box '((0,0),(1,1))')</entry>
        </row>
        </row>
        <row>
        <entry>length(object)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>length of item</entry>
        <entry>length(path '((-1,0),(1,0))')</entry>
        </row>
@@ -2243,13 +2243,13 @@ Not defined by this name. Implements the intersection operator '#'
        </row>
        <row>
        <entry>radius(circle)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>radius of circle</entry>
        <entry>radius(circle '((0,0),2.0)')</entry>
        </row>
        <row>
        <entry>width(box)</entry>
-       <entry>float8</entry>
+       <entry>double precision</entry>
        <entry>horizontal size</entry>
        <entry>width(box '((0,0),(1,1))')</entry>
        </row>
@@ -2274,91 +2274,91 @@ Not defined by this name. Implements the intersection operator '#'
        <entry>box(circle)</entry>
        <entry>box</entry>
        <entry>circle to box</entry>
-       <entry>box('((0,0),2.0)'::circle)</entry>
+       <entry>box(circle '((0,0),2.0)')</entry>
        </row>
        <row>
-       <entry>box(point,point)</entry>
+       <entry>box(point, point)</entry>
        <entry>box</entry>
        <entry>points to box</entry>
-       <entry>box('(0,0)'::point,'(1,1)'::point)</entry>
+       <entry>box(point '(0,0)', point '(1,1)')</entry>
        </row>
        <row>
        <entry>box(polygon)</entry>
        <entry>box</entry>
        <entry>polygon to box</entry>
-       <entry>box('((0,0),(1,1),(2,0))'::polygon)</entry>
+       <entry>box(polygon '((0,0),(1,1),(2,0))')</entry>
        </row>
        <row>
        <entry>circle(box)</entry>
        <entry>circle</entry>
        <entry>to circle</entry>
-       <entry>circle('((0,0),(1,1))'::box)</entry>
+       <entry>circle(box '((0,0),(1,1))')</entry>
        </row>
        <row>
-       <entry>circle(point,float8)</entry>
+       <entry>circle(point, double precision)</entry>
        <entry>circle</entry>
        <entry>point to circle</entry>
-       <entry>circle('(0,0)'::point,2.0)</entry>
+       <entry>circle(point '(0,0)', 2.0)</entry>
        </row>
        <row>
        <entry>lseg(box)</entry>
        <entry>lseg</entry>
        <entry>box diagonal to lseg</entry>
-       <entry>lseg('((-1,0),(1,0))'::box)</entry>
+       <entry>lseg(box '((-1,0),(1,0))')</entry>
        </row>
        <row>
-       <entry>lseg(point,point)</entry>
+       <entry>lseg(point, point)</entry>
        <entry>lseg</entry>
        <entry>points to lseg</entry>
-       <entry>lseg('(-1,0)'::point,'(1,0)'::point)</entry>
+       <entry>lseg(point '(-1,0)', point '(1,0)')</entry>
        </row>
        <row>
        <entry>path(polygon)</entry>
        <entry>point</entry>
        <entry>polygon to path</entry>
-       <entry>path('((0,0),(1,1),(2,0))'::polygon)</entry>
+       <entry>path(polygon '((0,0),(1,1),(2,0))')</entry>
        </row>
        <row>
        <entry>point(circle)</entry>
        <entry>point</entry>
        <entry>center</entry>
-       <entry>point('((0,0),2.0)'::circle)</entry>
+       <entry>point(circle '((0,0),2.0)')</entry>
        </row>
        <row>
-       <entry>point(lseg,lseg)</entry>
+       <entry>point(lseg, lseg)</entry>
        <entry>point</entry>
        <entry>intersection</entry>
-       <entry>point('((-1,0),(1,0))'::lseg, '((-2,-2),(2,2))'::lseg)</entry>
+       <entry>point(lseg '((-1,0),(1,0))', lseg '((-2,-2),(2,2))')</entry>
        </row>
        <row>
        <entry>point(polygon)</entry>
        <entry>point</entry>
        <entry>center</entry>
-       <entry>point('((0,0),(1,1),(2,0))'::polygon)</entry>
+       <entry>point(polygon '((0,0),(1,1),(2,0))')</entry>
        </row>
        <row>
        <entry>polygon(box)</entry>
        <entry>polygon</entry>
        <entry>12 point polygon</entry>
-       <entry>polygon('((0,0),(1,1))'::box)</entry>
+       <entry>polygon(box '((0,0),(1,1))')</entry>
        </row>
        <row>
        <entry>polygon(circle)</entry>
        <entry>polygon</entry>
        <entry>12-point polygon</entry>
-       <entry>polygon('((0,0),2.0)'::circle)</entry>
+       <entry>polygon(circle '((0,0),2.0)')</entry>
        </row>
        <row>
-       <entry>polygon(<replaceable class="parameter">npts</replaceable>,circle)</entry>
+       <entry>polygon(<replaceable class="parameter">npts</replaceable>, circle)</entry>
        <entry>polygon</entry>
        <entry><replaceable class="parameter">npts</replaceable> polygon</entry>
-       <entry>polygon(12,'((0,0),2.0)'::circle)</entry>
+       <entry>polygon(12, circle '((0,0),2.0)')</entry>
        </row>
        <row>
        <entry>polygon(path)</entry>
        <entry>polygon</entry>
        <entry>path to polygon</entry>
-       <entry>polygon('((0,0),(1,1),(2,0))'::path)</entry>
+       <entry>polygon(path '((0,0),(1,1),(2,0))')</entry>
        </row>
       </tbody>
      </tgroup>
index c1ae073465bc4fadfbd246168b2daebc365a8bd5..38a02104aa8a7de20d3e41225ab996f8556ef503 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.23 2001/01/13 23:58:55 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.24 2001/01/20 20:59:28 petere Exp $
 -->
 
  <chapter id="libpqplusplus">
@@ -735,7 +735,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.23 2001/01/13 23:58:
     
     <programlisting>
 PgDatabase data;
-data.Exec("create table foo (a int4, b char(16), d float8)");
+data.Exec("create table foo (a int4, b char(16), d double precision)");
 data.Exec("copy foo from stdin");
 data.PutLine("3\tHello World\t4.5\n");
 data.PutLine("4\tGoodbye World\t7.11\n");
index a3d3a1a14ac31c1a76a9e1b48916a849e00f48d7..13b69533d2c61764362e5570a7b6cedcd7a79dd4 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.56 2001/01/18 07:18:39 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.57 2001/01/20 20:59:28 petere Exp $
 -->
 
  <chapter id="libpq-chapter">
@@ -1685,7 +1685,7 @@ int PQendcopy(PGconn *conn);
 As an example:
 
 <programlisting>
-PQexec(conn, "create table foo (a int4, b char(16), d float8)");
+PQexec(conn, "create table foo (a int4, b char(16), d double precision)");
 PQexec(conn, "copy foo from stdin");
 PQputline(conn, "3\thello world\t4.5\n");
 PQputline(conn,"4\tgoodbye world\t7.11\n");
@@ -2226,13 +2226,11 @@ main()
  *
  * populate a database by doing the following:
  *
- * CREATE TABLE test1 (i int4, d float4, p polygon);
+ * CREATE TABLE test1 (i int4, d real, p polygon);
  *
- * INSERT INTO test1 values (1, 3.567, '(3.0, 4.0, 1.0,
- * 2.0)'::polygon);
+ * INSERT INTO test1 values (1, 3.567, polygon '(3.0, 4.0, 1.0, 2.0)');
  *
- * INSERT INTO test1 values (2, 89.05, '(4.0, 3.0, 2.0,
- * 1.0)'::polygon);
+ * INSERT INTO test1 values (2, 89.05, polygon '(4.0, 3.0, 2.0, 1.0)');
  *
  * the expected output is:
  *
index 9acb962a18eb5ec196211d3593ce4a38df4cf76c..fb732c70b7db56580927f48faad996c993bbb955 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.20 2000/12/22 21:51:58 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.21 2001/01/20 20:59:28 petere Exp $
 -->
 
  <chapter id="odbc">
@@ -290,14 +290,6 @@ InstallDir = /opt/applix/axdata/axshlib
      </para>
     </tip>
 
-    <!--
-   <Para>
-   <Tip>
-   <Para>
-    The <productname>Postgres</productname> datetime type will break MS Access.
-   </Para>
-   </Tip>
-    -->
    </sect2>
   </sect1>
 
index 28cc25edaa36209f1e01df1d6a047c6b7af1de2b..def5e07f0845b0cb80e8292391df5ba2a675b06e 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.17 2001/01/18 07:11:36 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.18 2001/01/20 20:59:29 petere Exp $
 -->
 
  <chapter id="plsql">
@@ -170,9 +170,9 @@ END;
        must also have a default value specified.
        </para>
        <para>
-       The default value is evaluated ever time the function is called. So
+       The default value is evaluated every time the function is called. So
        assigning '<replaceable>now</replaceable>' to a variable of type
-       <replaceable>datetime</replaceable> causes the variable to have the
+       <type>timestamp</type> causes the variable to have the
        time of the actual function call, not when the function was
        precompiled into its bytecode.
        </para>
@@ -322,7 +322,7 @@ RENAME <replaceable>oldname</replaceable> TO <replaceable>newname</replaceable>;
      All expressions used in PL/pgSQL statements are processed using
      the backend's executor. Expressions that appear to contain
      constants may in fact require run-time evaluation (e.g. 'now' for the
-     datetime type) so
+     <type>timestamp</type> type) so
      it is impossible for the PL/pgSQL parser
      to identify real constant values other than the NULL keyword. All
      expressions are evaluated internally by executing a query
@@ -343,7 +343,7 @@ RENAME <replaceable>oldname</replaceable> TO <replaceable>newname</replaceable>;
      is a difference between what the two functions
 
      <programlisting>
-CREATE FUNCTION logfunc1 (text) RETURNS datetime AS '
+CREATE FUNCTION logfunc1 (text) RETURNS timestamp AS '
     DECLARE
         logtxt ALIAS FOR $1;
     BEGIN
@@ -356,10 +356,10 @@ CREATE FUNCTION logfunc1 (text) RETURNS datetime AS '
      and
 
      <programlisting>
-CREATE FUNCTION logfunc2 (text) RETURNS datetime AS '
+CREATE FUNCTION logfunc2 (text) RETURNS timestamp AS '
     DECLARE
         logtxt ALIAS FOR $1;
-        curtime datetime;
+        curtime timestamp;
     BEGIN
         curtime := ''now'';
         INSERT INTO logtable VALUES (logtxt, curtime);
@@ -371,7 +371,7 @@ CREATE FUNCTION logfunc2 (text) RETURNS datetime AS '
      do. In the case of logfunc1(), the <productname>Postgres</productname>
      main parser
      knows when preparing the plan for the INSERT, that the string 'now'
-     should be interpreted as datetime because the target field of logtable
+     should be interpreted as <type>timestamp</type> because the target field of logtable
      is of that type. Thus, it will make a constant from it at this time
      and this constant value is then used in all invocations of logfunc1()
      during the lifetime of the backend. Needless to say that this isn't what the
@@ -383,7 +383,7 @@ CREATE FUNCTION logfunc2 (text) RETURNS datetime AS '
      what type 'now' should become and therefore it returns a data type of
      text containing the string 'now'. During the assignment
      to the local variable curtime, the PL/pgSQL interpreter casts this
-     string to the datetime type by calling the text_out() and datetime_in()
+     string to the timestamp type by calling the text_out() and timestamp_in()
      functions for the conversion.
     </para>
     <para>
@@ -855,7 +855,7 @@ EXIT [ <replaceable>label</replaceable> ] [ WHEN <replaceable>expression</replac
      counterparts from the C language function discussion.
 
      <programlisting>
-CREATE FUNCTION add_one (int4) RETURNS int4 AS '
+CREATE FUNCTION add_one (integer) RETURNS integer AS '
     BEGIN
         RETURN $1 + 1;
     END;
@@ -881,7 +881,7 @@ CREATE FUNCTION concat_text (text, text) RETURNS text AS '
      The C functions.
 
      <programlisting>
-CREATE FUNCTION c_overpaid (EMP, int4) RETURNS bool AS '
+CREATE FUNCTION c_overpaid (EMP, integer) RETURNS bool AS '
     DECLARE
         emprec ALIAS FOR $1;
         sallim ALIAS FOR $2;
@@ -909,9 +909,9 @@ CREATE FUNCTION c_overpaid (EMP, int4) RETURNS bool AS '
      <programlisting>
 CREATE TABLE emp (
     empname text,
-    salary int4,
-    last_date datetime,
-    last_user name);
+    salary integer,
+    last_date timestamp,
+    last_user text);
 
 CREATE FUNCTION emp_stamp () RETURNS OPAQUE AS '
     BEGIN
@@ -930,7 +930,7 @@ CREATE FUNCTION emp_stamp () RETURNS OPAQUE AS '
 
         -- Remember who changed the payroll when
         NEW.last_date := ''now'';
-        NEW.last_user := getpgusername();
+        NEW.last_user := current_user;
         RETURN NEW;
     END;
 ' LANGUAGE 'plpgsql';
index 077d424c05b90aa3a003439f527b323a50113524..9597a88975f5dbc5f59cdd40802cb4ab7a794001 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/comment.sgml,v 1.5 2000/12/10 21:56:00 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/comment.sgml,v 1.6 2001/01/20 20:59:29 petere Exp $
 Postgres documentation
 -->
 
@@ -131,8 +131,8 @@ COMMENT ON TABLE my_table IS 'Employee Information';
 COMMENT ON TYPE my_type IS 'Complex Number support';
 COMMENT ON VIEW my_view IS 'View of departmental costs';
 COMMENT ON COLUMN my_table.my_field IS 'Employee ID number';
-COMMENT ON AGGREGATE my_aggregate float8 IS 'Computes sample variance';
-COMMENT ON FUNCTION my_function (datetime) IS 'Returns Roman Numeral';
+COMMENT ON AGGREGATE my_aggregate (double precision) IS 'Computes sample variance';
+COMMENT ON FUNCTION my_function (timestamp) IS 'Returns Roman Numeral';
 COMMENT ON OPERATOR ^ (text, text) IS 'Performs intersection of two text';
 COMMENT ON TRIGGER my_trigger ON my_table IS 'Used for R.I.';
    </programlisting>
index 16d2e5b8248d73da89ec755d8b511e380205af55..07546a0732b7402efd8521424fba0a2f235f9368 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_aggregate.sgml,v 1.12 2000/10/05 19:48:17 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_aggregate.sgml,v 1.13 2001/01/20 20:59:29 petere Exp $
 Postgres documentation
 -->
 
@@ -159,8 +159,8 @@ CREATE
    <command>CREATE AGGREGATE</command> 
    allows a user or programmer to extend <productname>Postgres</productname>
    functionality by defining new aggregate functions. Some aggregate functions
-   for base types such as <function>min(int4)</function>
-   and <function>avg(float8)</function> are already provided in the base
+   for base types such as <function>min(integer)</function>
+   and <function>avg(double precision)</function> are already provided in the base
    distribution. If one defines new types or needs an aggregate function not
    already provided, then <command>CREATE AGGREGATE</command>
    can be used to provide the desired features.
index 0e119f7d6652de86f88edf520c3d34130e167832..87802323c257362441de2f0847f40486bbfb0aca 100644 (file)
     CREATE TABLE shoelace_log (
         sl_name    char(10),      -- shoelace changed
         sl_avail   integer,       -- new available value
-        log_who    name,          -- who did it
-        log_when   datetime       -- when
+        log_who    text,          -- who did it
+        log_when   timestamp      -- when
     );
 
     CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data
         DO INSERT INTO shoelace_log VALUES (
                                         NEW.sl_name,
                                         NEW.sl_avail,
-                                        getpgusername(),
-                                        'now'::text
+                                        current_user,
+                                        current_timestamp
                                     );
 </ProgramListing>
-
-    One interesting detail is the casting of 'now' in the rules
-    INSERT action to type text. Without that, the parser would see
-    at CREATE RULE time, that the target type in <Filename>shoelace_log</Filename>
-    is a datetime and tries to make a constant from it - with success.
-    So a constant datetime value would be stored in the rule action
-    and all log entries would have the time of the CREATE RULE statement.
-    Not exactly what we want. The casting causes the parser to
-    construct a datetime('now'::text) expression and this will be 
-    evaluated when the rule is executed.  (Another way to do this is to
-    use the function now() instead of a literal constant.)
 </Para>
 
 <Para>
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            *NEW*.sl_name, *NEW*.sl_avail,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data *NEW*, shoelace_data *OLD*;
 </ProgramListing>
 
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            *NEW*.sl_name, *NEW*.sl_avail,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data *NEW*, shoelace_data *OLD*,
            <FirstTerm>shoelace_data shoelace_data</FirstTerm>;
 </ProgramListing>
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            *NEW*.sl_name, *NEW*.sl_avail,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data *NEW*, shoelace_data *OLD*,
            shoelace_data shoelace_data
      <FirstTerm>WHERE int4ne(*NEW*.sl_avail, *OLD*.sl_avail)</FirstTerm>;
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            *NEW*.sl_name, *NEW*.sl_avail,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data *NEW*, shoelace_data *OLD*,
            shoelace_data shoelace_data
      WHERE int4ne(*NEW*.sl_avail, *OLD*.sl_avail)
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            <FirstTerm>shoelace_data.sl_name</FirstTerm>, <FirstTerm>6</FirstTerm>,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data *NEW*, shoelace_data *OLD*,
            shoelace_data shoelace_data
      WHERE int4ne(<FirstTerm>6</FirstTerm>, *OLD*.sl_avail)
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            shoelace_data.sl_name, 6,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data *NEW*, shoelace_data *OLD*,
            shoelace_data shoelace_data
      WHERE int4ne(6, <FirstTerm>shoelace_data.sl_avail</FirstTerm>)
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            shoelace_data.sl_name, 6,
-           getpgusername(), datetime('now'::text))
+           current_user, current_timestamp
       FROM shoelace_data
      WHERE 6 != shoelace_data.sl_avail
        AND shoelace_data.sl_name = 'sl7';
 <ProgramListing>
     INSERT INTO shoelace_log VALUES(
            shoelace_data.sl_name, <FirstTerm>shoelace_data.sl_avail</FirstTerm>,
-           getpgusername(), 'now')
+           current_user, current_timestamp)
       FROM shoelace_data
      WHERE <FirstTerm>shoelace_data.sl_avail</FirstTerm> != shoelace_data.sl_avail
        AND shoelace_data.sl_name = 'sl7';
 <ProgramListing>
     INSERT INTO shoelace_log SELECT
            shoelace_data.sl_name, 0,
-           getpgusername(), 'now'
+           current_user, current_timestamp
       FROM shoelace_data
      WHERE 0 != shoelace_data.sl_avail
        AND <FirstTerm>shoelace_data.sl_color = 'black'</FirstTerm>;
     INSERT INTO shoelace_log SELECT
            s.sl_name,
            int4pl(s.sl_avail, shoelace_arrive.arr_quant),
-           getpgusername(),
-           datetime('now'::text)
+           current_user,
+           current_timestamp
       FROM shoelace_arrive shoelace_arrive, shoelace_ok shoelace_ok,
            shoelace_ok *OLD*, shoelace_ok *NEW*,
            shoelace shoelace, shoelace *OLD*,
     INSERT INTO shoelace_log SELECT
            s.sl_name,
            s.sl_avail + shoelace_arrive.arr_quant,
-           getpgusername(),
-           'now'
+           current_user,
+           current_timestamp
       FROM shoelace_arrive shoelace_arrive, shoelace_data shoelace_data,
            shoelace_data s
      WHERE s.sl_name = shoelace_arrive.arr_name
index 4c9930622e91a32941a2c34e78100a624e9dca22..0bf7fe8967d8e31049eb2b29c298622ecbda6c77 100644 (file)
@@ -307,7 +307,8 @@ then fail.
 
 <para>
 There is only one exponentiation
-operator defined in the catalog, and it takes <type>float8</type> arguments.
+operator defined in the catalog, and it takes arguments of type 
+<type>double precision</type>.
 The scanner assigns an initial type of <type>int4</type> to both arguments
 of this query expression:
 <programlisting>
@@ -322,7 +323,7 @@ So the parser does a type conversion on both operands and the query
 is equivalent to
 
 <programlisting>
-tgl=> select float8(2) ^ float8(3) AS "Exp";
+tgl=> select CAST(2 AS double precision) ^ CAST(3 AS double precision) AS "Exp";
  Exp
 -----
    8
@@ -754,8 +755,8 @@ Here, the unknown-type literal 'b' will be resolved as type text.
 
 <para>
 <programlisting>
-tgl=> SELECT 1.2 AS "Float8" UNION SELECT 1;
- Float8
+tgl=> SELECT 1.2 AS "Double" UNION SELECT 1;
+ Double
 --------
       1
     1.2
@@ -773,7 +774,7 @@ the first/top clause in the union:
 
 <programlisting>
 tgl=> SELECT 1 AS "All integers"
-tgl-> UNION SELECT '2.2'::float4;
+tgl-> UNION SELECT CAST('2.2' AS REAL);
  All integers
 --------------
             1
@@ -782,8 +783,9 @@ tgl-> UNION SELECT '2.2'::float4;
 </programlisting>
 </para>
 <para>
-Since float4 is not a preferred type, the parser sees no reason to select it
-over int4, and instead falls back on the use-the-first-alternative rule.
+Since <type>REAL</type> is not a preferred type, the parser sees no reason
+to select it over <type>INTEGER</type> (which is what the 1 is), and instead
+falls back on the use-the-first-alternative rule.
 This example demonstrates that the preferred-type mechanism doesn't encode
 as much information as we'd like.  Future versions of
 <productname>Postgres</productname> may support a more general notion of
index 912107bb666eb2f01d1f8e7105f06e4212c02bcc..cafaf47b4e5f0be15be96fdc1962d0a3f18d97ed 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.28 2001/01/13 23:58:55 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.29 2001/01/20 20:59:29 petere Exp $
 -->
 
  <chapter id="xfunc">
@@ -186,7 +186,7 @@ CREATE FUNCTION double_salary(EMP)
 
 SELECT name, double_salary(EMP) AS dream
     FROM EMP
-    WHERE EMP.cubicle ~= '(2,1)'::point;
+    WHERE EMP.cubicle ~= point '(2,1)';
 
 
 +-----+-------+
@@ -231,10 +231,10 @@ SELECT name(EMP) AS youngster
      <programlisting>
 CREATE FUNCTION new_emp() 
     RETURNS EMP
-    AS 'SELECT \'None\'::text AS name,
+    AS 'SELECT text ''None'' AS name,
         1000 AS salary,
         25 AS age,
-        \'(2,2)\'::point AS cubicle'
+        point ''(2,2)'' AS cubicle'
     LANGUAGE 'sql';
      </programlisting>
     </para>
@@ -255,7 +255,7 @@ CREATE FUNCTION new_emp()
       </listitem>
       <listitem>
        <para>
-       You must typecast the expressions (using ::) to match the
+       You must typecast the expressions to match the
        composite type's definition, or you will get errors like this:
        <programlisting>
         <computeroutput>
@@ -1186,7 +1186,7 @@ LANGUAGE 'c';
 
       <listitem>
        <para>
-       Compiling and loading your object code  so  that
+       Compiling and linking your object code  so  that
        it  can  be  dynamically  loaded  into  
        <productname>Postgres</productname>
        always requires special flags.