From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Rodighiero Subject: [PATCH] ob-sql.el: Option to reference connections in `sql-connection-alist' Date: Sun, 24 Mar 2019 13:04:33 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000c1b4ea0584d5e40c" Return-path: Received: from eggs.gnu.org ([209.51.188.92]:34776) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h81tg-00066r-Ps for emacs-orgmode@gnu.org; Sun, 24 Mar 2019 08:06:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h81rr-0000ar-2S for emacs-orgmode@gnu.org; Sun, 24 Mar 2019 08:04:48 -0400 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]:36395) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h81rq-0000YG-Iv for emacs-orgmode@gnu.org; Sun, 24 Mar 2019 08:04:47 -0400 Received: by mail-lf1-x141.google.com with SMTP id d18so4150475lfn.3 for ; Sun, 24 Mar 2019 05:04:46 -0700 (PDT) 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" To: emacs-orgmode@gnu.org --000000000000c1b4ea0584d5e40c Content-Type: multipart/alternative; boundary="000000000000c1b4e80584d5e40a" --000000000000c1b4e80584d5e40a Content-Type: text/plain; charset="UTF-8" Hi, [This is the first patch I ever submitted. I hope it complies with your standards: if it does not, I'll be happy to work on it until it's fine. I am not sure it qualifies as a tiny change.] Org-babel allows SQL snippets to be run on a database connection that can be specified in the source block header using parameters such as :dbhost, :dbuser, :dbpassword and so forth. This is very useful, but I'd also like to be able to use symbolic references to connections defined elsewhere, so that for example one does not have to specify the password every time, interactively or, worse, in the .org file itself. I am also a user of sql.el, that provides a custom variable `sql-connection-alist', where users can define a mapping between connection names and connection details. The patch I'm submitting extends the behavior of org-babel-execute:sql so that it's possible to specify a new param :dbconnection containing a connection name, used for looking up `sql-connection-alist'. For example, if `sql-connection-alist' contains something like: (("mydb" (sql-product 'postgres) (sql-post 5432) (sql-server "mydb.server") (sql-user "stefano") (sql-password "supersecret"))) Then it's possible to use: #+begin_src sql :engine postgresql :dbconnection mydb select foo, bar, baz from mytable #+end_src s. -- www.stefanorodighiero.net --000000000000c1b4e80584d5e40a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

[This i= s the first patch I ever submitted.=C2=A0 I hope it complies with
your standards: if it does not, I'll be happy to work on it until it&#= 39;s
fine.=C2=A0 I am not sure it qualifies as a tiny change.]

Org-babel allows SQL snippets to be run on a databas= e connection that
can be specified in the source block header usi= ng parameters such as
:dbhost, :dbuser, :dbpassword and so forth.=

This is very useful, but I'd also like to be = able to use symbolic
references to connections defined elsewhere,= so that for example one
does not have to specify the password ev= ery time, interactively or,
worse, in the .org file itself.
=

I am also a user of sql.el, that provides a custom vari= able
`sql-connection-alist', where users can define a mapping= between
connection names and connection details.

<= /div>
The patch I'm submitting extends the behavior of
or= g-babel-execute:sql so that it's possible to specify a new param
<= div>:dbconnection containing a connection name, used for looking up
`sql-connection-alist'.

For example, if `sq= l-connection-alist' contains something like:

