r10922: 03 May 2006 Kevin Rosenberg <kevin@rosenberg.net>
[clsql.git] / doc / ref-fdml.xml
index f51a26c5d5ff216f439ee4b16bded62a7fe4d19f..a5162ff6c1b3801e054353b6bd28556e2d053d4d 100644 (file)
   <title>Functional Data Manipulation Language (FDML)</title> 
   <partintro>
     <para>
-      <!-- introduction --> 
+      The functional data manipulation interface provided by &clsql;
+      includes functions for inserting, updating and deleting records
+      in existing database tables and executing SQL queries and
+      statements with the results of queries returned as Lisp types.
+      SQL statements expressed as strings may be executed with the
+      <link linkend="query"><function>query</function></link> and
+      <link
+      linkend="execute-command"><function>execute-command</function></link>
+      functions. The <link
+      linkend="select"><function>select</function></link> function, on
+      the other hand, allows for the construction of queries in Lisp
+      using the symbolic SQL syntax. Finally, iterative manipulation
+      of query results is supported by <link
+      linkend="do-query"><function>do-query</function></link>, <link
+      linkend="map-query"><function>map-query</function></link> and an
+      extended clause for the <link
+      linkend="loop-tuples"><function>loop</function></link> macro.
     </para>
   </partintro>
 
-
   <!-- Caching table queries --> 
 
   <refentry id="cache-table-queries-default">
@@ -22,7 +37,7 @@
       <refentrytitle>*CACHE-TABLE-QUERIES-DEFAULT*</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Variable</emphasis> <emphasis role="bold">*CACHE-TABLE-QUERIES-DEFAULT*</emphasis></refname>
+      <refname>*CACHE-TABLE-QUERIES-DEFAULT*</refname>
       <refpurpose>Specifies the default behaviour for caching of
       attribute types.</refpurpose>
       <refclass>Variable</refclass>
       <refentrytitle>CACHE-TABLE-QUERIES</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">CACHE-TABLE-QUERIES</emphasis></refname>
-      <refpurpose>Controls the caching of attribute type information for a database table.</refpurpose>
+      <refname>CACHE-TABLE-QUERIES</refname>
+      <refpurpose>Control the caching of table attribute types.</refpurpose>
       <refclass>Function</refclass>
     </refnamediv>
     <refsect1>
       <title>Syntax</title>
       <synopsis>
-      <function>cache-table-queries</function> <replaceable>table</replaceable> &amp;key <replaceable>action</replaceable> <replaceable>database</replaceable>) => <returnvalue></returnvalue></synopsis>
+      <function>cache-table-queries</function> <replaceable>table</replaceable> &amp;key <replaceable>action</replaceable> <replaceable>database</replaceable> => <returnvalue></returnvalue></synopsis>
     </refsect1>
     <refsect1>
       <title>Arguments and Values</title>
     </refsect1>
     <refsect1>
       <title>Side Effects</title>
-      <para>
+       <para>
         The internal attribute cache for
         <parameter>database</parameter> is modified.
-      </para>
-    </refsect1>
+       </para>
+     </refsect1>
     <refsect1>
       <title>Affected by</title>
       <simplelist>
     </refsect1>
   </refentry>
 
-
-  <!-- insert/update/delete records --> 
-
   <refentry id="insert-records">
     <refmeta>
       <refentrytitle>INSERT-RECORDS</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">INSERT-RECORDS</emphasis></refname>
+      <refname>INSERT-RECORDS</refname>
       <refpurpose>Insert tuples of data into a database table.</refpurpose>
       <refclass>Function</refclass>
     </refnamediv>
     </refsect1>
     <refsect1>
       <title>See Also</title>
-      <para>
-        <simplelist>
-          <member><link linkend="update-records"><function>update-records</function></link></member>
-          <member><link linkend="delete-records"><function>delete-records</function></link></member>
-        </simplelist>
-      </para>
+      <simplelist>
+        <member><link linkend="update-records"><function>update-records</function></link></member>
+        <member><link linkend="delete-records"><function>delete-records</function></link></member>
+      </simplelist>
     </refsect1>
     <refsect1>
       <title>Notes</title>
       <refentrytitle>UPDATE-RECORDS</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">UPDATE-RECORDS</emphasis></refname>
