Re: UseServerSidePrepare and data-at-execution

From: "Inoue, Hiroshi" <inoue(at)tpf(dot)co(dot)jp>
To: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
Cc: "pgsql-odbc(at)postgresql(dot)org" <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: UseServerSidePrepare and data-at-execution
Date: 2013-08-21 23:50:16
Message-ID: 52155238.70104@tpf.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Sorry for thr late reply.

(2013/08/15 22:43), Heikki Linnakangas wrote:
> Hi,
>
> In preparation of changing UseServerSidePrepare=1 as the default, I
> tried running the regression tests in UseServerSidePrepare=1 mode, and
> got two failures. The first seems to be harmless:
>
> ---
> /home/heikki/git-sandbox-pgsql/psqlodbc/test/expected/insertreturning.out
> 2013-06-12 13:58:32.535982856 +0300
> +++
> /home/heikki/git-sandbox-pgsql/psqlodbc/test/results/insertreturning.out
> 2013-08-15 16:28:09.892155293 +0300
> @@ -1,303 +1,303 @@
> \! ./src/insertreturning-test
> connected
> -# of result cols before SQLExecute: 0, after: 1
> +# of result cols before SQLExecute: 1, after: 1
> Result set:
> foobar 0
> -# of result cols before SQLExecute: 0, after: 1
> +# of result cols before SQLExecute: 1, after: 1
> Result set:
> foobar 1
>
> ...
>
> That basically means that with UseServerSidePrepare=0, if you call
> SQLNumResultCols() on an "INSERT ... RETURNING" statement, after
> SQLPrepare but before SQLExecute, it returns 0. With
> UseServerSidePrepare=1, it returns 1. That seems logical - the driver
> doesn't know how many cols the statement will return before at least
> preparing it. In any case, the behavior with UseServerSidePrepare=1 is
> better.
>
> The second failure, however, looks like a bug:
>
> ***
> /home/heikki/git-sandbox-pgsql/psqlodbc/test/expected/dataatexecution.out 2013-06-12
> 13:58:32.535982856 +0300
> ---
> /home/heikki/git-sandbox-pgsql/psqlodbc/test/results/dataatexecution.out
> 2013-08-15 16:35:04.108136825 +0300
> ***************
> *** 7,12 ****
> Fetching result sets for array bound (2 results expected)
> 1: Result set:
> 4
> - 2: Result set:
> - 5
> disconnecting
> --- 7,10 ----
>
> The test case executes a SELECT statement twice, using data-at-execution
> parameters (ie. SQLParamData and SQLPutData) and array binding together.
> In that combination, the server logs confirm that the query is executed
> twice with different parameters, but only the first result is returned
> to the client.
>
> After some debugging, I came up with the attached patch. It clears the
> curr_param_result flag from the statement object, in SQLParamData, after
> executing the statement with the current set of parameters.

Oops I overlooked this case.
Yes the curr_param_result flag must be cleared before excecuting
the subsequent set of parameters.

regards,
Hirshi Inoue

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Inoue, Hiroshi 2013-08-22 03:54:19 Re: Removing support for < 7.4 servers
Previous Message Michael Paquier 2013-08-20 23:33:59 Re: Removing support for < 7.4 servers