= =C2=A0 (("mydb" (sql-product 'postgres)
=C2=A0 =C2=A0 =C2=A0(sql-post 5432)
= =C2=A0 =C2=A0(sql-server "mydb= .server")
=C2=A0 =C2= =A0(sql-user "stefano")
=C2=A0 =C2=A0(sql-password "supersecret")))
Then it's possible to use:

=C2=A0= #+begin_src sql :engine postgresql :dbconnection mydb
=C2=A0 =C2= =A0 select foo, bar, baz from mytable
=C2=A0 #+end_src
=
s.


--
--000000000000c1b4e80584d5e40a-- --000000000000c1b4ea0584d5e40c Content-Type: text/x-patch; charset="US-ASCII"; name="0001-ob-sql.el-Option-to-reference-connections-in-sql-con.patch" Content-Disposition: attachment; filename="0001-ob-sql.el-Option-to-reference-connections-in-sql-con.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jtmvh5iv0 RnJvbSAxNzZjZjY0OGY5ZjM4ZGUxYjljMzViZjFmYWUwNmMyMzE4N2RiOGI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW5vIFJvZGlnaGllcm8gPHN0ZWZhbm8ucm9kaWdoaWVy b0BnbWFpbC5jb20+CkRhdGU6IFN1biwgMjQgTWFyIDIwMTkgMTE6MzU6MjEgKzAxMDAKU3ViamVj dDogW1BBVENIXSBvYi1zcWwuZWw6IE9wdGlvbiB0byByZWZlcmVuY2UgY29ubmVjdGlvbnMgaW4K IGBzcWwtY29ubmVjdGlvbi1hbGlzdCcKCiogb2Itc3FsLmVsOiBQcm92aWRlIGEgbmV3IHBhcmFt IGNhbGxlZCA6ZGJjb25uZWN0aW9uLCB0aGF0IGNhbiBiZQp1c2VkIHRvIHJlZmVyZW5jZSBjb25u ZWN0aW9ucyBkZWZpbmVkIGluIGBzcWwtY29ubmVjdGlvbi1hbGlzdCcsIGEKY3VzdG9tIHZhcmlh YmxlIGRlZmluZWQgaW4gc3FsLmVsLgotLS0KIGxpc3Avb2Itc3FsLmVsIHwgMzEgKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyks IDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9vYi1zcWwuZWwgYi9saXNwL29iLXNx bC5lbAppbmRleCAyYTU4MTg4Li4wZTFkNGYwIDEwMDY0NAotLS0gYS9saXNwL29iLXNxbC5lbAor KysgYi9saXNwL29iLXNxbC5lbApAQCAtMzksNiArMzksNyBAQAogOzsgLSBkYnBvcnQKIDs7IC0g ZGJ1c2VyCiA7OyAtIGRicGFzc3dvcmQKKzs7IC0gZGJjb25uZWN0aW9uICh0byByZWZlcmVuY2Ug Y29ubmVjdGlvbnMgaW4gc3FsLWNvbm5lY3Rpb24tYWxpc3QpCiA7OyAtIGRhdGFiYXNlCiA7OyAt IGNvbG5hbWVzIChkZWZhdWx0LCBuaWwsIG1lYW5zICJ5ZXMiKQogOzsgLSByZXN1bHQtcGFyYW1z CkBAIC0xNzQsMTYgKzE3NSwzNiBAQCBPdGhlcndpc2UsIHVzZSBFbWFjcycgc3RhbmRhcmQgY29u dmVyc2lvbiBmdW5jdGlvbi4iCiAJKChzdHJpbmc9ICJ3aW5kb3dzLW50IiBzeXN0ZW0tdHlwZSkg ZmlsZSkKIAkodCAoZm9ybWF0ICIlUyIgKGNvbnZlcnQtc3RhbmRhcmQtZmlsZW5hbWUgZmlsZSkp KSkpCiAKKyhkZWZ1biBvcmctYmFiZWwtZmluZC1kYi1jb25uZWN0aW9uLXBhcmFtIChwYXJhbXMg bmFtZSkKKyAgIlJldHVybiBkYiBjb25uZWN0aW9uIHBhcmFtIE5BTUUuCitHaXZlbiBhIHBhcmFt IE5BTUUsIGlmIDpkYmNvbm5lY3Rpb24gaXMgZGVmaW5lZCBpbiBQQVJBTVMgdGhlbgorbG9vayBm b3IgdGhlIHBhcmFtIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbiBkZWZpbmVkIGlu Citgc3FsLWNvbm5lY3Rpb24tYWxpc3RgLCBvdGhlcndpc2UgbG9vayBpbnRvIFBBUkFNUy4gIExv b2sKK2BzcWwtY29ubmVjdGlvbi1hbGlzdGAgKHBhcnQgb2YgU1FMIG1vZGUpIGZvciBob3cgdG8g ZGVmaW5lCitkYXRhYmFzZSBjb25uZWN0aW9ucy4iCisgIChpZiAoYXNzcSA6ZGJjb25uZWN0aW9u IHBhcmFtcykKKyAgICAgIChsZXQqICgoZGJjb25uZWN0aW9uIChjZHIgKGFzc3EgOmRiY29ubmVj dGlvbiBwYXJhbXMpKSkKKyAgICAgICAgICAgICAobmFtZS1tYXBwaW5nICcoKGRiaG9zdCAuIHNx bC1zZXJ2ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYnBvcnQgLiBzcWwtcG9y dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRidXNlciAuIHNxbC11c2VyKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJwYXNzd29yZCAuIHNxbC1wYXNzd29yZCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGFiYXNlIC4gc3FsLWRhdGFiYXNlKSkpCisg ICAgICAgICAgICAgKG1hcHBlZC1uYW1lIChjZHIgKGFzc3EgbmFtZSBuYW1lLW1hcHBpbmcpKSkp CisgICAgICAgIChjYWRyIChhc3NxIG1hcHBlZC1uYW1lCisgICAgICAgICAgICAgICAgICAgIChj ZHIgKGFzc29jIGRiY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz cWwtY29ubmVjdGlvbi1hbGlzdCkpKSkpCisgICAgKGNkciAoYXNzcSBuYW1lIHBhcmFtcykpKSkK KwogKGRlZnVuIG9yZy1iYWJlbC1leGVjdXRlOnNxbCAoYm9keSBwYXJhbXMpCiAgICJFeGVjdXRl IGEgYmxvY2sgb2YgU3FsIGNvZGUgd2l0aCBCYWJlbC4KIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IGJ5IGBvcmctYmFiZWwtZXhlY3V0ZS1zcmMtYmxvY2snLiIKICAgKGxldCogKChyZXN1bHQtcGFy YW1zIChjZHIgKGFzc3EgOnJlc3VsdC1wYXJhbXMgcGFyYW1zKSkpCiAgICAgICAgICAoY21kbGlu ZSAoY2RyIChhc3NxIDpjbWRsaW5lIHBhcmFtcykpKQotICAgICAgICAgKGRiaG9zdCAoY2RyIChh c3NxIDpkYmhvc3QgcGFyYW1zKSkpCi0gICAgICAgICAoZGJwb3J0IChjZHIgKGFzc3EgOmRicG9y dCBwYXJhbXMpKSkKLSAgICAgICAgIChkYnVzZXIgKGNkciAoYXNzcSA6ZGJ1c2VyIHBhcmFtcykp KQotICAgICAgICAgKGRicGFzc3dvcmQgKGNkciAoYXNzcSA6ZGJwYXNzd29yZCBwYXJhbXMpKSkK LSAgICAgICAgIChkYXRhYmFzZSAoY2RyIChhc3NxIDpkYXRhYmFzZSBwYXJhbXMpKSkKKyAgICAg ICAgIChkYmhvc3QgKG9yZy1iYWJlbC1maW5kLWRiLWNvbm5lY3Rpb24tcGFyYW0gcGFyYW1zICdk Ymhvc3QpKQorICAgICAgICAgKGRicG9ydCAob3JnLWJhYmVsLWZpbmQtZGItY29ubmVjdGlvbi1w YXJhbSBwYXJhbXMgJ2RicG9ydCkpCisgICAgICAgICAoZGJ1c2VyIChvcmctYmFiZWwtZmluZC1k Yi1jb25uZWN0aW9uLXBhcmFtIHBhcmFtcyAnZGJ1c2VyKSkKKyAgICAgICAgIChkYnBhc3N3b3Jk IChvcmctYmFiZWwtZmluZC1kYi1jb25uZWN0aW9uLXBhcmFtIHBhcmFtcyAnZGJwYXNzd29yZCkp CisgICAgICAgICAoZGF0YWJhc2UgKG9yZy1iYWJlbC1maW5kLWRiLWNvbm5lY3Rpb24tcGFyYW0g cGFyYW1zICdkYXRhYmFzZSkpCiAgICAgICAgICAoZW5naW5lIChjZHIgKGFzc3EgOmVuZ2luZSBw YXJhbXMpKSkKICAgICAgICAgIChjb2xuYW1lcy1wIChub3QgKGVxdWFsICJubyIgKGNkciAoYXNz cSA6Y29sbmFtZXMgcGFyYW1zKSkpKSkKICAgICAgICAgIChpbi1maWxlIChvcmctYmFiZWwtdGVt cC1maWxlICJzcWwtaW4tIikpCi0tIAoyLjcuNAoK --000000000000c1b4ea0584d5e40c--