diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/src/sgml/protocol.sgml | 100 | 
1 files changed, 70 insertions, 30 deletions
| diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index 4906a715013..bb25eb74b14 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -1,8 +1,16 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v 1.26 2003/04/15 22:51:18 tgl Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v 1.27 2003/04/16 20:53:38 tgl Exp $ -->  <chapter id="protocol">   <title>Frontend/Backend Protocol</title> +   <caution> +    <para> +     This is currently a <emphasis>DRAFT</> description of FE/BE protocol +     version 3.0.  Details are still subject to change. +     In particular, the representation of binary data is still under debate. +    </para> +   </caution> +   <para>    <application>PostgreSQL</application> uses a message-based protocol    for communication between frontends and backends (clients and servers). @@ -504,11 +512,12 @@     </Para>     <Para> -    The response to a <command>SELECT</> or <command>FETCH</> query +    The response to a <command>SELECT</>, <command>FETCH</>, or +    <command>SHOW</> query      normally consists of RowDescription, zero or more      DataRow or BinaryRow messages, and then CommandComplete.      <command>COPY</> to or from the frontend invokes special protocol -    as described below. +    as described in <xref linkend="protocol-copy">.      All other query types normally produce only      a CommandComplete message.     </Para> @@ -524,7 +533,6 @@     <Para>      If a completely empty (no contents other than whitespace) query string      is received, the response is EmptyQueryResponse followed by ReadyForQuery. -    (The need to specially distinguish this case is historical.)     </Para>     <Para> @@ -621,7 +629,10 @@      The possible      responses to Execute are the same as those described above for queries      issued via simple query protocol, except that Execute doesn't cause -    ReadyForQuery to be issued. +    ReadyForQuery to be issued.  Also, the choice between text and binary +    output (DataRow or BinaryRow messages) is determined by Execute's +    format field, regardless of the command; the <literal>BINARY</> attribute +    in cursor declarations is irrelevant when using this protocol.     </para>     <para> @@ -630,8 +641,11 @@      PortalSuspended message; the appearance of this message tells the frontend      that another Execute should be issued against the same portal to      complete the operation.  The CommandComplete message indicating -    completion of the source SELECT or FETCH command is not sent until -    the command is completed. +    completion of the source SQL command is not sent until +    the portal's execution is completed.  Therefore, an Execute phase is +    always terminated by the appearance of exactly one of these messages: +    CommandComplete, EmptyQueryResponse (if the portal was created from +    an empty query string), ErrorResponse, or PortalSuspended.     </para>     <para> @@ -715,7 +729,16 @@    <Sect2>     <Title>Function Call</Title> -   <Para> +   <note> +    <para> +     The Function Call sub-protocol is a legacy feature that is probably best +     avoided in new code.  Similar results can be accomplished by setting up +     a prepared statement that does <literal>SELECT function($1, ...)</>. +     The Function Call cycle can then be replaced with Bind/Execute. +    </para> +   </note> + +   <para>      A Function Call cycle is initiated by the frontend sending a      FunctionCall message to the backend.  The backend then sends one      or more response messages depending on the results of the function @@ -724,7 +747,7 @@      function call.     </para> -   <Para> +   <para>      The possible response messages from the backend are:      <VariableList> @@ -741,7 +764,9 @@        <Term>FunctionResultResponse</Term>        <ListItem>         <Para> -        The function call was executed and returned a result. +        The function call was executed and returned a non-null result. +	(Note that the Function Call protocol can only handle a single +	scalar result, not a rowtype or set of results.)         </Para>        </ListItem>       </VarListEntry> @@ -750,7 +775,7 @@        <Term>FunctionVoidResponse</Term>        <ListItem>         <Para> -        The function call was executed and returned no result. +        The function call was executed and returned a NULL value.         </Para>        </ListItem>       </VarListEntry> @@ -800,8 +825,9 @@      message (allowing successful termination) or a CopyFail message (which      will cause the <command>COPY</> SQL statement to fail with an      error).  The backend then reverts to the command-processing mode it was -    in before the <command>COPY</> started (which will be either simple or -    extended query protocol). +    in before the <command>COPY</> started, which will be either simple or +    extended query protocol.  It will next send either CommandComplete +    (if successful) or ErrorResponse (if not).     </para>     <para> @@ -826,7 +852,8 @@      zero or more CopyDataRow messages, one per row, followed by CopyDone.      (For <command>COPY BINARY</>, CopyBinaryRow messages are sent instead.)      The backend then reverts to the command-processing mode it was -    in before the <command>COPY</> started.  The frontend cannot abort +    in before the <command>COPY</> started, and sends CommandComplete. +    The frontend cannot abort      the transfer (short of closing the connection), but it can discard      unwanted CopyDataRow, CopyBinaryRow, and CopyDone messages.     </para> @@ -1668,7 +1695,7 @@ Bind (F)  </VarListEntry>  <VarListEntry>  <Term> -        Int16 +        Int32  </Term>  <ListItem>  <Para> @@ -2195,7 +2222,7 @@ CopyInResponse (B)  </VarListEntry>  <VarListEntry>  <Term> -        Int32(4) +        Int32(5)  </Term>  <ListItem>  <Para> @@ -2203,6 +2230,17 @@ CopyInResponse (B)  </Para>  </ListItem>  </VarListEntry> +<VarListEntry> +<Term> +        Int8 +</Term> +<ListItem> +<Para> +                0 for textual copy (CopyDataRow is expected), 1 for +		binary copy (CopyBinaryRow is expected). +</Para> +</ListItem> +</VarListEntry>  </VariableList>  </Para> @@ -2231,7 +2269,7 @@ CopyOutResponse (B)  </VarListEntry>  <VarListEntry>  <Term> -        Int32(4) +        Int32(5)  </Term>  <ListItem>  <Para> @@ -2239,6 +2277,17 @@ CopyOutResponse (B)  </Para>  </ListItem>  </VarListEntry> +<VarListEntry> +<Term> +        Int8 +</Term> +<ListItem> +<Para> +                0 for textual copy (CopyDataRow will follow), 1 for +		binary copy (CopyBinaryRow will follow). +</Para> +</ListItem> +</VarListEntry>  </VariableList>  </Para> @@ -2402,12 +2451,13 @@ EmptyQueryResponse (B)  <ListItem>  <Para>                  Identifies the message as a response to an empty query string. +		(This substitutes for CommandComplete.)  </Para>  </ListItem>  </VarListEntry>  <VarListEntry>  <Term> -        Int32(5) +        Int32(4)  </Term>  <ListItem>  <Para> @@ -2415,16 +2465,6 @@ EmptyQueryResponse (B)  </Para>  </ListItem>  </VarListEntry> -<VarListEntry> -<Term> -        String("") -</Term> -<ListItem> -<Para> -                Unused. -</Para> -</ListItem> -</VarListEntry>  </VariableList>  </Para> @@ -3014,7 +3054,7 @@ ParameterDescription (B)  </VarListEntry>  <VarListEntry>  <Term> -        Int16 +        Int32  </Term>  <ListItem>  <Para> @@ -3147,7 +3187,7 @@ Parse (F)  </VarListEntry>  <VarListEntry>  <Term> -        Int16 +        Int32  </Term>  <ListItem>  <Para> | 
