Re: Bug in the SQLGetDiagRec function of psqlodbc

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: PSequel Support <support(at)psequel(dot)com>
Cc: pgsql-odbc(at)postgresql(dot)org
Subject: Re: Bug in the SQLGetDiagRec function of psqlodbc
Date: 2015-09-18 06:32:58
Message-ID: 55FBB01A.1070004@iki.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

On 09/18/2015 08:13 AM, PSequel Support wrote:
> Thanks for your reply! Actually I've tried calling SQLFreeStmt after each
> query, but it doesn't seem to change anything. See the example code below.
>
> #include <stdio.h>#include <sql.h>#include <sqlext.h>
> void printError(SQLHANDLE handle) {
> char message[256];
> SQLSMALLINT i = 0;
> while (SQLGetDiagRec(SQL_HANDLE_DBC, handle, ++i, NULL, NULL,
> (SQLCHAR*)message, sizeof(message), NULL) != SQL_NO_DATA) {
> printf("%s\n", message);
> }}
> ...

Oh, you're getting the diagnostic from the *connection* handle, not the
statement handle. According to the documentation of SQLExecDirect(), it
sets the diagnostics on the statement handle.

I agree that psqlODBC's behaviour here is pretty strange, and probably
incorrect. I wouldn't expect SQLExecDirect to set any diagnostics on the
connection handle, at least for a syntax error. But if it does, the
second call probably should do so as well, and overwrite the previous
error message.

But the immediate fix for your application would be to get the
diagnostics from the statement handle instead of the connection handle.

- Heikki

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Andrus 2015-09-18 07:28:34 How to fix buffer overrun in Windows x32
Previous Message lacesco 2015-09-18 06:04:24 Fw: important message