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

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

[elpa] externals/pq 2f63308225 24/63: Use PQexec instead of PQexecParams


From: ELPA Syncer
Subject: [elpa] externals/pq 2f63308225 24/63: Use PQexec instead of PQexecParams when no parameters are specified.
Date: Mon, 14 Feb 2022 23:24:22 -0500 (EST)

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

    Use PQexec instead of PQexecParams when no parameters are specified.
    
    The former allows multiple statements in the command string.
---
 pq.c    | 23 +++++++++++++++--------
 test.el |  5 ++++-
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/pq.c b/pq.c
index 17f67a9e3b..bb55643ddd 100644
--- a/pq.c
+++ b/pq.c
@@ -137,23 +137,30 @@ Fpq_query (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
   PGconn *conn = env->get_user_ptr(env, args[0]);
 
   int nParams = nargs - 2;
-  const char *paramValues[nParams];
-
-  for (int i=0; i<nParams; i++)
-    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);
+  PGresult *res;
+
+  if (nParams) {
+       const char *paramValues[nParams];
+
+       for (int i=0; i<nParams; i++)
+           paramValues[i] = my_string_to_c(env, args[2+i]);
+
+       res = PQexecParams(conn, command, nParams,
+                                   NULL, paramValues, NULL, NULL, 0);
+
+       for (int i=0; i<nParams; i++)
+           free((void *)paramValues[i]);
+  } else
+        res = PQexec(conn, command);
 
   PQsetNoticeReceiver(conn, old_notice_rx, NULL);
 
-  for (int i=0; i<nParams; i++)
-    free((void *)paramValues[i]);
 
   free(command);
 
diff --git a/test.el b/test.el
index 76cfb730aa..91327e7c74 100644
--- a/test.el
+++ b/test.el
@@ -3,7 +3,7 @@
 
 (require 'pq)
 
-(setq con (pq:connectdb "port=5433 dbname=smith"))
+(setq con (pq:connectdb "port=5432 dbname=smith"))
 (pq:query con "select version()")
 ;; ("PostgreSQL 9.4.8 on i686-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 
4.9.2, 32-bit")
 (pq:query con "select 1 union select 2")
@@ -23,6 +23,9 @@
 ;; provoke a warning
 (pq:query con "drop table if exists nonexisting_table")
 
+;; Multiple statements
+(pq:query con "select 1; select 2; select 3;")
+
 (setq con (pq:connectdb))
 (setq con nil)
 (garbage-collect)



reply via email to

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