[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/pq 527e544165 46/63: Improve error handling on connecti
From: |
ELPA Syncer |
Subject: |
[elpa] externals/pq 527e544165 46/63: Improve error handling on connection failure. |
Date: |
Mon, 14 Feb 2022 23:24:26 -0500 (EST) |
branch: externals/pq
commit 527e5441653e930405fc0dbd1794dd06a967500f
Author: Andreas Seltenreich <seltenreich@gmx.de>
Commit: Andreas Seltenreich <seltenreich@gmx.de>
Improve error handling on connection failure.
Closes #5
---
pq.c | 39 +++++++++++++++++++++++----------------
1 file changed, 23 insertions(+), 16 deletions(-)
diff --git a/pq.c b/pq.c
index ed4c2fc108..adf2dd58eb 100644
--- a/pq.c
+++ b/pq.c
@@ -61,6 +61,19 @@ static bool result_ok(emacs_env *env, PGresult *res)
}
}
+/* Raise error unless a PGConn is ok. */
+static bool connection_ok(emacs_env *env, PGconn *conn)
+{
+ if (PQstatus(conn) != CONNECTION_OK) {
+ const char *errmsg = PQerrorMessage(conn);
+ emacs_value errstring = env->make_string(env, errmsg, strlen(errmsg));
+ emacs_value Qpq_error = env->intern (env, "error");
+ env->non_local_exit_signal(env, Qpq_error, errstring);
+ return false;
+ }
+ return true;
+}
+
static char *my_string_to_c(emacs_env *env, emacs_value string)
{
ptrdiff_t size;
@@ -87,16 +100,11 @@ Fpq_connectdb (emacs_env *env, ptrdiff_t nargs,
emacs_value args[], void *data)
char *conninfo = nargs ? my_string_to_c(env, args[0]) : "";
PGconn *conn = PQconnectdb(conninfo);
- if (PQstatus(conn) != CONNECTION_OK) {
- const char *errmsg = PQerrorMessage(conn);
- emacs_value errstring = env->make_string(env, errmsg, strlen(errmsg));
- emacs_value Qpq_error = env->intern (env, "error");
-
- env->non_local_exit_signal(env, Qpq_error, errstring);
- if (nargs)
- free(conninfo);
- PQfinish(conn);
- return Qnil;
+ if (!connection_ok(env, conn)) {
+ if (nargs)
+ free(conninfo);
+ PQfinish(conn);
+ return Qnil;
}
/* The emacs-module interface always expects utf8 strings */
@@ -153,6 +161,10 @@ Fpq_query (emacs_env *env, ptrdiff_t nargs, emacs_value
args[], void *data)
return Qnil;
PGconn *conn = env->get_user_ptr(env, args[0]);
+ if (!connection_ok(env, conn)) {
+ return Qnil;
+ }
+
int nParams = nargs - 2;
char *command = my_string_to_c(env, args[1]);
@@ -242,12 +254,7 @@ Fpq_reset (emacs_env *env, ptrdiff_t nargs, emacs_value
args[], void *data)
PQreset(conn);
- if (PQstatus(conn) != CONNECTION_OK) {
- const char *errmsg = PQerrorMessage(conn);
- emacs_value errstring = env->make_string(env, errmsg, strlen(errmsg));
- emacs_value Qpq_error = env->intern (env, "error");
-
- env->non_local_exit_signal(env, Qpq_error, errstring);
+ if (!connection_ok(env, conn)) {
return Qnil;
}
- [elpa] branch externals/pq created (now 04c91e8374), ELPA Syncer, 2022/02/14
- [elpa] externals/pq 03c4dbf3f9 04/63: Add pq:getrow., ELPA Syncer, 2022/02/14
- [elpa] externals/pq f743c450ac 09/63: Set application_name., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 8cbe2e24fc 36/63: Make test notice-receiver more robust., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 5fcaa751f2 13/63: Cleanup prototype definitions., ELPA Syncer, 2022/02/14
- [elpa] externals/pq d6e3746c80 40/63: Skip encoding test unless supported by server., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 69d6fba048 06/63: Make argument to pq:connectdb optional., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 37e21db4c2 41/63: Shuffle tests, make gc test emit more info on failure., ELPA Syncer, 2022/02/14
- [elpa] externals/pq cdc04b0b61 27/63: Add missing PQclear calls, ELPA Syncer, 2022/02/14
- [elpa] externals/pq 6f6d8728e5 38/63: Test expected error on invalid encoding., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 527e544165 46/63: Improve error handling on connection failure.,
ELPA Syncer <=
- [elpa] externals/pq 7a15153e8d 58/63: Protect against NULL SQLSTATE., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 966a05ef25 07/63: Initialize client_encoding to utf8., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 2f63308225 24/63: Use PQexec instead of PQexecParams when no parameters are specified., ELPA Syncer, 2022/02/14
- [elpa] externals/pq a70d1fe40d 37/63: Test encoding by using some high unicode codepoints., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 795260553a 17/63: Use load-path in test.el, ELPA Syncer, 2022/02/14
- [elpa] externals/pq a03d2c2e9b 44/63: Update README, ELPA Syncer, 2022/02/14
- [elpa] externals/pq 12c54fbf15 14/63: Add undef DEFUN macro, ELPA Syncer, 2022/02/14
- [elpa] externals/pq 862bf023c0 20/63: Add processing for asynchronous notices., ELPA Syncer, 2022/02/14
- [elpa] externals/pq 9e719959b3 12/63: Avoid global variable for pq:error symbol., ELPA Syncer, 2022/02/14
- [elpa] externals/pq ca337173dd 08/63: Explicitly free the libpq result., ELPA Syncer, 2022/02/14