+      <refname>UPDATE-RECORDS</refname>
       <refpurpose>Updates the values of existing records.</refpurpose>
       <refclass>Function</refclass>
     </refnamediv>
         :from [employee]
         :where [= [emplid] 1] 
         :field-names nil)
-=> (("Vladamir" "Lenin" "lenin@soviet.org"))
+=> (("Vladimir" "Lenin" "lenin@soviet.org"))
 (update-records [employee] 
                 :av-pairs'((first_name "Yuri")
                            (last_name "Gagarin")
       <refentrytitle>DELETE-RECORDS</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">DELETE-RECORDS</emphasis></refname>
+      <refname>DELETE-RECORDS</refname>
       <refpurpose>Delete records from a database table.</refpurpose>
       <refclass>Function</refclass>
     </refnamediv>
       <refentrytitle>EXECUTE-COMMAND</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Generic Function</emphasis> <emphasis role="bold">EXECUTE-COMMAND</emphasis></refname>
+      <refname>EXECUTE-COMMAND</refname>
       <refpurpose>Execute an SQL command which returns no values.</refpurpose>
       <refclass>Generic Function</refclass>
     </refnamediv>
       <refentrytitle>QUERY</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Generic Function</emphasis> <emphasis role="bold">QUERY</emphasis></refname>
+      <refname>QUERY</refname>
       <refpurpose>Execute an SQL query and return the tuples as a 
       list.</refpurpose>
       <refclass>Generic Function</refclass>
       <title>Examples</title>
       <screen>
 (query "select emplid,first_name,last_name,height from employee where emplid = 1")
-=> ((1 "Vladamir" "Lenin" 1.5564661d0)), 
+=> ((1 "Vladimir" "Lenin" 1.5564661d0)), 
    ("emplid" "first_name" "last_name" "height")
 
 (query "select emplid,first_name,last_name,height from employee where emplid = 1" 
        :field-names nil)
-=> ((1 "Vladamir" "Lenin" 1.5564661d0))
+=> ((1 "Vladimir" "Lenin" 1.5564661d0))
 
 (query "select emplid,first_name,last_name,height from employee where emplid = 1" 
        :field-names nil
        :result-types nil)
-=> (("1" "Vladamir" "Lenin" "1.5564661"))
+=> (("1" "Vladimir" "Lenin" "1.5564661"))
 
 (query "select emplid,first_name,last_name,height from employee where emplid = 1" 
        :field-names nil
        :result-types '(:int t t :double))
-=> ((1 "Vladamir" "Lenin" 1.5564661))
+=> ((1 "Vladimir" "Lenin" 1.5564661))
 
 (query "select last_name from employee where emplid > 5" :flatp t)
 => ("Andropov" "Chernenko" "Gorbachev" "Yeltsin" "Putin"), 
       <refentrytitle>PRINT-QUERY</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">PRINT-QUERY</emphasis></refname>
+      <refname>PRINT-QUERY</refname>
       <refpurpose>Prints a tabular report of query results.</refpurpose>
       <refclass>Function</refclass>
     </refnamediv>
                      :where [&lt; [emplid] 5]] 
               :titles '("ID" "FORENAME" "SURNAME" "EMAIL"))
 ID FORENAME SURNAME  EMAIL               
-1  Vladamir Lenin    lenin@soviet.org    
+1  Vladimir Lenin    lenin@soviet.org    
 2  Josef    Stalin   stalin@soviet.org   
 3  Leon     Trotsky  trotsky@soviet.org  
 4  Nikita   Kruschev kruschev@soviet.org 
@@ -1069,7 +1079,7 @@ ID FORENAME   SURNAME   EMAIL
 7  Konstantin Chernenko chernenko@soviet.org 
 8  Mikhail    Gorbachev gorbachev@soviet.org 
 9  Boris      Yeltsin   yeltsin@soviet.org   
-10 Vladamir   Putin     putin@soviet.org     
+10 Vladimir   Putin     putin@soviet.org     
 => 
 </screen>
     </refsect1>
@@ -1116,14 +1126,14 @@ ID FORENAME   SURNAME   EMAIL
       <refentrytitle>SELECT</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">SELECT</emphasis></refname>
+      <refname>SELECT</refname>
       <refpurpose>Executes a query given the supplied constraints.</refpurpose>
       <refclass>Function</refclass>
     </refnamediv>
     <refsect1>
       <title>Syntax</title>
       <synopsis>
-      <function>select</function> &amp;rest <replaceable>identifiers</replaceable> &amp;key <replaceable>all</replaceable> <replaceable>distinct</replaceable> <replaceable>from</replaceable> <replaceable>group-by</replaceable> <replaceable>having</replaceable> <replaceable>order-by</replaceable> <replaceable>set-operation</replaceable> <replaceable>where</replaceable> <replaceable>result-types</replaceable> <replaceable>field-names</replaceable> <replaceable>flatp</replaceable> <replaceable>refresh</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
+      <function>select</function> &amp;rest <replaceable>identifiers</replaceable> &amp;key <replaceable>all</replaceable> <replaceable>distinct</replaceable> <replaceable>from</replaceable> <replaceable>group-by</replaceable> <replaceable>having</replaceable> <replaceable>order-by</replaceable> <replaceable>set-operation</replaceable> <replaceable>where</replaceable> <replaceable>result-types</replaceable> <replaceable>field-names</replaceable> <replaceable>flatp</replaceable> <replaceable>refresh</replaceable> <replaceable>caching</replaceable> <replaceable>database</replaceable> => <returnvalue>result</returnvalue></synopsis>
     </refsect1>
     <refsect1>
       <title>Arguments and Values</title>
@@ -1178,6 +1188,22 @@ ID FORENAME   SURNAME   EMAIL
             </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><parameter>limit</parameter></term>
+          <listitem>
+            <para>
+              A non-negative integer. 
+            </para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><parameter>offset</parameter></term>
+          <listitem>
+            <para>
+              A non-negative integer. 
+            </para>
+          </listitem>
+        </varlistentry>
         <varlistentry>
           <term><parameter>order-by</parameter></term>
           <listitem>
@@ -1270,6 +1296,35 @@ ID FORENAME   SURNAME   EMAIL
           </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><parameter>refresh</parameter></term>
+          <listitem> 
+          <para>
+            This value is only considered when CLOS objects are being
+            selected. A boolean with a default value of &nil;. When
+            the value of the <varname>caching</varname> keyword is
+            &t;, a second equivalent <function>select</function> call
+            will return the same view class instance objects. When
+            <varname>refresh</varname> is &t;, then slots of the
+            existing instances are updated as necessary. In such
+            cases, you may wish to override the hook
+            <function>instance-refresh</function>.
+          </para>
+          </listitem>
+        </varlistentry>
+        <varlistentry>
+          <term><parameter>caching</parameter></term>
+          <listitem> 
+          <para>
+            This value is only considered when CLOS objects are being
+            selected.  A boolean with a default value of
+            <varname>*default-caching*</varname>. &clsql; caches
+            objects in accordance with the &commonsql; interface: a
+            second equivalent <function>select</function> call will
+            return the same view class instance objects.
+          </para>
+          </listitem>
+        </varlistentry>
         <varlistentry>
           <term><parameter>result</parameter></term>
           <listitem>
@@ -1280,7 +1335,7 @@ ID FORENAME   SURNAME   EMAIL
               in the tuple.
             </para>
           </listitem>
-        </varlistentry>
+        </varlistentry>        
       </variablelist>
     </refsect1>
     <refsect1>
@@ -1302,8 +1357,8 @@ ID FORENAME   SURNAME   EMAIL
         specified lisp type. The keyword arguments
         <parameter>all</parameter>, <parameter>distinct</parameter>,
         <parameter>from</parameter>, <parameter>group-by</parameter>,
-        <parameter>having</parameter>,
-        <parameter>order-by</parameter>,
+        <parameter>having</parameter>, <parameter>limit</parameter>, 
+        <parameter>offset</parameter>, <parameter>order-by</parameter>,
         <parameter>set-operation</parameter> and
         <parameter>where</parameter> are used to specify, using the
         symbolic SQL syntax, the corresponding components of the SQL
@@ -1358,7 +1413,7 @@ ID FORENAME   SURNAME   EMAIL
                      :field-names nil 
                      :result-types nil 
                      :order-by [first-name])
