public inbox for [email protected]  
help / color / mirror / Atom feed
From: Inoue,Hiroshi <[email protected]>
To: Nicolae Vartolomei <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: BUG: CC_send_query_append incomplete error handling
Date: Tue, 4 Jan 2022 13:21:49 +0900
Message-ID: <CAFGcedX2zgn+iCez7Z3V1G2NLLPimZSP+m_M0BJP3yjXQzJ3=g@mail.gmail.com> (raw)
In-Reply-To: <CAC5UznEsaG75-Q89z4Ypz1q48UT7O+1U7drUPt6Xs+ma9_hEGQ@mail.gmail.com>
References: <CAC5UznEsaG75-Q89z4Ypz1q48UT7O+1U7drUPt6Xs+ma9_hEGQ@mail.gmail.com>

Hi Nicolae,

Sorry for the late reply.
I would take care of this issue.

regards,
Hhiroshi Inoue

2022年1月1日(土) 20:32 Nicolae Vartolomei <[email protected]>:

> Hi,
>
> I noticed a bug where psqlodbc doesn't handle an underlying error
> correctly.
>
> The interaction is roughly as follows:
>
> Initiate a connection, run few queries, run `ss -K dport postgresql` to
> kill the
> psqlodbc connection to postgres, then run another query.
>
> The expected behaviour is for query to fail and to return an error like
> "08S01".
>
> Instead, the following error is generated:
> ```
> pgapi30.c[PGAPI_GetDiagRec]43: entering type=3 rec=1
> environ.c[ER_ReturnError]202: entering status = 1, msg = #no
> connection to the server...
> environ.c[ER_ReturnError]259:      szSqlState = 'HY000',len=58,
> szError='no connection to the server
> ```
>
> This makes it a bit tricky to properly handle the exception on the client.
>
> I'm browsing through this code base for the first time,
> and the incomplete error handling seems to be around these lines in
> connection.c
>
> ```
> if (!PQsendQuery(self->pqconn, query_buf.data))
> {
> char *errmsg = PQerrorMessage(self->pqconn);
> QLOG(0, "\nCommunication Error: %s\n", SAFE_STR(errmsg));
> CC_set_error(self, CONNECTION_COMMUNICATION_ERROR, errmsg, func);
> goto cleanup;
> }
> ```
>
> I think this need a call to `CC_on_abort(self, CONN_DEAD);` in order
> to clean up the connection so that future calls would get trapped by
> `SC_connection_lost_check` call
> which also propagates the correct error to `SQLGetDiagRec` with a
> statement handle.
>
> Latest tested version is from this package
> https://packages.ubuntu.com/focal/odbc-postgresql
>
> Let me know if a test case for reproducing the issue is needed. The
> issue affects  this code
>
> https://github.com/ClickHouse/ClickHouse/blob/86040a15d80c9371639ee0fac2879da749612a3f/programs/odbc...
> (nanodbc-
> <https://github.com/ClickHouse/ClickHouse/blob/86040a15d80c9371639ee0fac2879da749612a3f/programs/odbc...;
> >unixODBC->psqlodbc)
>
> ---
>
> nvartolomei
>
>
>


view thread (2+ messages)

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: BUG: CC_send_query_append incomplete error handling
  In-Reply-To: <CAFGcedX2zgn+iCez7Z3V1G2NLLPimZSP+m_M0BJP3yjXQzJ3=g@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox