Обсуждение: [PATCH] fix for wrong error code returned
This patch corrects the previous fix for returning 08S01 error code for the server disconnecting.
The previous patch sent this error code for any error on the statement (such as a primary key collision).
--- statement.c.old 2005-09-17 13:03:28.000000000 -0400
+++ statement.c 2005-09-17 12:54:31.000000000 -0400
@@ -1093,7 +1093,7 @@
CSTR func = "SC_execute";
ConnectionClass *conn;
IPDFields *ipdopts;
- char was_ok, was_nonfatal,was_fatal;
+ char was_ok, was_nonfatal;
QResultClass *res = NULL;
Int2 oldstatus,
numcols;
@@ -1221,15 +1221,19 @@
{
was_ok = QR_command_successful(res);
was_nonfatal = QR_command_nonfatal(res);
- was_fatal = QR_command_fatal(res);
if (was_ok)
SC_set_errornumber(self, STMT_OK);
- else if (was_fatal)
- SC_set_errornumber(self,STMT_BAD_ERROR);
else
SC_set_errornumber(self, was_nonfatal ? STMT_INFO_ONLY : STMT_ERROR_TAKEN_FROM_BACKEND);
+#ifdef USE_LIBPQ
+ if (QR_command_fatal(res) && PQstatus(conn->pgconn) == CONNECTION_BAD)
+ {
+ SC_set_errornumber(self, STMT_BAD_ERROR);
+ }
+#endif /* USE_LIBPQ */
+
/* set cursor before the first tuple in the list */
self->currTuple = -1;
SC_set_current_col(self, -1);
Thanks, patch applied.
/D
> -----Original Message-----
> From: Scot Loach [mailto:sloach@sandvine.com]
> Sent: 17 September 2005 18:05
> To: pgsql-odbc@postgresql.org; Dave Page
> Subject: [PATCH] fix for wrong error code returned
>
> This patch corrects the previous fix for returning 08S01
> error code for the server disconnecting.
> The previous patch sent this error code for any error on the
> statement (such as a primary key collision).
>
> --- statement.c.old 2005-09-17 13:03:28.000000000 -0400
> +++ statement.c 2005-09-17 12:54:31.000000000 -0400
> @@ -1093,7 +1093,7 @@
> CSTR func = "SC_execute";
> ConnectionClass *conn;
> IPDFields *ipdopts;
> - char was_ok, was_nonfatal,was_fatal;
> + char was_ok, was_nonfatal;
> QResultClass *res = NULL;
> Int2 oldstatus,
> numcols;
> @@ -1221,15 +1221,19 @@
> {
> was_ok = QR_command_successful(res);
> was_nonfatal = QR_command_nonfatal(res);
> - was_fatal = QR_command_fatal(res);
>
> if (was_ok)
> SC_set_errornumber(self, STMT_OK);
> - else if (was_fatal)
> - SC_set_errornumber(self,STMT_BAD_ERROR);
> else
> SC_set_errornumber(self, was_nonfatal
> ? STMT_INFO_ONLY : STMT_ERROR_TAKEN_FROM_BACKEND);
>
> +#ifdef USE_LIBPQ
> + if (QR_command_fatal(res) &&
> PQstatus(conn->pgconn) == CONNECTION_BAD)
> + {
> + SC_set_errornumber(self, STMT_BAD_ERROR);
> + }
> +#endif /* USE_LIBPQ */
> +
> /* set cursor before the first tuple in the list */
> self->currTuple = -1;
> SC_set_current_col(self, -1);
>