gooderp18绿色标准版
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

72 líneas
6.1KB

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>33.7. The Fast-Path Interface</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /><link rel="prev" href="libpq-cancel.html" title="33.6. Canceling Queries in Progress" /><link rel="next" href="libpq-notify.html" title="33.8. Asynchronous Notification" /></head><body><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">33.7. The Fast-Path Interface</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="libpq-cancel.html" title="33.6. Canceling Queries in Progress">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="libpq.html" title="Chapter 33. libpq - C Library">Up</a></td><th width="60%" align="center">Chapter 33. <span xmlns="http://www.w3.org/1999/xhtml" class="application">libpq</span> - C Library</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 12.4 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="libpq-notify.html" title="33.8. Asynchronous Notification">Next</a></td></tr></table><hr></hr></div><div class="sect1" id="LIBPQ-FASTPATH"><div class="titlepage"><div><div><h2 class="title" style="clear: both">33.7. The Fast-Path Interface</h2></div></div></div><a id="id-1.7.3.14.2" class="indexterm"></a><p>
  3. <span class="productname">PostgreSQL</span> provides a fast-path interface
  4. to send simple function calls to the server.
  5. </p><div class="tip"><h3 class="title">Tip</h3><p>
  6. This interface is somewhat obsolete, as one can achieve similar
  7. performance and greater functionality by setting up a prepared
  8. statement to define the function call. Then, executing the statement
  9. with binary transmission of parameters and results substitutes for a
  10. fast-path function call.
  11. </p></div><p>
  12. The function <code class="function">PQfn</code><a id="id-1.7.3.14.5.2" class="indexterm"></a>
  13. requests execution of a server function via the fast-path interface:
  14. </p><pre class="synopsis">
  15. PGresult *PQfn(PGconn *conn,
  16. int fnid,
  17. int *result_buf,
  18. int *result_len,
  19. int result_is_int,
  20. const PQArgBlock *args,
  21. int nargs);
  22. typedef struct
  23. {
  24. int len;
  25. int isint;
  26. union
  27. {
  28. int *ptr;
  29. int integer;
  30. } u;
  31. } PQArgBlock;
  32. </pre><p>
  33. </p><p>
  34. The <em class="parameter"><code>fnid</code></em> argument is the OID of the function to be
  35. executed. <em class="parameter"><code>args</code></em> and <em class="parameter"><code>nargs</code></em> define the
  36. parameters to be passed to the function; they must match the declared
  37. function argument list. When the <em class="parameter"><code>isint</code></em> field of a
  38. parameter structure is true, the <em class="parameter"><code>u.integer</code></em> value is sent
  39. to the server as an integer of the indicated length (this must be
  40. 2 or 4 bytes); proper byte-swapping occurs. When <em class="parameter"><code>isint</code></em>
  41. is false, the indicated number of bytes at <em class="parameter"><code>*u.ptr</code></em> are
  42. sent with no processing; the data must be in the format expected by
  43. the server for binary transmission of the function's argument data
  44. type. (The declaration of <em class="parameter"><code>u.ptr</code></em> as being of
  45. type <code class="type">int *</code> is historical; it would be better to consider
  46. it <code class="type">void *</code>.)
  47. <em class="parameter"><code>result_buf</code></em> points to the buffer in which to place
  48. the function's return value. The caller must have allocated sufficient
  49. space to store the return value. (There is no check!) The actual result
  50. length in bytes will be returned in the integer pointed to by
  51. <em class="parameter"><code>result_len</code></em>. If a 2- or 4-byte integer result
  52. is expected, set <em class="parameter"><code>result_is_int</code></em> to 1, otherwise
  53. set it to 0. Setting <em class="parameter"><code>result_is_int</code></em> to 1 causes
  54. <span class="application">libpq</span> to byte-swap the value if necessary, so that it
  55. is delivered as a proper <code class="type">int</code> value for the client machine;
  56. note that a 4-byte integer is delivered into <em class="parameter"><code>*result_buf</code></em>
  57. for either allowed result size.
  58. When <em class="parameter"><code>result_is_int</code></em> is 0, the binary-format byte string
  59. sent by the server is returned unmodified. (In this case it's better
  60. to consider <em class="parameter"><code>result_buf</code></em> as being of
  61. type <code class="type">void *</code>.)
  62. </p><p>
  63. <code class="function">PQfn</code> always returns a valid
  64. <code class="structname">PGresult</code> pointer. The result status should be
  65. checked before the result is used. The caller is responsible for
  66. freeing the <code class="structname">PGresult</code> with
  67. <code class="function">PQclear</code> when it is no longer needed.
  68. </p><p>
  69. Note that it is not possible to handle null arguments, null results,
  70. nor set-valued results when using this interface.
  71. </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="libpq-cancel.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="libpq.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="libpq-notify.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">33.6. Canceling Queries in Progress </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 33.8. Asynchronous Notification</td></tr></table></div></body></html>
上海开阖软件有限公司 沪ICP备12045867号-1