[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/emacsql bbe3031a50 130/427: Add table constraints.
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/emacsql bbe3031a50 130/427: Add table constraints. |
Date: |
Tue, 13 Dec 2022 02:59:35 -0500 (EST) |
branch: elpa/emacsql
commit bbe3031a5010e3ba821ace910481cd74611b9f3a
Author: Christopher Wellons <wellons@nullprogram.com>
Commit: Christopher Wellons <wellons@nullprogram.com>
Add table constraints.
---
emacsql-tests.el | 8 ++++++++
emacsql.el | 22 +++++++++++++++++++---
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/emacsql-tests.el b/emacsql-tests.el
index fd514fe205..d659dcd804 100644
--- a/emacsql-tests.el
+++ b/emacsql-tests.el
@@ -87,6 +87,14 @@
"CREATE TABLE foo (a, b, c PRIMARY KEY);")
([:create-table foo [a b (c :default $1)]] '("FOO")
"CREATE TABLE foo (a, b, c DEFAULT '\"FOO\"');")
+ ;; Table constraints
+ ([:create-table foo ([a b c] :primary [a c])] '()
+ "CREATE TABLE foo (a, b, c, PRIMARY KEY (a, c));")
+ ([:create-table foo ([a b c] :unique [a b c])] '()
+ "CREATE TABLE foo (a, b, c, UNIQUE (a, b, c));")
+ ([:create-table foo ([a b] :check (< a b)) ] '()
+ "CREATE TABLE foo (a, b, CHECK (a < b));")
+
([:drop-table $1] '(foo)
"DROP TABLE foo;")))
diff --git a/emacsql.el b/emacsql.el
index 0683b37fee..91808ae202 100644
--- a/emacsql.el
+++ b/emacsql.el
@@ -427,16 +427,32 @@ definitions for return from a `emacsql-defexpander'."
(push name output)
(mapconcat #'identity output " "))))
-(defun emacsql--schema-to-string (schema)
- "Convert SCHEMA into a SQL-consumable string."
+(defun emacsql--columns-to-string (columns)
+ "Convert COLUMNS into a SQL-consumable string."
(emacsql-with-vars ""
- (cl-loop for column across schema
+ (cl-loop for column across columns
when (symbolp column)
collect (var column :identifier) into parts
else
collect (combine (emacsql--column-to-string column)) into parts
finally (cl-return (mapconcat #'identity parts ", ")))))
+(defun emacsql--schema-to-string (schema)
+ (cl-etypecase schema
+ (vector (emacsql--columns-to-string schema))
+ (list
+ (emacsql-with-vars ""
+ (mapconcat
+ #'identity
+ (cons
+ (combine (emacsql--columns-to-string (pop schema)))
+ (cl-loop for (key value) on schema by #'cddr collect
+ (cl-ecase key
+ (:primary (format "PRIMARY KEY (%s)" (idents value)))
+ (:unique (format "UNIQUE (%s)" (idents value)))
+ (:check (format "CHECK (%s)" (expr value))))))
+ ", ")))))
+
(defun emacsql--vector (vector)
"Expand VECTOR, making variables as needed."
(emacsql-with-vars ""
- [nongnu] elpa/emacsql c8de0ff1fd 293/427: Adjust the EmacSQL protocol., (continued)
- [nongnu] elpa/emacsql c8de0ff1fd 293/427: Adjust the EmacSQL protocol., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 51224aab7a 288/427: Add unit test for last change., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql c5845884f4 021/427: Rename type to column., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 7caa63c11e 023/427: Allow any sequence for table spec., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 963f221b82 049/427: Add expr expansion function., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 109664b88b 060/427: Memoize emacsql-expand., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 1fb97f7d4a 092/427: Drop unusable macro emacsql-with-connection., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql add06c47b9 117/427: Bring back :into for :replace (oops!)., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql d7a05db54e 080/427: Add :replace expander., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 0f0840ffbf 128/427: Add :default column constraint., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql bbe3031a50 130/427: Add table constraints.,
ELPA Syncer <=
- [nongnu] elpa/emacsql 53b2e98515 131/427: Fill out README for new schema table constraints., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 364c3cacb6 133/427: More advanced :from sources, again., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 99a8069389 135/427: Add support for foreign keys., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql e6ab07e16b 140/427: Switch to a friendlier name., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql bec6af6940 148/427: Add VACUUM., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 03aebdecd1 160/427: Rename :log option to :debug., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql bb221f6134 161/427: Drop .print command flushing., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 72b34f6522 173/427: Add some more autoloading., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 3229cd41af 180/427: Change the requirements for front-end implementations., ELPA Syncer, 2022/12/13
- [nongnu] elpa/emacsql 431a3b325f 200/427: Toss "reap" and switch to new finalize with Cask., ELPA Syncer, 2022/12/13