-=> ("Boris" "Josef" "Konstantin" "Leon" "Leonid" "Mikhail" "Nikita" "Vladamir"
+=> ("Boris" "Josef" "Konstantin" "Leon" "Leonid" "Mikhail" "Nikita" "Vladimir"
     "Yuri")
 
 (select [first-name] [count [*]] :from [employee]
@@ -1367,7 +1422,7 @@ ID FORENAME   SURNAME   EMAIL
                                 :order-by [first-name]
                                 :field-names nil)
 => (("Boris" "1") ("Josef" "1") ("Konstantin" "1") ("Leon" "1") ("Leonid" "1")
-    ("Mikhail" "1") ("Nikita" "1") ("Vladamir" "2") ("Yuri" "1"))
+    ("Mikhail" "1") ("Nikita" "1") ("Vladimir" "2") ("Yuri" "1"))
 
 (select [last-name] :from [employee] 
                     :where [like [email] "%org"]
@@ -1384,7 +1439,7 @@ ID FORENAME   SURNAME   EMAIL
                        :result-types :auto)
 => (10)
 
-(clsql:select [avg [height]] :from [employee] :flatp t :field-names nil)
+(select [avg [height]] :from [employee] :flatp t :field-names nil)
 => (1.58999584d0)
 
 (select [emplid] [last-name] :from [employee] :where [= [emplid] 1]) 
