Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Doc: update libpq's documentation for PQfn().
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 30 Apr 2021 19:10:06 +0000 (15:10 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 30 Apr 2021 19:10:06 +0000 (15:10 -0400)
Mention specifically that you can't call aggregates, window functions,
or procedures this way (the inability to call SRFs was already
mentioned).

Also, the claim that PQfn doesn't support NULL arguments or results
has been a lie since we invented protocol 3.0.  Not sure why this
text was never updated for that, but do it now.

Discussion: https://postgr.es/m/2039442.1615317309@sss.pgh.pa.us

doc/src/sgml/libpq.sgml

index 7e9fbe724255e14c4ef9abd6617f379e87a73b1b..0156bd0f0ce1e393dabeb353c8d22dd4f5632ca9 100644 (file)
@@ -5341,15 +5341,35 @@ typedef struct
 
   <para>
    <function>PQfn</function> always returns a valid
-   <structname>PGresult</structname> pointer. The result status should be
+   <structname>PGresult</structname> pointer, with
+   status <literal>PGRES_COMMAND_OK</literal> for success
+   or <literal>PGRES_FATAL_ERROR</literal> if some problem was encountered.
+   The result status should be
    checked before the result is used.   The caller is responsible for
    freeing  the  <structname>PGresult</structname>  with
    <function>PQclear</function> when it is no longer needed.
   </para>
 
   <para>
-   Note that it is not possible to handle null arguments, null results,
-   nor set-valued results when using this interface.
+   To pass a NULL argument to the function, set
+   the <parameter>len</parameter> field of that parameter structure
+   to <literal>-1</literal>; the <parameter>isint</parameter>
+   and <parameter>u</parameter> fields are then irrelevant.
+   (But this works only in protocol 3.0 and later connections.)
+  </para>
+
+  <para>
+   If the function returns NULL, <parameter>*result_len</parameter> is set
+   to <literal>-1</literal>, and <parameter>*result_buf</parameter> is not
+   modified.  (This works only in protocol 3.0 and later connections; in
+   protocol 2.0, neither <parameter>*result_len</parameter>
+   nor <parameter>*result_buf</parameter> are modified.)
+  </para>
+
+  <para>
+   Note that it is not possible to handle set-valued results when using
+   this interface.  Also, the function must be a plain function, not an
+   aggregate, window function, or procedure.
   </para>
 
  </sect1>