I've attached a patch to address this.

The issue is that ob-sqlite.el uses org-babel-string-read, which purposefully removes double-quotes. I think this is unintended behaviour, and it only seems to be used with ob-sqlite.el. I added a minor function to bypass the part of org-babel-string-read that was stripping out the double-quotes and use the rest of the function.

I tried ob-sql with the mysql engine and didn't experience the same bug, so I'm pretty confident that this is an isolated issue.


On 5/3/21 6:22 PM, learn orchids wrote:
I am using Org mode version 9.4.5 (9.4.5-73-g4c7696-elpaplus and I have the 
following code snippet. Values in the 'sql' column of the second row is 
truncated. Am I missing something?

#+begin_src sqlite :db /tmp/rip.db  :colnames yes
   drop table if exists testtable;
   create table testtable(id int, sql varchar);
   insert into testtable values (1, "Select id from foo");
   insert into testtable values (2, 'Select "id" from foo');
   select* from testtable;
#+end_src

#+RESULTS: testsql
| id | sql                |
|----+--------------------|
|  1 | Select id from foo |
|  2 | id                 |
>From 3dd868bcd798e6763ec67ba0d2661834e09bb6e9 Mon Sep 17 00:00:00 2001
From: Nicholas Savage <n...@nicksavage.ca>
Date: Tue, 4 May 2021 11:02:20 -0400
Subject: [PATCH] lisp/ob-sqlite.el: Prevent output from being incorrectly
 parsed if it contains double-quotes.

* lisp/ob-sqlite.el (org-babel-sqlite--read-cell): New function.
lisp/ob-sqlite.el (org-babel-sqlite-table-or-scalar): Use
`org-babel-sqlite--read-cell' instead of `org-babel-string-read' to
prevent data from being ignored if it contains double-quotes.

Reported-by: learnorch...@gmail.com
Link: https://orgmode.org/list/cak5xwica4i8h09obzcvpx2pe-t6b0_ju_mxiduriy7gh+pk...@mail.gmail.com/
---
 lisp/ob-sqlite.el | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lisp/ob-sqlite.el b/lisp/ob-sqlite.el
index c0c6f3c97..d227ba69d 100644
--- a/lisp/ob-sqlite.el
+++ b/lisp/ob-sqlite.el
@@ -125,7 +125,7 @@ This function is called by `org-babel-execute-src-block'."
     (mapcar (lambda (row)
 	      (if (eq 'hline row)
 		  'hline
-		(mapcar #'org-babel-string-read row)))
+		(mapcar #'org-babel-sqlite--read-cell row)))
 	    result)))
 
 (defun org-babel-sqlite-offset-colnames (table headers-p)
@@ -139,6 +139,10 @@ This function is called by `org-babel-execute-src-block'."
 Prepare SESSION according to the header arguments specified in PARAMS."
   (error "SQLite sessions not yet implemented"))
 
+(defun org-babel-sqlite--read-cell (cell)
+  "Process CELL to remove unnecessary characters."
+  (org-babel-read cell t))
+
 (provide 'ob-sqlite)
 
 ;;; ob-sqlite.el ends here
-- 
2.20.1

Reply via email to