For review: documentation for libpgtcl pg_execute - Mailing list pgsql-docs

From ljb
Subject For review: documentation for libpgtcl pg_execute
Date
Msg-id a6ours$1vp2$2@jupiter.hub.org
Whole thread Raw
Responses Re: For review: documentation for libpgtcl pg_execute
List pgsql-docs
This is a proposed patch to doc/src/sgml/libpgtcl.sgml which documents the
libpgtcl "pg_execute" command. This was mentioned on pgsql-interfaces on
Mar 3. I am posting it here in the hope that someone will check to see if
it makes sense and is correct SGML-wise.  I did run it through jade, but this
is my first try at this sort of thing.  Corrections would be appreciated.
Thanks.


*** libpgtcl.sgml.orig    Sun Jan 20 17:19:56 2002
--- libpgtcl.sgml    Wed Mar 13 20:10:35 2002
***************
*** 65,70 ****
--- 65,73 ----
      <ENTRY>loop over the result of a SELECT statement</ENTRY>
    </ROW>
    <ROW>
+     <ENTRY><function>pg_execute</function></ENTRY>
+     <ENTRY>send a query and optionally loop over the results</ENTRY>
+   <ROW>
      <ENTRY><function>pg_listen</function></ENTRY>
      <ENTRY>establish a callback for NOTIFY messages</ENTRY>
    </ROW>
***************
*** 986,991 ****
--- 989,1190 ----
      pg_select $pgconn "SELECT * FROM table" array {
          puts [format "%5d %s" $array(control) $array(name)]
      }
