ob-sql.el: Respect all params when using dbconnection

* etc/ORG-NEWS (Miscellaneous): Document the change.
* lisp/ob-sql.el (org-babel-find-db-connection-param): Make it
possible to overwrite parameters that are set from :dbconnection.
This commit is contained in:
Daniel Kraus 2022-10-31 07:52:09 +01:00 committed by Ihor Radchenko
parent 5dc8ea0abe
commit fbbc8b55cf
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
2 changed files with 26 additions and 12 deletions

View File

@ -457,6 +457,20 @@ The new variable name is =org-plantuml-args=. It now applies to both
jar PlantUML file and executable.
** Miscellaneous
*** SQL Babel ~:dbconnection~ parameter can be mixed with other SQL Babel parameters
Before you could either specify SQL parameters like ~:dbhost~,
~:dbuser~, ~:database~, etc or a ~:dbconnection~ parameter which looks
up all other parameters from the ~sql-connection-alist~ variable. Now
it's possible to specify a ~:dbconnection~ and additionally other
parameters that will add or overwrite the parameters coming from
~sql-connection-alist~.
E.g. if you have a connection in your ~sql-connection-alist~ to a
server that has many databases, you don't need an entry for every
database but instead can just specify ~:database~ next to your
~:dbconnection~ parameter.
*** Post-processing code blocks can return an empty list
When the result of a regular code block is nil, then that was already

View File

@ -222,18 +222,18 @@ then look for the parameter into the corresponding connection
defined in `sql-connection-alist', otherwise look into PARAMS.
See `sql-connection-alist' (part of SQL mode) for how to define
database connections."
(if (assq :dbconnection params)
(let* ((dbconnection (cdr (assq :dbconnection params)))
(name-mapping '((:dbhost . sql-server)
(:dbport . sql-port)
(:dbuser . sql-user)
(:dbpassword . sql-password)
(:dbinstance . sql-dbinstance)
(:database . sql-database)))
(mapped-name (cdr (assq name name-mapping))))
(cadr (assq mapped-name
(cdr (assoc dbconnection sql-connection-alist)))))
(cdr (assq name params))))
(or (cdr (assq name params))
(and (assq :dbconnection params)
(let* ((dbconnection (cdr (assq :dbconnection params)))
(name-mapping '((:dbhost . sql-server)
(:dbport . sql-port)
(:dbuser . sql-user)
(:dbpassword . sql-password)
(:dbinstance . sql-dbinstance)
(:database . sql-database)))
(mapped-name (cdr (assq name name-mapping))))
(cadr (assq mapped-name
(cdr (assoc dbconnection sql-connection-alist))))))))
(defun org-babel-execute:sql (body params)
"Execute a block of Sql code with Babel.