On Fri, 2006-11-10 at 10:50 +0100, Peter Eisentraut wrote:
> Am Donnerstag, 9. November 2006 16:04 schrieb Theo Kramer:
> > Thanks - attached output of 'diff -c libpq.sgml libpq.sgml.org' where
> > libpq.sgml contains my proposed changes and libpq.sgml.org originates
> > from the 8.2 Beta 2 distribution for comment.
> 
> The patch is backwards.
> 

Thanks - re-done and re-attached

-- 
Regards
Theo
*** libpq.sgml.org	Mon Oct 23 20:10:31 2006
--- libpq.sgml	Tue Nov  7 22:06:37 2006
***************
*** 956,962 ****
  are connected to. The number is formed by converting the major, minor, and
  revision numbers into two-decimal-digit numbers and appending them
  together. For example, version 8.1.5 will be returned as 80105, and version
! 8.1 will be returned as 80100 (leading zeroes are not shown).  Zero is
  returned if the connection is bad.
  </para>
  </listitem>
--- 956,962 ----
  are connected to. The number is formed by converting the major, minor, and
  revision numbers into two-decimal-digit numbers and appending them
  together. For example, version 8.1.5 will be returned as 80105, and version
! 8.2 will be returned as 80200 (leading zeroes are not shown).  Zero is
  returned if the connection is bad.
  </para>
  </listitem>
***************
*** 1138,1178 ****
  </para>
  
  <para>
! If parameters are used, they are referred to in the command string
! as <literal>$1</>, <literal>$2</>, etc.
! <parameter>nParams</> is the number of parameters supplied; it is the length
! of the arrays <parameter>paramTypes[]</>, <parameter>paramValues[]</>,
! <parameter>paramLengths[]</>, and <parameter>paramFormats[]</>.  (The
! array pointers may be <symbol>NULL</symbol> when <parameter>nParams</> is zero.)
! <parameter>paramTypes[]</> specifies, by OID, the data types to be assigned to
! the parameter symbols.  If <parameter>paramTypes</> is <symbol>NULL</symbol>, or any particular
! element in the array is zero, the server assigns a data type to the parameter
! symbol in the same way it would do for an untyped literal string.
! <parameter>paramValues[]</> specifies the actual values of the parameters.
! A null pointer in this array means the corresponding parameter is null;
! otherwise the pointer points to a zero-terminated text string (for text
! format) or binary data in the format expected by the server (for binary
! format).
! <parameter>paramLengths[]</> specifies the actual data lengths of
! binary-format parameters.  It is ignored for null parameters and text-format
! parameters.  The array pointer may be null when there are no binary
! parameters.
! <parameter>paramFormats[]</> specifies whether parameters are text (put a zero
! in the array) or binary (put a one in the array).  If the array pointer is
! null then all parameters are presumed to be text.
! <parameter>resultFormat</> is zero to obtain results in text format, or one to
! obtain results in binary format.  (There is not currently a provision to
! obtain different result columns in different formats, although that is
! possible in the underlying protocol.)
! </para>
! </listitem>
! </varlistentry>
  </variablelist>
  
  The primary advantage of <function>PQexecParams</> over <function>PQexec</>
  is that parameter values may be separated from the command string, thus
  avoiding the need for tedious and error-prone quoting and escaping.
  
  Unlike <function>PQexec</>, <function>PQexecParams</> allows at most one SQL
  command in the given string.  (There can be semicolons in it, but not more
  than one nonempty command.)  This is a limitation of the underlying protocol,
--- 1138,1237 ----
  </para>
  
  <para>
