From: | "Inoue,Hiroshi" <hinoue205(at)gmail(dot)com> |
---|---|
To: | Nicolae Vartolomei <nv(at)cloudflare(dot)com> |
Cc: | "pgsql-odbc(at)postgresql(dot)org" <pgsql-odbc(at)postgresql(dot)org> |
Subject: | Re: BUG: CC_send_query_append incomplete error handling |
Date: | 2022-01-04 04:21:49 |
Message-ID: | CAFGcedX2zgn+iCez7Z3V1G2NLLPimZSP+m_M0BJP3yjXQzJ3=g@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-odbc |
Hi Nicolae,
Sorry for the late reply.
I would take care of this issue.
regards,
Hhiroshi Inoue
2022年1月1日(土) 20:32 Nicolae Vartolomei <nv(at)cloudflare(dot)com>:
> 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-bridge/ODBCConnectionFactory.h#L76-L96
> (nanodbc-
> <https://github.com/ClickHouse/ClickHouse/blob/86040a15d80c9371639ee0fac2879da749612a3f/programs/odbc-bridge/ODBCConnectionFactory.h#L76-L96(nanodbc->
> >unixODBC->psqlodbc)
>
> ---
>
> nvartolomei
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Grucza | 2022-01-10 01:49:43 | [PATCH] Fix FetchRefcursors issues |
Previous Message | Nicolae Vartolomei | 2021-12-30 13:01:32 | BUG: CC_send_query_append incomplete error handling |