@@ -1403,19 +1458,27 @@ ID FORENAME   SURNAME   EMAIL
                  :flatp t)
 => (1 2 3 4)
 
-(clsql:select [emplid] :from [employee] 
-                       :where [in [emplid] '(1 2 3 4)]
-                       :flatp t 
-                       :order-by [emplid] 
-                       :field-names nil)
+(select [emplid] :from [employee] 
+        :where [in [emplid] '(1 2 3 4)]
+        :flatp t 
+        :order-by [emplid] 
+        :field-names nil)
 => (1 2 3 4)
 
+(select [emplid] :from [employee] 
+        :order-by [emplid]
+        :limit 5 
+        :offset 3
+        :field-names nil
+        :flatp t)
+=> (4 5 6 7 8)
+
 (select [first-name] [last-name] :from [employee] 
         :field-names nil 
         :order-by '(([first-name] :asc) ([last-name] :desc)))
 => (("Boris" "Yeltsin") ("Josef" "Stalin") ("Konstantin" "Chernenko")
     ("Leon" "Trotsky") ("Leonid" "Brezhnev") ("Mikhail" "Gorbachev")
-    ("Nikita" "Kruschev") ("Vladamir" "Putin") ("Vladamir" "Lenin")
+    ("Nikita" "Kruschev") ("Vladimir" "Putin") ("Vladimir" "Lenin")
     ("Yuri" "Andropov"))
 
 (select [last-name] :from [employee]                   
@@ -1426,15 +1489,13 @@ ID FORENAME   SURNAME   EMAIL
                  :field-names nil)
 => ("Andropov" "Boris" "Brezhnev" "Chernenko" "Gorbachev" "Josef" "Konstantin"
     "Kruschev" "Lenin" "Leon" "Leonid" "Mikhail" "Nikita" "Putin" "Stalin"
-    "Trotsky" "Vladamir" "Yeltsin" "Yuri")
+    "Trotsky" "Vladimir" "Yeltsin" "Yuri")
       </screen>
     </refsect1>
     <refsect1>
       <title>Side Effects</title>
-      <para>
         <para>Whatever effects the execution of the SQL query has on
         the underlying database, if any.</para>
-      </para>
     </refsect1>
     <refsect1>
       <title>Affected by</title>
@@ -1463,6 +1524,16 @@ ID FORENAME   SURNAME   EMAIL
     </refsect1>
     <refsect1>
       <title>Notes</title>
+      <para> 
+        The <function>select</function> function is actually
+        implemented in &clsql; with a single
+        <symbol>&amp;rest</symbol> parameter (which is subsequently
+        destructured) rather than the keyword parameters presented
+        here for the purposes of exposition. This means that incorrect
+        or missing keywords or values may not trigger errors in the
+        way that they would if <function>select</function> had been
+        defined using keyword arguments.
+      </para>
       <para>
         The <parameter>field-names</parameter> and
         <parameter>result-types</parameter> keyword arguments are a
@@ -1483,7 +1554,7 @@ ID FORENAME   SURNAME   EMAIL
       <refentrytitle>DO-QUERY</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Macro</emphasis> <emphasis role="bold">DO-QUERY</emphasis></refname>
+      <refname>DO-QUERY</refname>
       <refpurpose>Iterate over all the tuples of a query.</refpurpose>
       <refclass>Macro</refclass>
     </refnamediv>
@@ -1659,85 +1730,15 @@ ID FORENAME   SURNAME   EMAIL
     </refsect1>
   </refentry>
 
-  <refentry id="for-each-row">
-    <refmeta>
-      <refentrytitle>FOR-EACH-ROW</refentrytitle>
-    </refmeta>
-    <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">FOR-EACH-ROW</emphasis></refname>
-      <refpurpose><!-- purpose --></refpurpose>
-      <refclass>Function</refclass>
-    </refnamediv>
-    <refsect1>
-      <title>Syntax</title>
-      <synopsis>
-      <function>for-each-row</function> &amp;KEY FROM ORDER-BY WHERE DISTINCT LIMIT &amp;REST FIELDS &amp;body <replaceable>body</replaceable> => <returnvalue><!-- result --></returnvalue></synopsis>
-    </refsect1>
-    <refsect1>
-      <title>Arguments and Values</title>
-      <variablelist>
-        <!-- arguments and values --> 
-      </variablelist>
-    </refsect1>
-    <refsect1>
-      <title>Description</title>
-      <para>
-        <!-- description --> 
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Examples</title>
-      <screen>
-        <!-- examples --> 
-      </screen>
-    </refsect1>
-    <refsect1>
-      <title>Side Effects</title>
-      <para>
-        <!-- side effects --> 
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Affected by</title>
-      <para>
-        <simplelist>
-          <!-- affected by --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Exceptional Situations</title>
-      <para>
-        <!-- execeptional situations -->
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>See Also</title>
-      <simplelist>
-        <member><link linkend="query"><function>query</function></link></member>
-        <member><link linkend="print-query"><function>print-query</function></link></member>
-        <member><link linkend="do-query"><function>do-query</function></link></member>
-        <member><link linkend="map-query"><function>map-query</function></link></member>
-        <member><link linkend="loop-tuples"><function>loop</function></link></member>
-        <member><link linkend="select"><function>select</function></link></member>
-        </simplelist>
-    </refsect1>
-    <refsect1>
-      <title>Notes</title>
-      <para>
-        <!-- notes here --> 
-      </para>
-    </refsect1>
-  </refentry>
-
   <refentry id="loop-tuples">
     <refmeta>
       <refentrytitle>LOOP</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Additional clause</emphasis> for <emphasis role="bold">LOOP</emphasis></refname>
-      <refpurpose>Iterate over all the tuples of a
-      query via a loop clause.</refpurpose>
+      <refname>LOOP</refname>
+      <refpurpose>Extension to Common Lisp
+      <computeroutput>Loop</computeroutput> to iterate over all the
+      tuples of a query via a loop clause.</refpurpose>
       <refclass>Loop Clause</refclass>
     </refnamediv>
     <!-- refsect1>
@@ -1848,7 +1849,7 @@ ID FORENAME   SURNAME   EMAIL
                 :order-by [last-name]]
       collect (concatenate 'string forename " " surname))
 => ("Yuri Andropov" "Leonid Brezhnev" "Konstantin Chernenko" "Mikhail Gorbachev"
-    "Nikita Kruschev" "Vladamir Lenin" "Vladamir Putin" "Josef Stalin"
+    "Nikita Kruschev" "Vladimir Lenin" "Vladimir Putin" "Josef Stalin"
     "Leon Trotsky" "Boris Yeltsin")
 
 (loop for (e) being the records in 
@@ -1903,7 +1904,7 @@ ID FORENAME   SURNAME   EMAIL
       <refentrytitle>MAP-QUERY</refentrytitle>
     </refmeta>
     <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">MAP-QUERY</emphasis></refname>
+      <refname>MAP-QUERY</refname>
       <refpurpose>Map a function over all the tuples from a
       query</refpurpose>
       <refclass>Function</refclass>
@@ -2056,8 +2057,8 @@ ID FORENAME   SURNAME   EMAIL
            [select [first-name] [last-name] :from [employee] 
                    :order-by [last-name]])
 => (("Yuri" "Andropov") ("Leonid" "Brezhnev") ("Konstantin" "Chernenko")
-    ("Mikhail" "Gorbachev") ("Nikita" "Kruschev") ("Vladamir" "Lenin")
-    ("Vladamir" "Putin") ("Josef" "Stalin") ("Leon" "Trotsky") 
+    ("Mikhail" "Gorbachev") ("Nikita" "Kruschev") ("Vladimir" "Lenin")
+    ("Vladimir" "Putin") ("Josef" "Stalin") ("Leon" "Trotsky") 
     ("Boris" "Yeltsin"))
 
 (map-query 'list #'last-name [select 'employee :order-by [emplid]])
@@ -2111,287 +2112,5 @@ ID FORENAME   SURNAME   EMAIL
     </refsect1>
   </refentry>
 
-
-  <!-- prepared statements --> 
-
-  <refentry id="prepare-sql">
-    <refmeta>
-      <refentrytitle>PREPARE-SQL</refentrytitle>
-    </refmeta>
-    <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">PREPARE-SQL</emphasis></refname>
-      <refpurpose>Create a prepared statement.</refpurpose>
-      <refclass>Function</refclass>
-    </refnamediv>
-    <refsect1>
-      <title>Syntax</title>
-      <synopsis>
-      <function>prepare-sql</function> <replaceable>sql-stmt types</replaceable> &amp;key <replaceable>database</replaceable> <replaceable>result-types</replaceable> <replaceable>field-names</replaceable> => <returnvalue>result</returnvalue></synopsis>
-    </refsect1>
-    <refsect1>
-      <title>Arguments and Values</title>
-      <variablelist>
-        <!-- arguments and values --> 
-      </variablelist>
-    </refsect1>
-    <refsect1>
-      <title>Description</title>
-      <para>Prepares a SQL statement <parameter>sql-stmt</parameter>
-      for execution. <parameter>types</parameter> contains a list of
-      types corresponding to the input parameters. Returns a
-      prepared-statement object.
-      
-      A type can be
-      :int
-      :double
-      :null
-      (:string n)
-      
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Examples</title>
-      <screen>
-        <!-- examples -->
-      </screen>
-    </refsect1>
-    <refsect1>
-      <title>Side Effects</title>
-      <para>
-        <!-- side effects --> 
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Affected by</title>
-      <para>
-        <simplelist>
-          <!-- affected by --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Exceptional Situations</title>
-      <para>
-        <!-- execeptional situations -->
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>See Also</title>
-      <para>
-        <simplelist>
-          <!-- see also --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Notes</title>
-      <para>
-        <!-- notes --> 
-      </para>
-    </refsect1>
-  </refentry>
-
-  <refentry id="run-prepared-sql">
-    <refmeta>
-      <refentrytitle>RUN-PREPARED-SQL</refentrytitle>
-    </refmeta>
-    <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">RUN-PREPARED-SQL</emphasis></refname>
-      <refpurpose>Execute a prepared statement.</refpurpose>
-      <refclass>Function</refclass>
-    </refnamediv>
-    <refsect1>
-      <title>Syntax</title>
-      <synopsis>
-      <function>run-prepared-sql</function> <replaceable>prepared-stmt</replaceable> => <returnvalue><!-- result --></returnvalue></synopsis>
-    </refsect1>
-    <refsect1>
-      <title>Arguments and Values</title>
-      <variablelist>
-        <!-- arguments and values --> 
-      </variablelist>
-    </refsect1>
-    <refsect1>
-      <title>Description</title>
-      <para>Execute the prepared sql statment. All input
-      parameters must be bound.
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Examples</title>
-      <screen>
-        <!-- examples -->
-      </screen>
-    </refsect1>
-    <refsect1>
-      <title>Side Effects</title>
-      <para>
-        <!-- side effects --> 
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Affected by</title>
-      <para>
-        <simplelist>
-          <!-- affected by --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Exceptional Situations</title>
-      <para>
-        <!-- execeptional situations -->
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>See Also</title>
-      <para>
-        <simplelist>
-          <!-- see also --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Notes</title>
-      <para>
-        <!-- notes --> 
-      </para>
-    </refsect1>
-  </refentry>
-
-  <refentry id="free-prepared-sql">
-    <refmeta>
-      <refentrytitle>FREE-PREPARED-SQL</refentrytitle>
-    </refmeta>
-    <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">FREE-PREPARED-SQL</emphasis></refname>
-      <refpurpose>Delete a prepared statement object.</refpurpose>
-      <refclass>Function</refclass>
-    </refnamediv>
-    <refsect1>
-      <title>Syntax</title>
-      <synopsis>
-      <function>free-prepared-sql</function> <replaceable>prepared-stmt</replaceable> => <returnvalue><!-- result --></returnvalue></synopsis>
-    </refsect1>
-    <refsect1>
-      <title>Arguments and Values</title>
-      <variablelist>
-        <!-- arguments and values --> 
-      </variablelist>
-    </refsect1>
-    <refsect1>
-      <title>Description</title>
-      <para>Delete the objects associated with a prepared
-      statement.
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Examples</title>
-      <screen>
-        <!-- examples -->
-      </screen>
-    </refsect1>
-    <refsect1>
-      <title>Side Effects</title>
-      <para>
-        <!-- side effects --> 
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Affected by</title>
-      <para>
-        <simplelist>
-          <!-- affected by --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Exceptional Situations</title>
-      <para>
-        <!-- execeptional situations -->
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>See Also</title>
-      <para>
-        <simplelist>
-          <!-- see also --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Notes</title>
-      <para>
-        <!-- notes --> 
-      </para>
-    </refsect1>
-  </refentry>
-
-  <refentry id="bind-parameter">
-    <refmeta>
-      <refentrytitle>BIND-PARAMETER</refentrytitle>
-    </refmeta>
-    <refnamediv>
-      <refname><emphasis>Function</emphasis> <emphasis role="bold">BIND-PARAMETER</emphasis></refname>
-      <refpurpose>Bind a parameter in a prepared statement.</refpurpose>
-      <refclass>Function</refclass>
-    </refnamediv>
-    <refsect1>
-      <title>Syntax</title>
-      <synopsis>
-      <function>bind-parameter</function> <replaceable>prepared-stmt</replaceable> <replaceable>position</replaceable> <replaceable>value</replaceable> => <returnvalue><!-- result --></returnvalue></synopsis>
-    </refsect1>
-    <refsect1>
-      <title>Arguments and Values</title>
-      <variablelist>
-        <!-- arguments and values --> 
-      </variablelist>
-    </refsect1>
-    <refsect1>
-      <title>Description</title>
-      <para>Sets the value of a parameter in a prepared statement.
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Examples</title>
-      <screen>
-        <!-- examples -->
-      </screen>
-    </refsect1>
-    <refsect1>
-      <title>Side Effects</title>
-      <para>
-        <!-- side effects --> 
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Affected by</title>
-      <para>
-        <simplelist>
-          <!-- affected by --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Exceptional Situations</title>
-      <para>
-        <!-- execeptional situations -->
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>See Also</title>
-      <para>
-        <simplelist>
-          <!-- see also --> 
-        </simplelist>
-      </para>
-    </refsect1>
-    <refsect1>
-      <title>Notes</title>
-      <para>
-        <!-- notes --> 
-      </para>
-    </refsect1>
-  </refentry>
-
 </reference> 
+