! 
! <variablelist>
!   <varlistentry>
!     <term><parameter>command</parameter></term>
!     <listitem>
!       <para>
!         The SQL command to be executed. If parameters are used, they are referred to in the command string
!         as <literal>$1</>, <literal>$2</>, etc.
!       </para>
!     </listitem>
!   </varlistentry>
! 
!   <varlistentry>
!     <term><parameter>nParams</parameter></term>
!     <listitem>
!       <para>
!         The number of parameters supplied; it is the length
!         of the arrays <parameter>paramTypes[]</>, <parameter>paramValues[]</>,
!         <parameter>paramLengths[]</>, and <parameter>paramFormats[]</>. (The array pointers
!         may be <symbol>NULL</symbol> when <parameter>nParams</> is zero.)
!       </para>
!     </listitem>
!   </varlistentry>
! 
!   <varlistentry>
!     <term><parameter>paramTypes[]</parameter></term>
!     <listitem>
!       <para>
!         Specifies, by OID, the data types to be assigned to
!         the parameter symbols.  If <parameter>paramTypes</> is <symbol>NULL</symbol>, or any particular
!         element in the array is zero, the server assigns a data type to the parameter
!         symbol in the same way it would do for an untyped literal string.
!       </para>
!     </listitem>
!   </varlistentry>
! 
!   <varlistentry>
!     <term><parameter>paramValues[]</parameter></term>
!     <listitem>
!       <para>
!         Specifies the actual values of the parameters.
!         A null pointer in this array means the corresponding parameter is null;
!         otherwise the pointer points to a zero-terminated text string (for text
!         format) or binary data in the format expected by the server (for binary
!         format).
!       </para>
!     </listitem>
!   </varlistentry>
! 
!   <varlistentry>
!     <term><parameter>paramLengths[]</parameter></term>
!     <listitem>
!       <para>
!         Specifies the actual data lengths of binary-format parameters.
!         It is ignored for null parameters and text-format parameters.
!         The array pointer may be null when there are no binary parameters.
!       </para>
!     </listitem>
!   </varlistentry>
! 
!   <varlistentry>
!     <term><parameter>paramFormats[]</parameter></term>
!     <listitem>
!       <para>
!         Specifies whether parameters are text (put a zero in the array for
!         the corresponding parameter) or binary (put a one in the array for
!         the corresponding parameter). If the array pointer is null then all
!         parameters are presumed to be zero terminated text strings.
!       </para>
!     </listitem>
!   </varlistentry>
! 
!   <varlistentry>
!     <term><parameter>resultFormat</parameter></term>
!     <listitem>
!       <para>
!         Specify zero to obtain results in text format, or one to
!         obtain results in binary format.  (There is not currently a provision to
!         obtain different result columns in different formats, although that is
!         possible in the underlying protocol.)
!       </para>
!     </listitem>
!   </varlistentry>
! 
  </variablelist>
+ </para>
  
+ <para>
  The primary advantage of <function>PQexecParams</> over <function>PQexec</>
  is that parameter values may be separated from the command string, thus
  avoiding the need for tedious and error-prone quoting and escaping.
+ </para>
  
+ <para>
  Unlike <function>PQexec</>, <function>PQexecParams</> allows at most one SQL
  command in the given string.  (There can be semicolons in it, but not more
  than one nonempty command.)  This is a limitation of the underlying protocol,
***************
*** 1200,1205 ****
--- 1259,1416 ----
  </tip>
  
  <para>
