changeset 8615:57b00471cdc6 HEAD

pgsql: If query fails because connection gets closed, return a proper error message.
author Timo Sirainen <tss@iki.fi>
date Mon, 12 Jan 2009 12:05:58 -0500
parents fc3bd6608c90
children e50c8c44ab28
files src/lib-sql/driver-pgsql.c
diffstat 1 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-sql/driver-pgsql.c	Mon Jan 12 12:05:19 2009 -0500
+++ b/src/lib-sql/driver-pgsql.c	Mon Jan 12 12:05:58 2009 -0500
@@ -776,16 +776,21 @@
 	const char *msg;
 	size_t len;
 
-	msg = PQresultErrorMessage(result->pgres);
-	if (msg == NULL)
-		return "(no error set)";
+	i_free_and_null(db->error);
 
-	/* Error message should contain trailing \n, we don't want it */
-	len = strlen(msg);
-	i_free(db->error);
-	db->error = len == 0 || msg[len-1] != '\n' ?
-		i_strdup(msg) : i_strndup(msg, len-1);
+	if (result->pgres == NULL) {
+		/* connection error */
+		db->error = i_strdup(last_error(db));
+	} else {
+		msg = PQresultErrorMessage(result->pgres);
+		if (msg == NULL)
+			return "(no error set)";
 
+		/* Error message should contain trailing \n, we don't want it */
+		len = strlen(msg);
+		db->error = len == 0 || msg[len-1] != '\n' ?
+			i_strdup(msg) : i_strndup(msg, len-1);
+	}
 	return db->error;
 }