Browse Source

Fix table variable with commas in ob-sqlite

* lisp/ob-sqlite.el (org-babel-sqlite-expand-vars): Stop interfering
  with the 'orgtbl-to-csv' default formatting.

* testing/lisp/test-ob-sqlite.el: New file.

The problem here was that ob-sqlite was providing a format to the
`orgtbl-to-csv' that actually overwrote the default format in that
function, and in the case where there were commas in the content of
the table, broke the table as argument mechanism.

TINYCHANGE
Eduardo Bellani 2 years ago
parent
commit
6edec1bef5
2 changed files with 46 additions and 4 deletions
  1. 1 4
      lisp/ob-sqlite.el
  2. 45 0
      testing/lisp/test-ob-sqlite.el

+ 1 - 4
lisp/ob-sqlite.el

@@ -123,10 +123,7 @@ This function is called by `org-babel-execute-src-block'."
               (if (listp val)
                   (let ((data-file (org-babel-temp-file "sqlite-data-")))
                     (with-temp-file data-file
-                      (insert (orgtbl-to-csv
-                               val '(:fmt (lambda (el) (if (stringp el)
-                                                      el
-                                                    (format "%S" el)))))))
+                      (insert (orgtbl-to-csv val nil)))
                     data-file)
                 (if (stringp val) val (format "%S" val))))
 	    body)))

+ 45 - 0
testing/lisp/test-ob-sqlite.el

@@ -0,0 +1,45 @@
+;;; test-ob-sqlite.el --- tests for ob-sqlite.el
+
+;; Copyright (C) 2017  Eduardo Bellani
+
+;; Author: Eduardo Bellani <ebellani@gmail.com>
+;; Keywords: lisp
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+(org-test-for-executable "sqlite")
+(unless (featurep 'ob-sqlite)
+  (signal 'missing-test-dependency "Support for sqlite code blocks"))
+
+(ert-deftest ob-sqlite/table-variables-with-commas ()
+  "Test of a table variable that contains commas. This garantees that this code path results in a valid CSV."
+  (should
+   (equal '(("Mr Test A. Sql"
+	     "Minister for Science, Eternal Happiness, and Finance"))
+	  (org-test-with-temp-text
+	      "#+name: test_table1
+| \"Mr Test A. Sql\" | Minister for Science, Eternal Happiness, and Finance |
+
+#+begin_src sqlite :db /tmp/test.db :var tb=test_table1
+  drop table if exists TestTable;
+  create table TestTable(person, job);
+  .mode csv TestTable
+  .import $tb TestTable
+  select * from TestTable;
+#+end_src"
+	    (org-babel-next-src-block)
+	    (org-babel-execute-src-block)))))
+
+;;; test-ob-sqlite.el ends here