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

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

[elpa] externals/pq 03c4dbf3f9 04/63: Add pq:getrow.


From: ELPA Syncer
Subject: [elpa] externals/pq 03c4dbf3f9 04/63: Add pq:getrow.
Date: Mon, 14 Feb 2022 23:24:18 -0500 (EST)

branch: externals/pq
commit 03c4dbf3f988c0d27c0765e4faa35007d6b53f09
Author: Andreas Seltenreich <andreas+git@ansel.ydns.eu>
Commit: Andreas Seltenreich <andreas+git@ansel.ydns.eu>

    Add pq:getrow.
---
 pq.c    | 47 +++++++++++++++++++++++++----------------------
 test.el |  3 +++
 2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/pq.c b/pq.c
index 0418bb3944..a6eb78824c 100644
--- a/pq.c
+++ b/pq.c
@@ -256,7 +256,9 @@ pq_getvalue_internal(emacs_env *env, PGresult *res, int 
row, int column)
   switch(PQftype(res, column)) {
   case INT2OID:
   case INT4OID:
+  case OIDOID:
       return env->make_integer(env, atol(result));
+  case INT8OID:
   case FLOAT4OID:
   case FLOAT8OID:
   case NUMERICOID:
@@ -280,22 +282,23 @@ Fpq_getvalue(emacs_env *env, int nargs, emacs_value 
args[], void *data)
   return pq_getvalue_internal(env, arg0->p.res, row, column);
 }
 
-/* static emacs_value */
-/* Fpq_getrow(emacs_env *env, int nargs, emacs_value args[], void *data) */
-/* { */
-/*   struct pq_pointer *arg0 = env->get_user_ptr(env, args[0]); */
-/*   int row = env->extract_integer(env, args[1]); */
-/*   assert(type_res == arg0->type); */
-/*   int nfields = PQnfields(arg0->p.res); */
-/*   emacs_value *values = malloc(nfields*sizeof(emacs_value)); */
+static emacs_value
+Fpq_getrow(emacs_env *env, int nargs, emacs_value args[], void *data)
+{
+  struct pq_pointer *arg0 = env->get_user_ptr(env, args[0]);
+  int row = env->extract_integer(env, args[1]);
+  assert(type_res == arg0->type);
+  int nfields = PQnfields(arg0->p.res);
+  emacs_value *values = malloc((nfields + 1)*sizeof(emacs_value));
 
-/*   for (int i = 0; i < nfields; i++) { */
-/*     values[i] = pq_getvalue_internal(env, arg0->p.res, row, i); */
-/*   } */
+  for (int i = 0; i < nfields; i++) {
+    values[i] = pq_getvalue_internal(env, arg0->p.res, row, i);
+  }
+  values[nfields] = Qnil;
 
-/*   emacs_value Qvector = env->intern (env, "vector"); */
-/*   return env->funcall (env, Qvector, nfields, values); */
-/* } */
+  emacs_value Qvector = env->intern (env, "vector");
+  return env->funcall (env, Qvector, nfields, values);
+}
 
 static emacs_value
 Fpq_escape (emacs_env *env, int nargs, emacs_value args[], void *data)
@@ -449,14 +452,14 @@ emacs_module_init (struct emacs_runtime *init_ert)
   );
   bind_function("pq:escapeIdentifier", fun11);
 
-/*   emacs_value fun12 = env->make_function (env, */
-/*               2,            /\* min. number of arguments *\/ */
-/*               2,  /\* max. number of arguments *\/ */
-/*               Fpq_getrow,  /\* actual function pointer *\/ */
-/*               "Fetch ROW from RESULT as a vector.",        /\* docstring 
*\/ */
-/*               PQescapeIdentifier  /\* user pointer of your choice (data 
param in Fmymod_test) *\/ */
-/*   ); */
-/*   bind_function("pq:getrow", fun12); */
+  emacs_value fun12 = env->make_function (env,
+              2,            /* min. number of arguments */
+              2,  /* max. number of arguments */
+              Fpq_getrow,  /* actual function pointer */
+              "Fetch ROW from RESULT as a vector.",        /* docstring */
+              PQescapeIdentifier  /* user pointer of your choice (data param 
in Fmymod_test) */
+  );
+  bind_function("pq:getrow", fun12);
 
   Qnil = env->intern (env, "nil");
   Qt = env->intern (env, "t");
diff --git a/test.el b/test.el
index 4f3c08387b..a9637f64c9 100644
--- a/test.el
+++ b/test.el
@@ -9,5 +9,8 @@
 (pq:getvalue (pq:execParams con "select 'Hello, ' || $1::text" 
(user-login-name)) 0 0)
 (pq:escapeLiteral con "moo'oo")
 (pq:exec con (concat "set application_name to " (pq:escapeLiteral con 
(emacs-version))))
+(setq result (pq:exec con "select version()"))
+(setq result (pq:exec con "select * from pg_stat_activity"))
+(pq:getrow result 0)
 (setq con nil)
 (garbage-collect)



reply via email to

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