branch: externals/pq commit 2f633082251a3cd3a2da700971de059b60a476eb Author: Andreas Seltenreich <seltenre...@gmx.de> Commit: Andreas Seltenreich <seltenre...@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)