[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/triples 45dc57703a 01/10: Fix emacsql/buit-in sqlite in
From: |
ELPA Syncer |
Subject: |
[elpa] externals/triples 45dc57703a 01/10: Fix emacsql/buit-in sqlite incompatibility |
Date: |
Sat, 10 Jun 2023 13:00:10 -0400 (EDT) |
branch: externals/triples
commit 45dc57703ae870aa864a195041b76d622535c351
Author: Andrew Hyatt <ahyatt@gmail.com>
Commit: Andrew Hyatt <ahyatt@gmail.com>
Fix emacsql/buit-in sqlite incompatibility
Emacsql correctly was storing integers as integers, whereas the builtin
sqlite
was both reading and writing integers as strings. This corrects the
built-in
sqlite to use integers instead of strings.
Fixes the cause of https://github.com/ahyatt/triples/issues/2, although we
will
need a further upgrading mechanism for data written in the built-in sqlite.
---
CHANGELOG.org | 10 ----------
NEWS.org | 2 ++
triples-backups.el | 2 +-
triples-test.el | 41 +++++++++++++++++++++++++++++++++++++++--
triples.el | 12 +++++++-----
5 files changed, 49 insertions(+), 18 deletions(-)
diff --git a/CHANGELOG.org b/CHANGELOG.org
deleted file mode 100644
index f6e451d1d1..0000000000
--- a/CHANGELOG.org
+++ /dev/null
@@ -1,10 +0,0 @@
-TITLE: Changelog for the triples module for GNU Emacs.
-
-* 0.2
-- Create a default database to encourage a shared triple database. Add
information on why this is an interesting idea in the README.
-- Add support for backups of databases via =triples-backup=, and a simple way
to have a sane and shared backups created with the new =triples-backups= module.
-- Add =triples-move-subject= which will move both a subject as well as
reference to it.
-* 0.1.1
- - Bugfix release to fix =triples-subject-with-predicate-object=.
-* 0.1
-- This is the initial version that contained basic triple functionality, and
was integrated into GNU ELPA.
diff --git a/NEWS.org b/NEWS.org
index a08c9a4f92..b64b006f27 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -1,5 +1,7 @@
TITLE: Changelog for the triples module for GNU Emacs.
+* 0.3
+- All integers are stored as integers, and not strings
* 0.2.7
- Add new function =triples-db-select-pred-op=, which allows querying among
predicates for objects with a certain relationship to values, replaces
=triples-db-select-predicate-object-fragment=.
- Add ability to store cons types (basically lists) as values.
diff --git a/triples-backups.el b/triples-backups.el
index df5ee8d48e..2e8036b4ab 100644
--- a/triples-backups.el
+++ b/triples-backups.el
@@ -90,4 +90,4 @@ LAST-UPDATE is the time of the last update."
7))
(provide 'triples-backups)
-;;; Code:
+;;; triples-backups.el ends here
diff --git a/triples-test.el b/triples-test.el
index b96c1b3385..aaade3a559 100644
--- a/triples-test.el
+++ b/triples-test.el
@@ -190,6 +190,43 @@ easily debug into it.")
;; this will fail.
(should (= 0 (length (triples-db-select-pred-op db :person/age '>
1000))))))
+(ert-deftest triples-test-builtin-emacsql-compat ()
+ (let ((triples-sqlite-interface 'builtin))
+ (triples-test-with-temp-db
+ (triples-add-schema db 'person
+ '(name :base/unique t :base/type string)
+ '(age :base/unique t :base/type integer))
+ (triples-set-type db 123 'person :name "Alice Aardvark" :age 41)
+ (should (equal (triples-get-type db 123 'person)
+ '(:age 41 :name "Alice Aardvark")))
+ (triples-close db)
+ (let* ((triples-sqlite-interface 'emacsql)
+ (db (triples-connect db-file)))
+ (should (equal (triples-get-type db 123 'person)
+ '(:age 41 :name "Alice Aardvark")))
+ (triples-close db))
+ ;; Just so the last close will work.
+ (setq db (triples-connect db-file)))))
+
+(ert-deftest triples-test-emacsql-builtin-compat ()
+ (let ((triples-sqlite-interface 'emacsql))
+ (triples-test-with-temp-db
+ (triples-add-schema db 'person
+ '(name :base/unique t :base/type string)
+ '(age :base/unique t :base/type integer))
+ (triples-set-type db 123 'person :name "Alice Aardvark" :age 41)
+ (should (equal (triples-get-type db 123 'person)
+ '(:age 41 :name "Alice Aardvark")))
+ (triples-close db)
+ (let* ((triples-sqlite-interface 'builtin)
+ (db (triples-connect db-file)))
+ (should (equal (triples-get-type db 123 'person)
+ '(:age 41 :name "Alice Aardvark")))
+ (triples-close db))
+ ;; Just so the last close will work.
+ (setq db (triples-connect db-file)))))
+
+
;; After this we don't bother testing both with emacsql and the builtin sqlite,
;; since if the functions tested above work, it should also work for both.
@@ -426,10 +463,10 @@ easily debug into it.")
(should (= 1 (length (triples-subjects-with-predicate-object db
'named/name "Foo"))))))
(ert-deftest triples-readme ()
- (triples-test-with-temp-db
- (triples-add-schema db 'person
+ ((triples-add-schema db 'person
'(name :base/unique t :base/type string)
'(age :base/unique t :base/type integer))
+ triples-test-with-temp-db
(triples-add-schema db 'employee
'(id :base/unique t :base/type integer)
'(manager :base/unique t)
diff --git a/triples.el b/triples.el
index fd34fa5c0c..a9a42f7f90 100644
--- a/triples.el
+++ b/triples.el
@@ -6,7 +6,7 @@
;; Homepage: https://github.com/ahyatt/triples
;; Package-Requires: ((seq "2.0") (emacs "28.1"))
;; Keywords: triples, kg, data, sqlite
-;; Version: 0.2.7
+;; Version: 0.3
;; 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 2 of the
@@ -137,15 +137,17 @@ exist at any time. Older backups are the ones that are
deleted."
"If VAL is a string, return it as enclosed in quotes
This is done to have compatibility with the way emacsql stores
values. Turn a symbol into a string as well, but not a quoted
-one, because sqlite cannot handle symbols."
+one, because sqlite cannot handle symbols. Integers do not need
+to be stringified."
;; Do not print control characters escaped - we want to get things out
exactly
;; as we put them in.
(let ((print-escape-control-characters nil))
- (if val
- (format "%S" val)
+ (pcase val
;; Just to save a bit of space, let's use "()" instead of "null", which
is
;; what it would be turned into by the pcase above.
- "()")))
+ ((pred null) "()")
+ ((pred integerp) val)
+ (_ (format "%S" val)))))
(defun triples-standardize-result (result)
"Return RESULT in standardized form.
- [elpa] externals/triples updated (33d78d828e -> 192da8373e), ELPA Syncer, 2023/06/10
- [elpa] externals/triples 45dc57703a 01/10: Fix emacsql/buit-in sqlite incompatibility,
ELPA Syncer <=
- [elpa] externals/triples fed7932d97 09/10: Fix for issue where schema additions would overwrite existing data., ELPA Syncer, 2023/06/10
- [elpa] externals/triples a6cea08612 02/10: Test a variety of subject types for emacsql/builtin compatibility, ELPA Syncer, 2023/06/10
- [elpa] externals/triples d04bc2f564 05/10: Correct README reference to triples-with-predicate-object, ELPA Syncer, 2023/06/10
- [elpa] externals/triples de8867e079 07/10: Fix more fundamental differences between sqlite and emacsql, ELPA Syncer, 2023/06/10
- [elpa] externals/triples 2465cbbc7f 04/10: Update copyright to 2023, ELPA Syncer, 2023/06/10
- [elpa] externals/triples 668363c6e7 03/10: Provide triples-upgrade-to-0.3 for builtin sqlite users, ELPA Syncer, 2023/06/10
- [elpa] externals/triples 28d497ff23 06/10: Fix mangled test, triples-readme, ELPA Syncer, 2023/06/10
- [elpa] externals/triples a8dd90ce9a 08/10: Remove leftover development-only function in triples-upgrade, ELPA Syncer, 2023/06/10
- [elpa] externals/triples 192da8373e 10/10: Change text in README saying triples package is very new, ELPA Syncer, 2023/06/10