+   <xref linkend="libpq-param-table"> shows a range of typical values for
+   <parameter>paramTypes[]</parameter> in column <acronym>PG Type</acronym>, as determined from 
+   <filename>pg_type.h</>, as well as the corresponding SQL attribute names, ODBC and C types, and lengths.
+ </para>
+ 
+    <table id="libpq-param-table">
+     <title>Parameter Types</title>
+     <tgroup cols="7">
+      <thead>
+       <row>
+        <entry>Name</entry>
+        <entry>PG Type</entry>
+        <entry>ODBC Type</entry>
+        <entry>C Type</entry>
+        <entry>Length Text Format</entry>
+        <entry>Length Binary Format</entry>
+        <entry>Description</entry>
+       </row>
+      </thead>
+ 
+      <tbody>
+       <row>
+        <entry><type>character(n)</type></entry>
+        <entry><type>BPCHAROID</type></entry>
+        <entry><type>SQL_CHAR</type></entry>
+        <entry><type>char[n + 1]</type></entry>
+        <entry>0</entry>
+        <entry>n</entry>
+        <entry>Blanks are automatically padded for the length of the string.</entry>
+       </row>
+ 
+       <row>
+        <entry><type>varchar(n)</type></entry>
+        <entry><type>VARCHAROID</type></entry>
+        <entry><type>SQL_VARCHAR</type></entry>
+        <entry><type>char[n + 1]</type></entry>
+        <entry>0</entry>
+        <entry>n</entry>
+        <entry>Not blank padded.</entry>
+       </row>
+ 
+       <row>
+        <entry><type>text</type></entry>
+        <entry><type>TEXTOID</type></entry>
+        <entry><type>SQL_LONGVARCHAR</type></entry>
+        <entry><type>char *</type></entry>
+        <entry>0</entry>
+        <entry>n</entry>
+        <entry>String with appropriate size must be allocated. Care must be taken not to overflow allocated string.</entry>
+       </row>
+ 
+       <row>
+        <entry><type>smallint</type></entry>
+        <entry><type>INT2OID</type></entry>
+        <entry><type>SQL_SHORT</type></entry>
+        <entry><type>short</type></entry>
+        <entry>0</entry>
+        <entry>2</entry>
+        <entry>2 byte short integer</entry>
+       </row>
+ 
+       <row>
+        <entry><type>integer</type></entry>
+        <entry><type>INT4OID</type></entry>
+        <entry><type>SQL_INTEGER</type></entry>
+        <entry><type>int</type></entry>
+        <entry>0</entry>
+        <entry>4</entry>
+        <entry>4 byte integer</entry>
+       </row>
+ 
+       <row>
+        <entry><type>real</type></entry>
+        <entry><type>FLOAT4OID</type></entry>
+        <entry><type>SQL_REAL</type></entry>
+        <entry><type>float</type></entry>
+        <entry>0</entry>
+        <entry>4</entry>
+        <entry>4 byte floating point</entry>
+       </row>
+ 
+       <row>
+        <entry><type>double precision</type></entry>
+        <entry><type>FLOAT8OID</type></entry>
+        <entry><type>SQL_DOUBLE</type></entry>
+        <entry><type>double</type></entry>
+        <entry>0</entry>
+        <entry>8</entry>
+        <entry>8 byte floating point</entry>
+       </row>
+ 
+       <row>
+        <entry><type>numeric[(p,s)]</type></entry>
+        <entry><type>NUMERICOID</type></entry>
+        <entry><type>SQL_NUMERIC</type></entry>
+        <entry><type>structure</type></entry>
+        <entry>0</entry>
+        <entry>variable</entry>
+        <entry>Cast to and from double if no bcd library and use 8 as binary length. Equivalent to decimal[(p,s)]</entry>
+       </row>
+ 
+       <row>
+        <entry><type>timestamp</type></entry>
+        <entry><type>TIMESTAMPOID</type></entry>
+        <entry><type>SQL_TYPE_TIMESTAMP</type></entry>
+        <entry><type>long long</type></entry>
+        <entry>0</entry>
+        <entry>8</entry>
+        <entry></entry>
+       </row>
+ 
+      </tbody>
+     </tgroup>
+    </table>
+ 
+    <note>
+    <title>Column Details</title>
+    <para>
+    </para>
+    <para>
+      <quote>Name</quote> The SQL attribute type.
+    </para>
+    <para>
+      <quote>PG Type</quote> The equivalent <productname>PostgreSQL</> type from
+      <filename>pg_types.h</> for <parameter>paramTypes[]</>.
+    </para>
+    <para>
+      <quote>ODBC Type</quote> The equivalent ODBC type.
+    </para>
+    <para>
+      <quote>C Type</quote> The equivalent C language type.
+    </para>
+    <para>
+      <quote>Length Text Format</quote> indicates value for <parameter>paramLengths[]</>
+      for text format.
+    </para>
+    <para>
+      <quote>Length Binary Format</quote> indicates value for <parameter>paramLengths[]</>
+      for binary format.
+    </para>
+    </note>
+    <para>
+      Refer to table <xref linkend="datatype-table"> for further details on data types supported.
+    </para>
+ 
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ 
+ </para>
+ 
+ <para>
  <variablelist>
  <varlistentry>
  <term><function>PQprepare</function><indexterm><primary>PQprepare</></></term>
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to