emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/triples 0252dad7d1 17/19: Fixes from code review from S


From: ELPA Syncer
Subject: [elpa] externals/triples 0252dad7d1 17/19: Fixes from code review from Stefan Monnier.
Date: Sat, 5 Nov 2022 11:58:17 -0400 (EDT)

branch: externals/triples
commit 0252dad7d1ea2c92049119b89497b4ac1a9fa3c3
Author: Andrew Hyatt <ahyatt@gmail.com>
Commit: Andrew Hyatt <ahyatt@gmail.com>

    Fixes from code review from Stefan Monnier.
    
    Removed `triples-sqlite-interface' function, just used a variable.  Better
    method of testing for emacsql.  Some simplifications and minor code tweaks.
---
 triples-test.el | 14 +++++++++++-
 triples.el      | 66 ++++++++++++++++++++++++++-------------------------------
 2 files changed, 43 insertions(+), 37 deletions(-)

diff --git a/triples-test.el b/triples-test.el
index 784557fc67..a9c635218c 100644
--- a/triples-test.el
+++ b/triples-test.el
@@ -4,7 +4,7 @@
 (require 'triples)
 (require 'seq)
 (require 'kv)
-(require 'emacsql)
+(require 'emacsql nil t)
 
 ;;; Code:
 
@@ -57,9 +57,11 @@ easily debug into it.")
                '((sub pred obj nil)))))))
 
 (ert-deftest triples-test-insert-builtin ()
+  (skip-unless (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
   (triples-test-insert 'builtin))
 
 (ert-deftest triples-test-insert-emacsql ()
+  (skip-unless (featurep 'emacsql))
   (triples-test-insert 'emacsql))
 
 (defun triples-test-delete (mode)
@@ -78,9 +80,11 @@ easily debug into it.")
      (should (= 0 (length (triples--select db)))))))
 
 (ert-deftest triples-test-delete-builtin ()
+  (skip-unless (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
   (triples-test-delete 'builtin))
 
 (ert-deftest triples-test-delete-emacsql ()
+  (skip-unless (featurep 'emacsql))
   (triples-test-delete 'emacsql))
 
 (defun triples-test-delete-subject-predicate-prefix (mode)
@@ -95,9 +99,11 @@ easily debug into it.")
      (should (= 0 (length (triples--select db)))))))
 
 (ert-deftest triples-test-delete-subject-predicate-prefix-builtin ()
+  (skip-unless (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
   (triples-test-delete-subject-predicate-prefix 'builtin))
 
 (ert-deftest triples-test-delete-subject-predicate-prefix-emacsql ()
+  (skip-unless (featurep 'emacsql))
   (triples-test-delete-subject-predicate-prefix 'emacsql))
 
 (defun triples-test-select (mode)
@@ -114,9 +120,11 @@ easily debug into it.")
        (should (equal '((1 pred)) (triples--select db 1 nil nil nil '(subject 
predicate))))))))
 
 (ert-deftest triples-test-select-builtin ()
+  (skip-unless (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
   (triples-test-select 'builtin))
 
 (ert-deftest triples-test-select-emacsql ()
+  (skip-unless (featurep 'emacsql))
   (triples-test-select 'emacsql))
 
 (defun triples-test-select-with-pred-prefix (mode)
@@ -130,9 +138,11 @@ easily debug into it.")
                                               (sub1 pred/bar obj nil))))))))
 
 (ert-deftest triples-test-select-with-pred-prefix-builtin ()
+  (skip-unless (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
   (triples-test-select 'builtin))
 
 (ert-deftest triples-test-select-with-pred-prefix-emacsql ()
+  (skip-unless (featurep 'emacsql))
   (triples-test-select 'emacsql))
 
 (defun triples-test-select-predicate-object-fragment (mode)
@@ -143,9 +153,11 @@ easily debug into it.")
                     '((sub1 pred/foo "a whole phrase" nil)))))))
 
 (ert-deftest triples-test-select-predicate-object-fragment-builtin ()
+  (skip-unless (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
   (triples-test-select-predicate-object-fragment 'builtin))
 
 (ert-deftest triples-test-select-predicate-object-fragment-emacsql ()
+  (skip-unless (featurep 'emacsql))
   (triples-test-select-predicate-object-fragment 'emacsql))
 
 ;; After this we don't bother testing both with emacsql and the builtin sqlite,
diff --git a/triples.el b/triples.el
index c003db4b86..b005ce381e 100644
--- a/triples.el
+++ b/triples.el
@@ -4,7 +4,7 @@
 
 ;; Author: Andrew Hyatt <ahyatt@gmail.com>
 ;; Homepage: https://github.com/ahyatt/triples
-;; Package-Requires: ((seq "2.0"))
+;; Package-Requires: ((seq "2.0") (emacs "25"))
 ;; Keywords: triples, kg, data, sqlite
 ;; Version: 0.0
 ;; This program is free software; you can redistribute it and/or
@@ -29,34 +29,31 @@
 ;; This package requires either emacs 29 or the emacsql package to be 
installed.
 
 
-(require 'cl-macs)
+(require 'cl-lib)
+(require 'package)
 (require 'seq)
 (require 'subr-x)
 
 ;;; Code:
 
-(defvar triples-sqlite-interface 'builtin
+(defvar triples-sqlite-interface
+  (if (and (fboundp 'sqlite-available-p) (sqlite-available-p))
+      'builtin
+    'emacsql)
   "The interface to sqlite to use.
-Either `builtin' or `emacsql'. This only is used when the version
-is emacs 29 or greater (when builtin is available) and emacsql
-package is installed, otherwise triples will just use what is
-available.")
-
-(defun triples--sqlite-interface ()
-  "Return the sqlite interface to use.
-See the `triples-sqlite-interface' variable for more information.
-This will return either `builtin' or `emacsql'."
-  (if (and (>= emacs-major-version 29)
-           (featurep 'emacsql))
-      triples-sqlite-interface
-    (if (>= emacs-major-version 29) 'builtin 'emacsql)))
+Either `builtin' or `emacsql'. Defaults to builtin when
+available. Builtin is available when the version is Emacs 29 or
+greater, and emacsql is usable when the `emacsql' package is
+installed.")
 
 (defun triples-connect (file)
   "Connect to the database FILE and make sure it is populated."
-  (unless (or (>= emacs-major-version 29)
-              (featurep 'emacsql))
-    (error "The triples package requires either emacs 29 or the emacsql 
package to be installed."))
-  (pcase (triples--sqlite-interface)
+  (unless (pcase-exhaustive triples-sqlite-interface
+              ('builtin
+               (and (fboundp 'sqlite-available-p) (sqlite-available-p)))
+              ('emacsql (require 'emacsql nil t)))
+    (error "The triples package requires either Emacs 29 or the emacsql 
package to be installed."))
+  (pcase triples-sqlite-interface
     ('builtin (let* ((db (sqlite-open file)))
                 (sqlite-execute db "CREATE TABLE IF NOT EXISTS triples(subject 
TEXT NOT NULL, predicate TEXT NOT NULL, object TEXT, properties TEXT NOT NULL)")
                 (sqlite-execute db "CREATE INDEX IF NOT EXISTS subject_idx ON 
triples (subject)")
@@ -84,7 +81,7 @@ This will return either `builtin' or `emacsql'."
 
 (defun triples-close (db)
   "Close sqlite database DB."
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin (sqlite-close db))
     ('emacsql (emacsql-close db))))
 
@@ -101,15 +98,12 @@ This will return either `builtin' or `emacsql'."
 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."
-  (if val
-      (pcase (type-of val)
-        ('string (format "\"%s\"" val))
-        ('symbol (format "%s" val))
-        ('cons (format "%s" val))
-        (_ 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.
-    "()"))
+  (let ((print-escape-control-characters t))
+    (if val
+        (format "%S" 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.
+      "()")))
 
 (defun triples-standardize-result (result)
   "Return RESULT in standardized form.
@@ -134,7 +128,7 @@ normal schema checks, so should not be called from client 
programs."
     (error "Predicates in triples must always be symbols"))
   (unless (plistp properties)
     (error "Properties stored must always be plists"))
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin 
      (sqlite-execute db "REPLACE INTO triples VALUES (?, ?, ?, ?)"
                      (list (triples-standardize-val subject)
@@ -166,7 +160,7 @@ elements, but it shouldn't matter."
   "Delete triples matching SUBJECT, PREDICATE, OBJECT, PROPERTIES.
 If any of these are nil, they will not selected for. If you set
 all to nil, everything will be deleted, so be careful!"
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin (sqlite-execute
                db
                (concat "DELETE FROM triples"
@@ -197,7 +191,7 @@ all to nil, everything will be deleted, so be careful!"
   "Delete triples matching SUBJECT and predicates with PRED-PREFIX."
   (unless (symbolp pred-prefix)
     (error "Predicates in triples must always be symbols"))
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin (sqlite-execute db "DELETE FROM triples WHERE subject = ? AND 
predicate LIKE ?"
                   (list (triples-standardize-val subject)
                         (format "%s/%%" (triples--decolon pred-prefix)))))
@@ -206,7 +200,7 @@ all to nil, everything will be deleted, so be careful!"
 
 (defun triples--select-pred-prefix (db subject pred-prefix)
   "Return rows matching SUBJECT and PRED-PREFIX."
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin (mapcar (lambda (row) (mapcar #'triples-standardize-result row))
           (sqlite-select db "SELECT * FROM triples WHERE subject = ? AND 
predicate LIKE ?"
                          (list (triples-standardize-val subject)
@@ -216,7 +210,7 @@ all to nil, everything will be deleted, so be careful!"
 
 (defun triples--select-predicate-object-fragment (db predicate object-fragment)
   "Return rows with PREDICATE and with OBJECT-FRAGMENT in object."
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin (mapcar (lambda (row) (mapcar #'triples-standardize-result row))
                       (sqlite-select db "SELECT * from triples WHERE predicate 
= ? AND object LIKE ?"
                                      (list (triples-standardize-val predicate)
@@ -229,7 +223,7 @@ all to nil, everything will be deleted, so be careful!"
 If any of these are nil, they are not included in the select
 statement. The SELECTOR is list of symbols subject, precicate,
 object, properties to retrieve or nil for *."
-  (pcase (triples--sqlite-interface)
+  (pcase triples-sqlite-interface
     ('builtin (mapcar (lambda (row) (mapcar #'triples-standardize-result row))
                       (sqlite-select db
                                      (concat "SELECT "



reply via email to

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