Backport fix from HEAD that makes ecpglib give the right SQLSTATE if the connection...
authorMichael Meskes <meskes@postgresql.org>
Mon, 8 Mar 2010 13:07:00 +0000 (13:07 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 8 Mar 2010 13:07:00 +0000 (13:07 +0000)
src/interfaces/ecpg/ecpglib/error.c

index 8affc5ca67e2b5caffe1ff1ad8636acbe4ad12b6..6313fa0019c5261780dbfe96ddbc65b37b57d224 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.23 2009/06/11 14:49:13 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/error.c,v 1.23.2.1 2010/03/08 13:07:00 meskes Exp $ */
 
 #define POSTGRES_ECPG_INTERNAL
 #include "postgres_fe.h"
@@ -306,6 +306,17 @@ ecpg_raise_backend(int line, PGresult *result, PGconn *conn, int compat)
        message = PQerrorMessage(conn);
    }
 
+   if (strcmp(sqlstate, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR) == 0)
+   {
+       /* we might get here if the connection breaks down, so let's
+        * check for this instead of giving just the generic internal error */
+       if (PQstatus(conn) == CONNECTION_BAD)
+       {
+           sqlstate = "57P02";
+           message = ecpg_gettext("the connection to the server was lost");
+       }
+   }
+
    /* copy error message */
    snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc), "%s on line %d", message, line);
    sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc);