From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?U3RldmVuIFLDqW1vdA==?= Subject: Re: [PATCH] Add support for :dbhost, :dbuser and :database parameters for poastgresql in ob-sql.el Date: Sat, 20 Sep 2014 15:31:08 +0200 Message-ID: <541D819C.2030107@gmail.com> References: <53E52F05.3040106@gmail.com> <53E5F215.10103@gmail.com> <541D6B40.7030501@gmail.com> <8761gia3mf.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080401010300020700050600" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45158) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XVKl3-0006d6-BS for emacs-orgmode@gnu.org; Sat, 20 Sep 2014 09:31:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XVKku-0006Kg-0x for emacs-orgmode@gnu.org; Sat, 20 Sep 2014 09:31:25 -0400 Received: from mail-wi0-x22b.google.com ([2a00:1450:400c:c05::22b]:44661) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XVKkt-0006K5-Lj for emacs-orgmode@gnu.org; Sat, 20 Sep 2014 09:31:15 -0400 Received: by mail-wi0-f171.google.com with SMTP id ho1so808914wib.10 for ; Sat, 20 Sep 2014 06:31:09 -0700 (PDT) In-Reply-To: <8761gia3mf.fsf@nicolasgoaziou.fr> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: "Thomas S. Dye" , emacs-orgmode@gnu.org This is a multi-part message in MIME format. --------------080401010300020700050600 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Thank you for your comments. I attached the fixed patch below. On 09/20/2014 14:16, Nicolas Goaziou wrote: > This is not related to your patch, but while you're at it, use `delq' > instead of `remq' (nitpick) and `dbstring-postgresql' needs to be > renamed `org-babel-sql-dbstring-postgresql' or some such. I used mysql parameters handling code as a template for writing my patch, so it suffered from the same problems. I added a second patch that renames `dbstring-mysql' to `org-babel-sql-dbstring-mysql' and that uses `delq' instead of `remq' in its implementation. I did some basic tests to ensure I didn't break anything. Regards, Steven RĂ©mot --------------080401010300020700050600 Content-Type: text/x-patch; name="0001-ob-sql.el-Enhance-postgresql-support.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-ob-sql.el-Enhance-postgresql-support.patch" >From b4584bddcc66046836c4029ab992bd8b8ed347ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20R=C3=A9mot?= Date: Sat, 20 Sep 2014 15:02:36 +0200 Subject: [PATCH 1/2] ob-sql.el: Enhance postgresql support * lisp/ob-sql.el (org-babel-sql-dbstring-postgresql): New function (org-babel-execute:sql): Use new function. Before this patch, it was necessary to use :cmdline parameter to specify host, user and database different the the default ones. Now, this can be done using parameters that are independents of the engine used. This is not trivial (and not recommended) to pass password as a command line argument to psql, so :dbpassword is not supported. --- lisp/ob-sql.el | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/ob-sql.el b/lisp/ob-sql.el index 7b85df8..292d5dd 100644 --- a/lisp/ob-sql.el +++ b/lisp/ob-sql.el @@ -87,6 +87,15 @@ (when password (concat "-p" password)) (when database (concat "-D" database)))))) +(defun org-babel-sql-dbstring-postgresql (host user database) + "Make PostgreSQL command line args for database connection. +Pass nil to omit that arg." + (combine-and-quote-strings + (delq nil + (list (when host (concat "-h" host)) + (when user (concat "-U" user)) + (when database (concat "-d" database)))))) + (defun org-babel-execute:sql (body params) "Execute a block of Sql code with Babel. This function is called by `org-babel-execute-src-block'." @@ -123,8 +132,9 @@ This function is called by `org-babel-execute-src-block'." (org-babel-process-file-name in-file) (org-babel-process-file-name out-file))) ('postgresql (format - "psql --set=\"ON_ERROR_STOP=1\" %s -A -P footer=off -F \"\t\" -f %s -o %s %s" + "psql --set=\"ON_ERROR_STOP=1\" %s -A -P footer=off -F \"\t\" %s -f %s -o %s %s" (if colnames-p "" "-t") + (org-babel-sql-dbstring-postgresql dbhost dbuser database) (org-babel-process-file-name in-file) (org-babel-process-file-name out-file) (or cmdline ""))) -- 1.9.1 --------------080401010300020700050600 Content-Type: text/x-patch; name="0002-ob-sql.el-Clean-mysql-parameters-generation.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-ob-sql.el-Clean-mysql-parameters-generation.patch" >From 4cd3b02de74c74980ca0b99f7faa228f96792a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20R=C3=A9mot?= Date: Sat, 20 Sep 2014 15:09:29 +0200 Subject: [PATCH 2/2] ob-sql.el: Clean mysql parameters generation * lisp/ob-sql.el (dbstring-mysql): Rename function and tweak a bit its implementation (org-babel-execute:sql): Use new function name Prefix `dbstring-mysql' function with the namespace "org-babel-sql" to avoid name collisions. Also replace the call to `remq' by `delq' because it is a bit more efficient, and also to be consistent with `org-babel-sql-dbstring-postgresql'. --- lisp/ob-sql.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/ob-sql.el b/lisp/ob-sql.el index 292d5dd..493b3dc 100644 --- a/lisp/ob-sql.el +++ b/lisp/ob-sql.el @@ -78,10 +78,10 @@ (org-babel-sql-expand-vars body (mapcar #'cdr (org-babel-get-header params :var)))) -(defun dbstring-mysql (host user password database) +(defun org-babel-sql-dbstring-mysql (host user password database) "Make MySQL cmd line args for database connection. Pass nil to omit that arg." (combine-and-quote-strings - (remq nil + (delq nil (list (when host (concat "-h" host)) (when user (concat "-u" user)) (when password (concat "-p" password)) @@ -126,7 +126,7 @@ This function is called by `org-babel-execute-src-block'." (org-babel-process-file-name in-file) (org-babel-process-file-name out-file))) ('mysql (format "mysql %s %s %s < %s > %s" - (dbstring-mysql dbhost dbuser dbpassword database) + (org-babel-sql-dbstring-mysql dbhost dbuser dbpassword database) (if colnames-p "" "-N") (or cmdline "") (org-babel-process-file-name in-file) -- 1.9.1 --------------080401010300020700050600--