+ </ProgramListing>
+ </PARA>
+ </REFSECT1>
+
+ </REFENTRY>
+
+ <!-- ********************************************************** -->
+
+ <REFENTRY ID="PGTCL-PGEXECUTE">
+ <REFMETA>
+ <REFENTRYTITLE>pg_execute</REFENTRYTITLE>
+ <REFMISCINFO>PGTCL - Query Processing</REFMISCINFO>
+ </REFMETA>
+ <REFNAMEDIV>
+ <REFNAME>pg_execute
+ </REFNAME>
+ <REFPURPOSE>
+ send a query and optionally loop over the results
+ </REFPURPOSE>
+ <INDEXTERM ID="IX-PGTCL-PGEXECUTE-1"><PRIMARY>pgtcl</PRIMARY><SECONDARY>query</SECONDARY></INDEXTERM>
+ <INDEXTERM ID="IX-PGTCL-PGEXECUTE-2"><PRIMARY>pg_execute</PRIMARY></INDEXTERM>
+ </REFNAMEDIV>
+ <REFSYNOPSISDIV>
+ <REFSYNOPSISDIVINFO>
+ <DATE>2002-03-06</DATE>
+ </REFSYNOPSISDIVINFO>
+ <SYNOPSIS>
+ pg_execute <OPTIONAL>-array <REPLACEABLE CLASS="PARAMETER">arrayVar</REPLACEABLE></OPTIONAL> <OPTIONAL>-oid
<REPLACEABLECLASS="PARAMETER">oidVar</REPLACEABLE></OPTIONAL> <REPLACEABLE CLASS="PARAMETER">dbHandle</REPLACEABLE>
<REPLACEABLECLASS="PARAMETER">queryString</REPLACEABLE> <OPTIONAL><REPLACEABLE
CLASS="PARAMETER">queryProcedure</REPLACEABLE></OPTIONAL>
+ </SYNOPSIS>
+
+ <REFSECT2 ID="R2-PGTCL-PGEXECUTE-1">
+ <REFSECT2INFO>
+ <DATE>2002-03-06</DATE>
+ </REFSECT2INFO>
+ <TITLE>Inputs
+ </TITLE>
+ <VARIABLELIST>
+ <VARLISTENTRY>
+ <TERM>
+   <OPTIONAL>-array <REPLACEABLE CLASS="PARAMETER">arrayVar</REPLACEABLE></OPTIONAL>
+ </TERM>
+ <LISTITEM>
+ <PARA>Specifies the name of an array variable where result tuples are stored,
+ indexed by the field names.
+ This is ignored if queryString is not a SELECT statement. For SELECT
+ statements, if this option is not used, result tuples values are stored
+ in individual variables named according to the field names in the result.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+   <OPTIONAL>-oid <REPLACEABLE CLASS="PARAMETER">oidVar</REPLACEABLE></OPTIONAL>
+ </TERM>
+ <LISTITEM>
+ <PARA>Specifies the name of a variable into which the OID from an INSERT
+ statement will be stored.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+   <REPLACEABLE CLASS="PARAMETER">dbHandle</REPLACEABLE>
+ </TERM>
+ <LISTITEM>
+ <PARA>Specifies a valid database handle.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+   <REPLACEABLE CLASS="PARAMETER">queryString</REPLACEABLE>
+ </TERM>
+ <LISTITEM>
+ <PARA>Specifies a valid SQL query.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ <VARLISTENTRY>
+ <TERM>
+   <OPTIONAL><REPLACEABLE CLASS="PARAMETER">queryProcedure</REPLACEABLE></OPTIONAL>
+ </TERM>
+ <LISTITEM>
+ <PARA>Optional command to execute for each result tuple of a SELECT statement.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ </VARIABLELIST>
+
+ </REFSECT2>
+
+ <REFSECT2 ID="R2-PGTCL-PGEXECUTE-2">
+ <REFSECT2INFO>
+ <DATE>2002-03-06</DATE>
+ </REFSECT2INFO>
+ <TITLE>Outputs
+ </TITLE>
+ <VARIABLELIST>
+ <VARLISTENTRY>
+ <TERM>
+   <REPLACEABLE CLASS="PARAMETER">ntuples</REPLACEABLE>
+ </TERM>
+ <LISTITEM>
+ <PARA>
+ The number of tuples affected or returned by the query.
+ </PARA>
+ </LISTITEM>
+ </VARLISTENTRY>
+ </VARIABLELIST>
+ </REFSECT2></REFSYNOPSISDIV>
+
+ <REFSECT1 ID="R1-PGTCL-PGEXECUTE-1">
+ <REFSECT1INFO>
+ <DATE>2002-03-06</DATE>
+ </REFSECT1INFO>
+ <TITLE>Description
+ </TITLE>
+ <PARA>
+ <FUNCTION>pg_execute</FUNCTION> submits a query to the PostgreSQL backend.
+ </PARA>
+ <PARA>
+ If the query is not a SELECT statement, the query is executed and the
+ number of tuples affected by the query is returned.  If the query is an
+ INSERT and a single tuple is inserted, the OID of the inserted tuple is
+ stored in the oidVar variable if the optional <PARAMETER>-oid</PARAMETER>
+ argument is supplied.
+ </PARA>
+ <PARA>
+ If the query is a SELECT statement, the query is executed. For each tuple
+ in the result, the tuple field values are stored in the
+ <PARAMETER>arrayVar</PARAMETER> variable,
+ if supplied, using the field names as the array indexes, else in variables
+ named by the field names, and then the optional
+ <PARAMETER>queryProcedure</PARAMETER> is executed if supplied.
+ (Omitting the <PARAMETER>queryProcedure</PARAMETER> probably makes sense
+ only if the query will return a single tuple.)
+ The number of tuples selected is returned.
+ </PARA>
+ <PARA>
+ The <PARAMETER>queryProcedure</PARAMETER> can use the Tcl
+ <LITERAL>break</LITERAL>, <LITERAL>continue</LITERAL>, and
+ <LITERAL>return</LITERAL> commands, with the expected behavior.
+ Note that if the <PARAMETER>queryProcedure</PARAMETER> executes
+ <LITERAL>return</LITERAL>, <FUNCTION>pg_execute</FUNCTION> does
+ not return <PARAMETER>ntuples</PARAMETER>.
+ </PARA>
+ <PARA>
+ <FUNCTION>pg_execute</FUNCTION> is a newer function which provides a
+ superset of the features of <FUNCTION>pg_select</FUNCTION>, and can
+ replace <FUNCTION>pg_exec</FUNCTION> in many cases where access to
+ the result handle is not needed.
+ </PARA>
+ <PARA>
+ For backend-handled errors, <FUNCTION>pg_execute</FUNCTION> will
+ throw a Tcl error and return two element list. The first element
+ is an error code such as <LITERAL>PGRES_FATAL_ERROR</LITERAL>, and
+ the second element is the backend error text. For more serious
+ errors, such as failure to communicate with the backend,
+ <FUNCTION>pg_execute</FUNCTION> will throw a Tcl error and return
+ just the error message text.
+ </PARA>
+
+ </REFSECT1>
+
+ <REFSECT1 ID="R1-PGTCL-PGEXECUTE-2">
+ <TITLE>Usage
+ </TITLE>
+ <PARA>
+ In the following examples, error checking with <LITERAL>catch</LITERAL>
+ has been omitted for clarity.
+ </PARA>
+ <PARA>
+ Insert a row and save the OID in result_oid:
+ <ProgramListing>
+     pg_execute -oid result_oid $pgconn "insert into mytable values (1)"
+ </ProgramListing>
+ </PARA>
+ <PARA>
+ Print the item and value fields from each row:
+ <ProgramListing>
+     pg_execute -array d $pgconn "select item, value from mytable" {
+        puts "Item=$d(item) Value=$d(value)"
+     }
+ </ProgramListing>
+ </PARA>
+ <PARA>
+ Find the maximum and minimum values and store them in $s(max) and $s(min):
+ <ProgramListing>
+     pg_execute -array s $pgconn "select max(value) as max,\
+       min(value) as min from mytable"
+ </ProgramListing>
+ </PARA>
+ <PARA>
+ Find the maximum and minimum values and store them in $max and $min:
+ <ProgramListing>
+     pg_execute $pgconn "select max(value) as max, min(value) as min from mytable"
  </ProgramListing>
  </PARA>
  </REFSECT1>

pgsql-docs by date:

Previous
From: Thomas Lockhart
Date:
Subject: Re: Thoughts about the installation instructions
Next
From: "awais"
Date:
Subject: problem with new postgresql driver