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);