emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/sqlite d377241: Make sqlite string encoding more efficient


From: Lars Ingebrigtsen
Subject: scratch/sqlite d377241: Make sqlite string encoding more efficient
Date: Tue, 7 Dec 2021 00:35:32 -0500 (EST)

branch: scratch/sqlite
commit d37724174a89a8d890d64562a3cada93543389d7
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Make sqlite string encoding more efficient
---
 src/sqlite.c             |  7 +++++--
 test/src/sqlite-tests.el | 19 +++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/sqlite.c b/src/sqlite.c
index cdfc97b..abffa12 100644
--- a/src/sqlite.c
+++ b/src/sqlite.c
@@ -108,8 +108,11 @@ bind_values (sqlite3 *db, sqlite3_stmt *stmt, Lisp_Object 
values)
 
       if (EQ (type, Qstring))
        {
-         Lisp_Object encoded =
-           code_convert_string_norecord (value, Qutf_8, true);
+         Lisp_Object encoded;
+         if (STRING_MULTIBYTE (value))
+           encoded = encode_string_utf_8 (value, Qnil, 0, Qt, Qt);
+         else
+           encoded = value;
          ret = sqlite3_bind_text (stmt, i + 1,
                                   SSDATA (encoded), SBYTES (encoded),
                                   NULL);
diff --git a/test/src/sqlite-tests.el b/test/src/sqlite-tests.el
index 808939b..eaae159 100644
--- a/test/src/sqlite-tests.el
+++ b/test/src/sqlite-tests.el
@@ -140,4 +140,23 @@
        db "select * from test4 where col2 = ?" [1])
       '(("foo" 1))))))
 
+(ert-deftest sqlite-binary ()
+  (skip-unless (sqlite-available-p))
+  (let (db)
+    (setq db (sqlite-open))
+    (sqlite-execute
+     db "create table if not exists test5 (col1 text, col2 number)")
+    (let ((string (with-temp-buffer
+                    (set-buffer-multibyte nil)
+                    (insert 0 1 2)
+                    (buffer-string))))
+      (should-not (multibyte-string-p string))
+      (sqlite-execute
+       db
+       "insert into test5 values (?, ?)"
+       (list string 2))
+      (let ((out (caar
+                  (sqlite-select db "select col1 from test5 where col2 = 2"))))
+        (should (equal out string))))))
+
 ;;; sqlite-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]