--- connection.c.orig Thu Jul 20 13:37:04 2000 +++ connection.c Thu Jul 20 14:21:19 2000 @@ -971,12 +971,29 @@ break; case 'N': SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH); + QR_set_status(res, PGRES_NONFATAL_ERROR); + QR_set_notice(res, cmdbuffer); /* will dup this string */ qlog("NOTICE from backend during clear: '%s'\n", cmdbuffer); break; case 'E': - SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH); + SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH); + /* Remove a newline */ + if (msgbuffer[0] != '\0' && msgbuffer[strlen(msgbuffer)-1] == '\n') + msgbuffer[strlen(msgbuffer)-1] = '\0'; + + self->errormsg = msgbuffer; + + mylog("clear: 'E' - %s\n", self->errormsg); qlog("ERROR from backend during clear: '%s'\n", cmdbuffer); - break; + + if ( ! strncmp(self->errormsg, "FATAL", 5)) { + self->errornumber = CONNECTION_SERVER_REPORTED_ERROR; + CC_set_no_trans(self); + } + else + self->errornumber = CONNECTION_SERVER_REPORTED_WARNING; + QR_Destructor(res); + return NULL; } }