aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/odbc/qresult.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/odbc/qresult.c')
-rw-r--r--src/interfaces/odbc/qresult.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/interfaces/odbc/qresult.c b/src/interfaces/odbc/qresult.c
index b10408207ff..bb5f5ba246f 100644
--- a/src/interfaces/odbc/qresult.c
+++ b/src/interfaces/odbc/qresult.c
@@ -456,6 +456,7 @@ QR_next_tuple(QResultClass *self)
char fetch[128];
QueryInfo qi;
ConnInfo *ci = NULL;
+ BOOL msg_truncated;
UDWORD abort_opt;
if (fetch_count < num_backend_rows)
@@ -665,9 +666,12 @@ QR_next_tuple(QResultClass *self)
}
case 'E': /* Error */
- SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
- QR_set_message(self, msgbuffer);
- self->status = PGRES_FATAL_ERROR;
+ msg_truncated = 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';
abort_opt = 0;
if (!strncmp(msgbuffer, "FATAL", 5))
@@ -679,14 +683,19 @@ QR_next_tuple(QResultClass *self)
mylog("ERROR from backend in next_tuple: '%s'\n", msgbuffer);
qlog("ERROR from backend in next_tuple: '%s'\n", msgbuffer);
+ while (msg_truncated)
+ msg_truncated = SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
return FALSE;
case 'N': /* Notice */
- SOCK_get_string(sock, msgbuffer, ERROR_MSG_LENGTH);
- QR_set_message(self, msgbuffer);
- self->status = PGRES_NONFATAL_ERROR;
+ msg_truncated = SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
+ QR_set_notice(self, cmdbuffer);
+ if (QR_command_successful(self))
+ QR_set_status(self, PGRES_NONFATAL_ERROR);
qlog("NOTICE from backend in next_tuple: '%s'\n", msgbuffer);
+ while (msg_truncated)
+ msg_truncated = SOCK_get_string(sock, cmdbuffer, ERROR_MSG_LENGTH);
continue;
default: /* this should only happen if the backend