Re: Disallow Premature - Mailing list pgsql-odbc

From Dave Page
Subject Re: Disallow Premature
Date
Msg-id FED2B709E3270E4B903EB0175A49BCB10476E2@dogbert.vale-housing.co.uk
Whole thread Raw
In response to Disallow Premature  ("Henshall, Stuart - WCP" <SHenshall@westcountrypublications.co.uk>)
List pgsql-odbc
Disallow Premature description added to the website.

Regards, Dave.

> -----Original Message-----
> From: Hiroshi Inoue [mailto:Inoue@tpf.co.jp]
> Sent: 22 March 2002 00:32
> To: Henshall, Stuart - WCP
> Cc: 'pgsql-odbc@postgresql.org'
> Subject: Re: [ODBC] Disallow Premature
>
>
> "Henshall, Stuart - WCP" wrote:
> >
> > I've looked on odbc.postgresql.org but can't seem to find what
> > disallow premature does. Could someone enlighten me please?
> :) Cheers,
>
> I've added some new options but didn't add any documentaion
> about it sorry. I'm happy if someone could understand my poor
> explanation and add a documentation about it.
>
> *Disallow premature* is one of the option to compensate
> the lack of a server's functionality.
>
> For example (Middleware) applications issue the following
> ODBC API calls.
>
>    SQLPreapare(hstmt, "select ...", ..)
>
> In most cases they have to know how many fields, what kind
> of fields they would return and so they would issue
>
>    SQLNumResultCols and/or
>    SQLDescribeCols/SQLColAttribute etc.
>
> The problem is how the psqlodbc driver answers the inquiry.
> PostgreSQL hasn't provided the Prepare functionality yet and
> we couldn't ask the backend about it directly.
>
> Psqlodbc driver provides the 3 different way about it.
>
> 1) Premature execution(default).
>    This (implicit) option uses the fact that backends
>    return the field info in advance of returning result
>    tuples. In addtion this option assumes that the query
>    would be executed later exactly. When SQLNumResultCols
>    .. etc is called, the driver executes the query prematurely
>    and gets the field info(saving the result tuples also).
>    This is the most effective way if the query is executed
>    exactly later because the driver could return the saved
>    result exactly for the SQLExecute call. However I've seen
>    the cases where the queries are never called later. I've
>    also seen the cases where binding parameter values changed
>    after the premature execution(Currently the driver doesn't
>    detect the change). Strictly speaking the result isn't
>    necessarily same even when the query is executed exactly
>    later.
>
> 2) Parse statemnt option
>    The driver parse/analyzes the query by itself *first*.
>    *first* means that the driver couldn't always get the
>    complete field info and has to use the 1) or 3) after
>    all in some cases.  This option seems to be used that
>    much. I need this functionality internnaly and have
>    found pretty many bugs. Anyway it seems neither easy,
>    effective nor expected.
>
> 3) Disallow premature
>    This option avoids 1) and get the field info as follows.
>
>       begin;(unless in a transaction)
>       declare cursor .. for select ...
>       fetch backward in ..
>       close ..
>
>    The driver gets the field info using the *fetch backward*
>    's result. The *fetch backward* command returns no row but
>    returns the field info. I also expected the the *fetch
>    backward* command returns immediately but unfortunately it
>    isn't always true. The 7.1 or later servers seem to return
>    from the *fetch backward* command immediately(thanks to Tom's
>    change).
>
> regards,
> Hiroshi Inoue
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to
> majordomo@postgresql.org
>

pgsql-odbc by date:

Previous
From: Hiroshi Inoue
Date:
Subject: Re: Disallow Premature
Next
From: "Johann Zuschlag"
Date:
Subject: Warnings