emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/pq 862bf023c0 20/63: Add processing for asynchronous no


From: ELPA Syncer
Subject: [elpa] externals/pq 862bf023c0 20/63: Add processing for asynchronous notices.
Date: Mon, 14 Feb 2022 23:24:20 -0500 (EST)

branch: externals/pq
commit 862bf023c048e845f0ff83dadf4387fa63c46109
Author: Andreas Seltenreich <seltenreich@gmx.de>
Commit: Andreas Seltenreich <seltenreich@gmx.de>

    Add processing for asynchronous notices.
    
    closes #1.
---
 pq.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/pq.c b/pq.c
index a59c7eec95..9177abfac7 100644
--- a/pq.c
+++ b/pq.c
@@ -13,6 +13,23 @@ int plugin_is_GPL_compatible;
 static emacs_value Qnil;
 static emacs_value Qt;
 
+#define NOTICE_FORMAT "pq: %s"
+
+static void pq_notice_rx (void *arg, const PGresult *res)
+{
+     char *msg = PQresultErrorMessage(res);
+     emacs_env *env = arg;
+     emacs_value Fmessage = env->intern (env, "message");
+     size_t len = strlen(msg);
+     if (!len)
+         return;
+     emacs_value args [2] = {
+         env->make_string(env, NOTICE_FORMAT, strlen(NOTICE_FORMAT)),
+         env->make_string(env, msg, len-1 /* cut trailing newline */)
+     };
+     env->funcall (env, Fmessage, 2, args);
+}
+
 void pq_finalize_pointer(void *user_ptr)
 {
   PGconn *conn = user_ptr;
@@ -126,9 +143,15 @@ Fpq_query (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
     paramValues[i] = my_string_to_c(env, args[2+i]);
 
   char *command = my_string_to_c(env, args[1]);
+
+  PQnoticeReceiver old_notice_rx =
+       PQsetNoticeReceiver(conn, pq_notice_rx, env);
+
   PGresult *res = PQexecParams(conn, command, nParams,
                               NULL, paramValues, NULL, NULL, 0);
 
+  PQsetNoticeReceiver(conn, old_notice_rx, NULL);
+
   for (int i=0; i<nParams; i++)
     free((void *)paramValues[i]);
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]